Chọn một cơ sở dữ liệu: Cloud Firestore hoặc Cơ sở dữ liệu theo thời gian thực

Firebase cung cấp hai cơ sở dữ liệu tài liệu dựa trên đám mây mà ứng dụng có thể truy cập. Chúng tôi khuyên khách hàng mới nên bắt đầu với Cloud Firestore:

  • Cloud Firestore là cơ sở dữ liệu tài liệu tương thích với JSON cấp doanh nghiệp được đề xuất, được hơn 600.000 nhà phát triển tin dùng. Dịch vụ này phù hợp với các ứng dụng có mô hình dữ liệu đa dạng thức, đòi hỏi khả năng truy vấn, khả năng có thể mở rộng và tính sẵn sàng cao. Dịch vụ này cũng hỗ trợ đồng bộ hoá ứng dụng với độ trễ thấp và truy cập dữ liệu ngoại tuyến.

  • Realtime Database là cơ sở dữ liệu JSON cổ điển của Firebase. Cơ sở dữ liệu này phù hợp với các ứng dụng có mô hình dữ liệu đơn giản, yêu cầu tra cứu đơn giản và đồng bộ hoá có độ trễ thấp với khả năng có thể mở rộng hạn chế.

Một số điều quan trọng khác cần cân nhắc là gì?

Sau khi cân nhắc những điểm chính cần xem xét nêu trên, bạn có thể đã sẵn sàng chọn một cơ sở dữ liệu. Nếu bạn vẫn đang cân nhắc ưu và nhược điểm, thì phần này sẽ đề cập đến những điểm khác biệt khác giữa Cloud Firestore và Realtime Database.

Mô hình dữ liệu

Cả Realtime Database và Cloud Firestore đều là Cơ sở dữ liệu NoSQL.

Cloud Firestore [ PREFERRED ] Realtime Database
Lưu trữ dữ liệu dưới dạng tập hợp tài liệu.
  • Dữ liệu đơn giản rất dễ lưu trữ trong tài liệu, rất giống với JSON.
  • Dữ liệu phân cấp, phức tạp sẽ dễ sắp xếp hơn trên quy mô lớn bằng cách sử dụng bộ sưu tập con trong tài liệu.
  • Yêu cầu ít phi chuẩn hoá và làm phẳng dữ liệu hơn.

Tìm hiểu thêm về mô hình dữ liệu Cloud Firestore.

Lưu trữ dữ liệu dưới dạng một cây JSON lớn.
  • Dữ liệu đơn giản rất dễ lưu trữ.
  • Dữ liệu phân cấp, phức tạp sẽ khó sắp xếp hơn trên quy mô lớn.

Tìm hiểu thêm về mô hình dữ liệu Realtime Database.

Hỗ trợ theo thời gian thực và khi không có mạng

Cả hai đều có SDK ưu tiên thiết bị di động, theo thời gian thực và đều hỗ trợ lưu trữ dữ liệu cục bộ cho các ứng dụng có thể hoạt động khi không có mạng.

Cloud Firestore [ PREFERRED ] Realtime Database
Hỗ trợ ngoại tuyến cho ứng dụng Apple, Android và web. Hỗ trợ ngoại tuyến cho ứng dụng Apple và Android.

Tỷ lệ hiển thị

Bạn nên biết khi nào ứng dụng khách trực tuyến hoặc ngoại tuyến. Firebase Realtime Database có thể ghi lại trạng thái kết nối của ứng dụng và cung cấp thông tin cập nhật mỗi khi trạng thái kết nối của ứng dụng thay đổi.

Cloud Firestore [ PREFERRED ] Realtime Database
Không được hỗ trợ sẵn. Bạn có thể xây dựng dựa trên khả năng hỗ trợ của Realtime Database cho trạng thái hiện diện bằng cách đồng bộ hoá Cloud Firestore và Realtime Database bằng Cloud Functions. Hãy xem bài viết Xây dựng trạng thái hiện diện trong Cloud Firestore. Hỗ trợ tính năng phát hiện sự hiện diện.

Truy vấn

Truy xuất, sắp xếp và lọc dữ liệu từ một trong hai cơ sở dữ liệu thông qua các truy vấn.

Cloud Firestore [ PREFERRED ] Realtime Database
Truy vấn được lập chỉ mục bằng tính năng sắp xếp và lọc phức hợp.
  • Bạn có thể liên kết các bộ lọc và kết hợp việc lọc cũng như sắp xếp trên một thuộc tính trong một truy vấn.
  • Truy vấn nông: chỉ trả về tài liệu trong một tập hợp hoặc nhóm tập hợp cụ thể và không trả về dữ liệu tập hợp con.
  • Truy vấn phải luôn trả về toàn bộ tài liệu.
  • Các truy vấn được lập chỉ mục theo mặc định: Hiệu suất truy vấn tỷ lệ thuận với kích thước của tập kết quả, chứ không phải tập dữ liệu của bạn.
Truy vấn sâu với các tính năng sắp xếp và lọc bị giới hạn.
  • Truy vấn có thể sắp xếp hoặc lọc theo một thuộc tính, nhưng không thể thực hiện cả hai.
  • Theo mặc định, các truy vấn sẽ có tính chất sâu: chúng luôn trả về toàn bộ cây con.
  • Các truy vấn có thể truy cập dữ liệu ở bất kỳ mức độ chi tiết nào, cho đến các giá trị nút lá riêng lẻ trong cây JSON.
  • Truy vấn không yêu cầu chỉ mục; tuy nhiên, hiệu suất của một số truy vấn nhất định sẽ giảm khi tập dữ liệu của bạn tăng lên.

Hoạt động ghi và giao dịch

Cloud Firestore [ PREFERRED ] Realtime Database
Thao tác ghi và giao dịch nâng cao.
  • Thao tác ghi dữ liệu thông qua các thao tác đặt và cập nhật cũng như các phép biến đổi nâng cao như toán tử mảng và toán tử số.
  • Giao dịch có thể đọc và ghi dữ liệu một cách tự động từ bất kỳ phần nào của cơ sở dữ liệu.
Các thao tác ghi và giao dịch cơ bản.
  • Ghi dữ liệu thông qua các thao tác đặt và cập nhật.
  • Giao dịch là nguyên tử trên một cây con dữ liệu cụ thể.

Độ tin cậy và hiệu suất

Cloud Firestore [ PREFERRED ] Realtime Database
Cloud Firestore là một giải pháp theo khu vực và đa khu vực có khả năng tự động mở rộng quy mô.
  • Giải pháp có độ trễ thấp, với thời gian phản hồi thông thường không quá 30 mili giây.
  • Lưu trữ dữ liệu của bạn trên nhiều trung tâm dữ liệu ở các khu vực riêng biệt, đảm bảo khả năng mở rộng trên toàn cầu và độ tin cậy cao.
  • Có sẵn trong các cấu hình theo khu vực hoặc nhiều khu vực trên toàn thế giới.
Đọc thêm về các đặc điểm về hiệu suất và độ tin cậy của Cloud Firestore trong Thoả thuận mức độ cung cấp dịch vụ.
Realtime Database là một giải pháp theo khu vực.
  • Có trong cấu hình theo khu vực. Cơ sở dữ liệu chỉ có thể sử dụng trong một vùng của một khu vực.
  • Độ trễ cực thấp, với thời gian phản hồi thông thường không quá 10 mili giây. Một lựa chọn lý tưởng để đồng bộ hoá trạng thái thường xuyên.
Đọc thêm về các đặc điểm về hiệu suất và độ tin cậy của Realtime Database trong Thoả thuận mức độ cung cấp dịch vụ.

Thời gian hoạt động

Cloud Firestore [ PREFERRED ] Realtime Database
Hiệu suất thời gian hoạt động cực kỳ cao.
  • Thời gian hoạt động thông thường đạt 99,999%.
  • Nếu tính sẵn sàng là quan trọng nhất, chẳng hạn như trong các ứng dụng thương mại điện tử, hãy sử dụng Cloud Firestore.
Hiệu suất thời gian hoạt động cao.
  • Thời gian hoạt động thông thường là 99,95%.

Khả năng có thể mở rộng

Cloud Firestore [ PREFERRED ] Realtime Database
Tự động điều chỉnh tỷ lệ.
  • Mở rộng quy mô hoàn toàn tự động. Không có giới hạn về số lượng kết nối đồng thời hoặc tổng số lượt ghi vào cơ sở dữ liệu/tốc độ giây.
  • Có giới hạn về tốc độ ghi vào từng tài liệu hoặc chỉ mục.
Để mở rộng quy mô, bạn cần phân đoạn.
  • Mở rộng quy mô lên khoảng 200.000 kết nối đồng thời và 1.000 lượt ghi/giây trong một cơ sở dữ liệu. Để mở rộng quy mô vượt quá mức đó, bạn cần phân đoạn dữ liệu trên nhiều cơ sở dữ liệu.
  • Không có giới hạn cục bộ về tốc độ ghi đối với từng phần dữ liệu.

Bảo mật

Cloud Firestore [ PREFERRED ] Realtime Database
Các quy tắc không xếp tầng kết hợp việc uỷ quyền và xác thực.
  • Các thao tác đọc và ghi từ SDK di động được bảo mật bằng Cloud Firestore Security Rules.
  • Các thao tác đọc và ghi từ SDK máy chủ được bảo mật bằng Quản lý danh tính và quyền truy cập (IAM).
  • Các quy tắc không được áp dụng theo tầng trừ phi bạn sử dụng ký tự đại diện.
  • Quy tắc có thể ràng buộc các truy vấn: Nếu kết quả của một truy vấn có thể chứa dữ liệu mà người dùng không có quyền truy cập, thì toàn bộ truy vấn sẽ không thành công.
Ngôn ngữ quy tắc xếp tầng giúp tách biệt việc uỷ quyền và xác thực.

Giá

Cả hai giải pháp đều có trong gói giá Spark và Blaze.

Cloud Firestore [ PREFERRED ] Realtime Database
Phí chủ yếu tính trên các thao tác được thực hiện trong cơ sở dữ liệu của bạn (đọc, ghi, xoá) và băng thông cũng như bộ nhớ (với mức phí thấp hơn).

Cloud Firestore hỗ trợ ngân sách và cảnh báo hằng tháng để tránh chi tiêu nhiều hơn mức bạn muốn.

Tìm hiểu thêm về các gói giá của Cloud Firestore.

Chỉ tính phí cho băng thông và bộ nhớ, nhưng với mức giá cao hơn.

Tìm hiểu thêm về các gói giá của Realtime Database.

Sử dụng cả Cloud Firestore và Realtime Database

Bạn có thể sử dụng cả hai cơ sở dữ liệu trong cùng một ứng dụng hoặc dự án Firebase. Cả hai cơ sở dữ liệu NoSQL đều có thể lưu trữ cùng một loại dữ liệu và các thư viện ứng dụng hoạt động theo cách tương tự. Hãy lưu ý những điểm khác biệt đã nêu ở trên nếu bạn quyết định sử dụng cả hai cơ sở dữ liệu trong ứng dụng của mình.

Tìm hiểu thêm về các tính năng có trong cả Realtime Database và Cloud Firestore.

Bạn đã sẵn sàng chọn một cơ sở dữ liệu chưa?

Hy vọng thông tin so sánh này đã giúp bạn chọn được một giải pháp cơ sở dữ liệu Firebase. Giờ đây, bạn có thể tìm hiểu cách thêm cơ sở dữ liệu vào dự án Firebase.