Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Next.js cho phép xây dựng ứng dụng full-stack với khả năng Server Side Rendering. Vercel và Netlify giúp viết backend API với serverless functions. Vậy câu hỏi tiếp theo: cơ sở dữ liệu lý tưởng cho Next.js apps là gì? Trong bài này, tôi sẽ xem xét các database phổ biến trong cộng đồng Next.js và nhận xét về mức độ phù hợp với mô hình serverless. Hai tiêu chí cần kiểm tra:

  • Giá serverless: Có tính phí theo sử dụng không? Khi DB không dùng, có vẫn phải trả tiền không?
  • Kết nối serverless: Có hỗ trợ kết nối dựa trên HTTP không? Không nên gặp vấn đề kết nối thường thấy với serverless functions.

TLDR

Tôi đã xem xét PlanetScale, Supabase, Upstash, Fauna, DynamoDB và MongoDB Atlas. Xem bảng so sánh dưới đây.

Tính năngPlanetScaleSupabaseUpstashFaunaDynamoDBMongoDB Atlas
APIMySQLPostgreSQLRedisFaunaDynamoDBMongoDB
LoạiRelationalRelationalKV StoreDocumentDocumentDocument
Free Tier🟢🟢🟢🟢🟢🟢
Giá Serverless🟡 (tối thiểu $29)🟡 (tối thiểu $25)🟢🟡 (tối thiểu $22.5)🟢🟢
REST API🔴🟢🟢🟢🟢🟢
GraphQL API🔴🔴🔴🟢🔴🔴
Sao chép toàn cầu🔴🔴🟢🟢🟢🟡 (chỉ Dedicated)
Database Branching🟢🔴🔴🔴🔴🔴
Cập nhật Realtime🔴🟢🔴🔴🟢🟡 (qua Realm)
Giá Đọc$1.5 / 10tr$0.09 / GB$0.2 / 100K$0.45 / 1tr (4KB)$0.25 / 1tr (2KB)$0.3 / 1tr (4KB)
Giá Ghi$1.5 / 1tr$0.09 / GB$0.2 / 100K$2.25 / 1tr (1KB)$1.25 / 1tr (1KB)$1.25 / 1tr (1KB)
Giá Lưu trữ$1.25 / GB$0.125 / GB$0.25 / GB$0.23 / GB$0.25 / GB$0.25 / GB

PlanetScale

  • PlanetScale là MySQL compatible database as a service.
  • Sử dụng Vitess ở nền. Điều này tuyệt vời vì Vitess được các géant như Youtube sử dụng chủ động.
  • PlanetScale giới thiệu khái niệm database branching. Bạn có thể tạo branch và merge thay đổi schema vào production database giống như git. AFAIK, tính năng này độc đáo cho PlanetScale.
  • Free tier 100 triệu reads/tháng.
  • Paid plans từ $29. Thành phần giá chính: Storage/tháng $1.25/GB (sau 25GB đầu), Reads/tháng $1.50/10tr (sau 500tr đầu), Writes/tháng $1.50/1tr (sau 50tr đầu).
  • PlanetScale không có API HTTP/REST.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Trang chủ nói: Trusted By Github, Square, Slack... Các công ty này dùng PlanetScale hay Vitess? Nếu dùng PlanetScale thì tuyệt vời. Còn không, tôi không thích kiểu marketing này. Tin tưởng Vitess và Tin tưởng PlanetScale là hai chuyện khác nhau.
  • PlanetScale yêu cầu kết nối TCP (MySQL connections). Có thể gây vấn đề cho serverless functions vì stateless. Họ nói số kết nối không phải vấn đề với Vitess nhưng vẫn có giới hạn max connections cho các plan.
  • Thiếu HTTP/REST API làm không thể dùng PlanetScale từ Cloudflare Workers và Vercel Edge vì họ không cho phép TCP connections.
  • Paid plans PlanetScale từ $29, giá không scale to zero. Dù không dùng DB, vẫn phải trả $29/db/tháng. Tôi nghĩ này xung đột với định nghĩa serverless.

Liên kết hữu ích:

  • Giá chi tiết
  • Hướng dẫn dùng Planetscale với Next.js và Prisma
  • Video tutorial dùng Planetscale và Next.js, deploy Vercel
  • Bình luận Hackernews về PlaneScale launch

Supabase

  • Supabase là bộ công cụ dev bao gồm database, authentication, storage. Tự gọi là Open Source Firebase Alternative
  • Cung cấp database PostgreSQL.
  • Giống Firebase, Supabase cho phép lắng nghe thay đổi database real-time.
  • Cung cấp RESTful API qua PostgREST. Hữu ích cho serverless functions.
  • Dùng được trong Cloudflare Workers nhờ REST API. Xem đây.
  • Free tier giới hạn 500MB storage và 2GB transfer/tháng.
  • Giống PlanetScale, Supabase có chi phí tối thiểu $25/tháng cho paid DB. Tóm tắt payg: Storage $0.125/GB-tháng, Data transfer $0.09/GB.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Supabase cung cấp DB, auth, object storage và serverless functions sắp ra mắt. Tôi lo lắng startup cung cấp nhiều dịch vụ chất lượng cao cạnh tranh Firebase của Google. Hy vọng họ thành công.
  • Giống PlanetScale, giá của họ không thực sự serverless. Paid plans yêu cầu chi phí cố định hàng tháng nên không scale to zero.

Liên kết hữu ích:

  • Giá chi tiết
  • Bắt đầu với Next.js
  • Video: Supabase Crash Course
  • Video: Supabase với Next.js

Upstash Redis

  • Upstash cung cấp Redis as a service với giá theo request.
  • Cung cấp cả Redis và REST API. Dùng được cho serverless và edge (Cloudflare Workers) functions.
  • Có option regional và global. Global database sao chép dữ liệu đa vùng.
  • Free tier max 10.000 commands/ngày. Pay-as-you-go: Commands $0.2/100K, Storage $0.25/GB.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Cả Upstash và RedisLabs nghĩ Redis đủ mạnh cho nhiều use case ngoài caching, kv-store. Nhưng nhiều dev vẫn thích SQL làm primary data store. Nếu cần query phức tạp, Redis có thể không phải lựa chọn đầu tiên.

Liên kết hữu ích:

  • Giá chi tiết
  • Bắt đầu Next.js và Redis
  • Bắt đầu Next.js Edge Functions
  • Video: Dùng Serverless Redis với Next.js

Fauna

  • Fauna cung cấp Globally Replicated Strongly Consistent database as a cloud service.
  • Cung cấp GraphQL API ngoài Fauna API.
  • Kết nối HTTP based, dùng được trong serverless functions không vấn đề kết nối.
  • Plan cơ bản (Individual) từ $22.5/tháng.
  • Giá Fauna: Reads $0.45/M units (4KB), Writes $2.25/M units (1KB), Storage $0.23/GB.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Global strong consistency tốn hiệu năng. Writes có latency cao hơn các DB khác.
  • Nếu dùng GraphQL thì tuyệt vời nhưng FQL khó học và dùng.
  • Giá Fauna có đơn vị riêng (TRO, TWO, TCO) và nhiều chiều. Cần đọc bài để hiểu giá.

Liên kết hữu ích:

  • Trang giá
  • Dùng Next.js với Fauna
  • Video: Dùng Next.js với Fauna

MongoDB Atlas

  • Atlas là MongoDB managed service với plan serverless, shared, dedicated.
  • Data (REST) API vừa được công bố. Cho phép truy cập DB qua HTTP.
  • Serverless plan với một số hạn chế. Giá theo operations nên scale to zero.
  • Multi-region replication chỉ có Dedicated plan.
  • Serverless Pricing: Reads $0.30/M unit (4KB), Writes $1.25/M unit (1KB), Storage $0.25/GB-tháng.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Serverless Plan và Data API cho thấy MongoDB Atlas không bỏ qua Serverless. Nhưng cả hai ở giai đoạn preview, cần cải tiến để trở thành data solution lý tưởng cho serverless apps.

Liên kết hữu ích:

  • Trang giá
  • Cách tích hợp MongoDB vào Next.js App
  • Video: Tích hợp MongoDB Into NextJS App

DynamoDB

  • Fully managed NoSQL DB với key-value và document data model.
  • Kết nối HTTP based, phù hợp serverless apps.
  • Giá theo operations + data transfer cost. Scale to zero.
  • Mặc định reads eventually consistent. Có thể yêu cầu strongly consistent reads nhưng có hạn chế.
  • Bật multi-region replication với chi phí thêm.
  • Giá: Reads $0.25/M read request units (2KB), Writes $1.25/M write request units (1KB), Data transfer (out) $0.09/GB, Storage $0.25/GB-tháng.

Chọn cơ sở dữ liệu tốt nhất cho ứng dụng Next.js: Các lựa chọn sẵn sàng Serverless

Nhận xét của tôi:

  • Đối với tôi, DynamoDB API không trực quan như Redis hay MongoDB.
  • Vấn đề vendor lock-in. DynamoDB chỉ ở AWS, không thể chuyển provider khác mà không đổi code.

Liên kết hữu ích:

  • Trang giá
  • Example App: Next.js với DynamoDB
  • Video Course: Next.js với DynamoDB

Kết luận

Vậy database tốt nhất cho Next.js là gì? Như mong đợi, không có câu trả lời duy nhất. Nhưng một số câu trả lời có điều kiện:

  • Cần relational DB 👉🏻 Supabase hoặc PlanetScale
  • Cần database branching 👉🏻 PlanetScale
  • Cần real time updates 👉🏻 Supabase hoặc MongoDB Atlas
  • Cần global low latency 👉🏻 Upstash hoặc DynamoDB
  • Cần global strong consistency 👉🏻 Fauna
  • Cần low latency key value store 👉🏻 Upstash
  • Yêu thích PostgreSQL 👉🏻 Supabase
  • Yêu thích MySQL 👉🏻 PlanetScale
  • Yêu thích Redis 👉🏻 Upstash
  • Yêu thích Mongo 👉🏻 MongoDB Atlas
  • Cần GraphQL 👉🏻 Fauna

Tôi cố gắng công bằng và chính xác. Nếu bạn thấy cần sửa, hãy comment trên twitter của tôi.