Next.js cho phép các nhà phát triển xây dựng các ứng dụng ngăn xếp đầy đủ với khả năng Kết xuất phía Máy chủ. Vercel và Netlify giúp họ viết API phụ trợ với các chức năng không cần máy chủ. Vì vậy, câu hỏi tiếp theo là cơ sở dữ liệu lý tưởng cho ứng dụng Next.js là gì. Trong bài đăng này, tôi sẽ xem xét các cơ sở dữ liệu phổ biến trong cộng đồng Next.js. Tôi sẽ bình luận về cách chúng phù hợp với mô hình không máy chủ. Hai điều cần kiểm tra:
- Đặt giá không cần máy chủ:Giá có phải trả cho mỗi lần sử dụng không? Khi cơ sở dữ liệu không được sử dụng, bạn vẫn phải trả tiền?
- Kết nối không máy chủ:Có hỗ trợ cho các kết nối dựa trên HTTP không? Vì vậy, sẽ không có bất kỳ sự cố kết nối nào thường gặp với các chức năng không có máy chủ.
TLDR
Tôi đã xem xét PlanetScale, Supabase, Upstash, Fauna, DynamoDB và MongoDB Atlas. Kiểm tra bảng bên dưới để so sánh bộ tính năng của từng sản phẩm.
Tính năng | PlanetScale | Siêu dữ liệu | Upstash | Động vật | DynamoDB | MongoDB Atlas |
---|---|---|---|---|---|---|
API | MySQL | PostgreSQL | Redis | Động vật | DynamoDB | MongoDB |
Loại | Quan hệ | Quan hệ | Cửa hàng KV | Tài liệu | Tài liệu | Tài liệu |
Bậc miễn phí | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
Định giá không cần máy chủ | 🟡 (tối thiểu $ 29) | 🟡 (tối thiểu $ 25) | 🟢 | 🟡 (tối thiểu $ 22,5) | 🟢 | 🟢 |
API REST | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
API GraphQL | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 |
Nhân rộng toàn cầu | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🟡 (chỉ dành cho Chuyên dụng) |
Phân nhánh cơ sở dữ liệu | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 |
Cập nhật thời gian thực | 🔴 | 🟢 | 🔴 | 🔴 | 🟢 | 🟡 (thông qua Realm) |
Đọc giá | 1,5 đô la / 10 triệu | 0,09 đô la / GB | 0,2 đô la / 100 nghìn | 0,45 đô la / 1m (4KB) | 0,25 đô la / 1 triệu (2KB) | 0,3 đô la / 1m (4KB) |
Ghi giá | 1,5 đô la / 1 triệu | 0,09 đô la / GB | 0,2 đô la / 100 nghìn | 2,25 đô la / 1m (1KB) | 1,25 đô la / 1 triệu (1KB) | 1,25 đô la / 1 triệu (1KB) |
Lưu trữ giá | 1,25 đô la / GB | 0,125 đô la / GB | 0,25 đô la / GB | 0,23 đô la / GB | 0,25 đô la / GB | 0,25 đô la / GB |
PlanetScale
- PlanetScale là một dịch vụ cơ sở dữ liệu tương thích với MySQL.
- Nó sử dụng Vitess ở nền. Điều này thật tuyệt vì Vitess đang được những người khổng lồ như Youtube tích cực sử dụng.
- PlanetScale đã giới thiệu khái niệm phân nhánh cơ sở dữ liệu. Bạn có thể tạo các nhánh và hợp nhất các thay đổi lược đồ vào cơ sở dữ liệu sản xuất của mình giống như git. Afaik, tính năng này là duy nhất cho PlanetScale.
- Nó có một cấp miễn phí với 100 triệu lượt đọc mỗi tháng.
- Các gói trả phí bắt đầu từ $ 29. Các thành phần giá chính cho gói trả phí là:
- Dung lượng lưu trữ / tháng:$ 1,25 / GB sau 25GB đầu tiên
- Số lượt đọc / tháng:$ 1,50 mỗi 10 triệu, sau 500m đầu tiên
- Viết / tháng:$ 1,50 mỗi 1m, sau 50 triệu đầu tiên
- PlanetScale không có API dựa trên HTTP / REST.
Nhận xét của tôi:
- Trong trang chủ, người ta nói rằng:Trusted By Github, Square, Slack, v.v. Các công ty này sử dụng PlanetScale hay Vitess? Nếu các công ty này sử dụng PlanetScale thì thật tuyệt. Nếu không, tôi không cảm thấy tốt về loại hình tiếp thị này.
Trusting Vitess
vàTrusting PlanetScale
là những thứ khác nhau - PlanetScale yêu cầu bạn sử dụng kết nối dựa trên TCP (kết nối MySQL). Đây có thể là vấn đề đối với các chức năng không có máy chủ vì chúng không có trạng thái. Họ nói rằng số lượng kết nối không phải là vấn đề đối với Vitess nhưng vẫn có giới hạn kết nối tối đa cho các gói.
- Thiếu API HTTP / REST khiến bạn không thể sử dụng PlanetScale từ các nền tảng Cloudflare worker và Vercel Edge vì chúng không cho phép kết nối TCP.
- Các gói trả phí theo quy mô hành tinh bắt đầu từ $ 29, do đó, giá không tăng về 0. Ngay cả khi bạn không sử dụng DB, bạn phải sử dụng ít nhất 29 đô la cho mỗi db. Tôi nghĩ rằng điều này mâu thuẫn với định nghĩa của
serverless
.
Liên kết hữu ích:
- Giá cả chi tiết
- Hướng dẫn sử dụng Planetscale với Next.js và Prisma
- Video hướng dẫn sử dụng Planetscale và Next.js, sau đó triển khai sang Vercel
- Hackernews nhận xét về việc ra mắt PlaneScale
Siêu dữ liệu
- Siêu dữ liệu là một tập hợp các công cụ dành cho nhà phát triển bao gồm cơ sở dữ liệu, dịch vụ xác thực, lưu trữ. Họ tự gọi mình là
Open Source Firebase Alternative
- Supabase cung cấp cơ sở dữ liệu PostgreSQL.
- Cũng giống như Firebase, Supabase cho phép các nhà phát triển lắng nghe các thay đổi trên cơ sở dữ liệu trong thời gian thực.
- Supabase cung cấp một API RESTful bằng PostgREST. Điều này đặc biệt hữu ích nếu bạn định sử dụng Supabase trong các chức năng không có máy chủ.
- Supabase có thể được sử dụng trong Cloudflare worker nhờ API REST của nó. Kiểm tra cái này.
- Cấp siêu dữ liệu miễn phí được giới hạn ở bộ nhớ 500 MB và truyền dữ liệu 2GB hàng tháng.
- Tương tự như PlanetScale, Supabase có chi phí tối thiểu cho cơ sở dữ liệu trả phí là $ 25 / tháng. Tóm tắt định giá payg:
- Bộ nhớ:$ 0,125 mỗi GB-tháng
- Truyền dữ liệu:0,09 đô la mỗi GB
Nhận xét của tôi:
- Supabase cung cấp cơ sở dữ liệu, dịch vụ xác thực, lưu trữ đối tượng và cả
serverless functions
đang đến. Tôi lo lắng rằng một công ty khởi nghiệp khó có thể cung cấp nhiều dịch vụ với chất lượng cao và cạnh tranh với Firebase do Google hậu thuẫn. Tôi hy vọng họ sẽ thành công. - Cũng giống như PlanetScale, tôi nghĩ rằng giá của họ không đúng với máy chủ. Các gói trả phí của họ yêu cầu chi phí cố định hàng tháng nên không bao giờ quy mô về 0.
Liên kết hữu ích:
- Giá cả chi tiết
- Bắt đầu với Next.js
- Video:Khóa học về sự cố siêu dữ liệu
- Video hướng dẫn:Siêu dữ liệu với Next.js
Upstash Redis
- Upstash cung cấp Redis như một dịch vụ với giá theo yêu cầu.
- Nó cung cấp cả API Redis và REST. Vì vậy, bạn có thể sử dụng nó với cả hai chức năng serverless và edge (Cloudflare worker).
- Upstash có các tùy chọn khu vực và toàn cầu. Cơ sở dữ liệu toàn cầu sao chép dữ liệu sang nhiều vùng.
- Nó có một tầng miễn phí với tối đa 10.000 lệnh mỗi ngày. Phương thức trả tiền theo giá của nó như sau:
- Lệnh:$ 0,2 cho mỗi 100K lệnh
- Bộ nhớ:$ 0,25 mỗi GB
Nhận xét của tôi:
- Cả chúng tôi (Upstash) và RedisLabs đều nghĩ rằng Redis đủ mạnh cho nhiều trường hợp sử dụng ngoài các trường hợp sử dụng Redis cổ điển (bộ nhớ đệm, kv-store). Nhưng tôi vẫn thấy nhiều nhà phát triển thích cơ sở dữ liệu SQL làm nơi lưu trữ dữ liệu chính. Nếu bạn cần các khả năng truy vấn phức tạp, Redis có thể không phải là lựa chọn đầu tiên của bạn.
Liên kết hữu ích:
- Giá cả chi tiết
- Bắt đầu với Next.js và Redis
- Bắt đầu với Next.js Edge Functions
- Video:Sử dụng Serverless Redis với Next.js
Hệ động vật
- Fauna cung cấp cơ sở dữ liệu được nhân rộng trên toàn cầu và nhất quán như một dịch vụ đám mây.
- Nó cung cấp API GraphQL ngoài API động vật.
- Các kết nối của nó dựa trên HTTP nên bạn có thể sử dụng Fauna trong các chức năng không máy chủ mà không gặp bất kỳ sự cố nào liên quan đến kết nối.
- Gói cơ bản nhất (Cá nhân) bắt đầu từ $ 22,5 / tháng.
- Định giá động vật:
- Số lần đọc:$ 0,45 / Triệu đơn vị (4KB)
- Viết:$ 2,25 / Triệu đơn vị (1KB)
- Bộ nhớ:$ 0,23 / GB
Nhận xét của tôi:
- Tính nhất quán mạnh mẽ trên toàn cầu đi kèm với chi phí hiệu suất tăng thêm. Các văn bản có độ trễ cao hơn so với các cơ sở dữ liệu thay thế khác.
- Nếu bạn sẽ sử dụng GraphQL thì thật tuyệt nhưng nếu không thì FQL rất khó để tôi học và sử dụng.
- Định giá động vật có các đơn vị riêng (TRO, TWO, TCO) và nhiều kích thước. Bạn cần đọc các bài báo để hiểu giá cả.
Liên kết hữu ích:
- Trang Định giá
- Sử dụng Next.js với Fauna
- Video:Sử dụng Next.js với Fauna
Bản đồ MongoDB
- Atlas là một MongoDB dưới dạng dịch vụ được quản lý có các gói không máy chủ, chia sẻ và dành riêng ..
- API dữ liệu (REST) đã được công bố gần đây. Điều này cho phép bạn truy cập cơ sở dữ liệu của mình bằng HTTP.
- MongoDB Atlas có gói Serverless với một số hạn chế. Giá của gói này là theo từng hoạt động, do đó, nó có quy mô bằng 0 như mong đợi từ một sản phẩm không có máy chủ.
- Tính năng sao chép đa vùng chỉ khả dụng với Gói chuyên dụng.
- Đặt giá không cần máy chủ:
- Số lần đọc:$ 0,30 mỗi triệu đơn vị (4KB)
- Viết:$ 1,25 mỗi triệu đơn vị (1KB)
- Bộ nhớ:$ 0,25 / GB-tháng
Nhận xét của tôi:
- API dữ liệu và kế hoạch không máy chủ cho chúng tôi biết rằng MongoDB Atlas không bỏ qua không gian không máy chủ. Tuy nhiên, cả hai giải pháp đều đang trong giai đoạn xem trước và cần một số cải tiến để trở thành giải pháp dữ liệu lý tưởng cho các ứng dụng không máy chủ.
Liên kết hữu ích:
- Trang Định giá
- Cách tích hợp MongoDB vào Ứng dụng Next.js
- Video:Tích hợp MongoDB vào ứng dụng NextJS của bạn
DynamoDB
- Cơ sở dữ liệu NoSQL được quản lý hoàn toàn với mô hình dữ liệu tài liệu và khóa-giá trị.
- Các kết nối dựa trên HTTP nên nó phù hợp với các ứng dụng không có máy chủ.
- Định giá cho mỗi hoạt động cùng với chi phí truyền dữ liệu. Vì vậy, tỷ lệ của nó là 0.
- Theo mặc định, các lần đọc cuối cùng đều nhất quán. Bạn cũng có thể yêu cầu số lần đọc nhất quán nhưng nó có một số hạn chế.
- Bạn có thể bật tính năng sao chép nhiều vùng với chi phí bổ sung.
- Định giá:
- Lượt đọc:0,25 đô la mỗi triệu đơn vị yêu cầu đọc (2KB)
- Viết:$ 1,25 mỗi triệu đơn vị yêu cầu đọc (1KB)
- Truyền dữ liệu (ra ngoài):$ 0,09 mỗi GB
- Bộ nhớ:$ 0,25 mỗi GB / tháng
Nhận xét của tôi:
- Đối với tôi, API DynamoDB không trực quan như Redis hoặc MongoDB.
- Đã xảy ra sự cố khóa nhà cung cấp. DynamoDB chỉ có ở AWS và bạn không thể chuyển ứng dụng của mình sang nhà cung cấp khác mà không thay đổi mã.
Liên kết hữu ích:
- Trang Định giá
- Ứng dụng mẫu:Next.js với DynamoDB
- Khóa học video:Next.js với DynamoDB
Kết luận
Vậy cơ sở dữ liệu tốt nhất cho Next.js là gì? Đúng như dự đoán, không có câu trả lời duy nhất. Nhưng hãy đưa ra một số câu trả lời có điều kiện:
- Nếu bạn cần một DB quan hệ 👉🏻 Siêu dữ liệu hoặc PlanetScale
- Nếu bạn cần phân nhánh cơ sở dữ liệu 👉🏻 PlanetScale
- Nếu bạn cần cập nhật theo thời gian thực 👉🏻 Supabase hoặc MongoDB Atlas
- Nếu bạn cần độ trễ thấp trên toàn cầu 👉🏻 Upstash hoặc DynamoDB
- Nếu bạn cần sự nhất quán mạnh mẽ trên toàn cầu 👉🏻 Fauna
- Nếu bạn cần lưu trữ giá trị khóa có độ trễ thấp 👉🏻 Upstash
- Nếu bạn yêu thích PostgreSQL 👉🏻 Supabase
- Nếu bạn yêu thích MySQL 👉🏻 PlanetScale
- Nếu bạn yêu thích Redis 👉🏻 Upstash
- Nếu bạn yêu thích Mongo 👉🏻 MongoDB Atlas
- Nếu bạn cần GraphQL 👉🏻 Fauna
Tôi đã cố gắng để được công bằng và chính xác. Nếu bạn nghĩ rằng có điều gì đó tôi cần sửa chữa, hãy để lại bình luận của bạn trên twitter của tôi