Catch up on highlights from Firebase at Google I/O 2023. Learn more

Sử dụng Cloud Firestore với Cơ sở dữ liệu thời gian thực của Firebase

Bạn có thể sử dụng cả Cơ sở dữ liệu thời gian thực Firebase và Cloud Firestore trong ứng dụng của mình và tận dụng lợi ích của từng giải pháp cơ sở dữ liệu để phù hợp với nhu cầu của bạn. Ví dụ: bạn có thể muốn tận dụng hỗ trợ hiện diện của Cơ sở dữ liệu thời gian thực, như đã nêu trong Build Presence in Cloud Firestore .

Tìm hiểu thêm về sự khác biệt giữa các cơ sở dữ liệu .

Di chuyển dữ liệu sang Cloud Firestore

Nếu bạn đã quyết định muốn di chuyển một số dữ liệu của mình từ Cơ sở dữ liệu thời gian thực sang Cloud Firestore, hãy xem xét quy trình sau. Bởi vì mọi cơ sở dữ liệu đều có những nhu cầu riêng và những cân nhắc về cấu trúc nên không có đường dẫn di chuyển tự động. Thay vào đó, bạn có thể làm theo tiến trình chung này:

  1. Ánh xạ cấu trúc dữ liệu và quy tắc bảo mật từ Cơ sở dữ liệu thời gian thực sang Cloud Firestore. Cả Cơ sở dữ liệu thời gian thực và Cloud Firestore đều dựa vào Xác thực Firebase, vì vậy bạn không cần thay đổi xác thực người dùng cho ứng dụng của mình. Tuy nhiên, các quy tắc bảo mật và mô hình dữ liệu là khác nhau và điều quan trọng là phải tính toán cẩn thận những khác biệt đó trước khi bạn bắt đầu di chuyển dữ liệu sang Cloud Firestore.

  2. Di chuyển dữ liệu lịch sử. Khi thiết lập cấu trúc dữ liệu mới trong Cloud Firestore, bạn có thể ánh xạ và di chuyển dữ liệu hiện có từ Cơ sở dữ liệu thời gian thực sang phiên bản Cloud Firestore mới của mình. Tuy nhiên, nếu đang sử dụng cả hai cơ sở dữ liệu trong ứng dụng của mình, thì bạn không cần di chuyển dữ liệu lịch sử ra khỏi Cơ sở dữ liệu thời gian thực.

  3. Phản chiếu dữ liệu mới tới Firestore trong thời gian thực. Sử dụng Chức năng đám mây để ghi dữ liệu mới vào cơ sở dữ liệu Cloud Firestore mới của bạn khi dữ liệu được thêm vào Cơ sở dữ liệu thời gian thực.

  4. Biến Cloud Firestore thành cơ sở dữ liệu chính của bạn cho dữ liệu được di chuyển. Khi bạn đã di chuyển một số dữ liệu của mình, hãy sử dụng Cloud Firestore làm cơ sở dữ liệu chính và giảm việc sử dụng Cơ sở dữ liệu thời gian thực cho dữ liệu đã di chuyển. Xem xét các phiên bản ứng dụng của bạn vẫn được liên kết với Cơ sở dữ liệu thời gian thực cho dữ liệu đó và cách bạn dự định tiếp tục hỗ trợ chúng.

Đảm bảo bạn tính chi phí thanh toán cho cả Cơ sở dữ liệu thời gian thựcCloud Firestore .

Ánh xạ dữ liệu của bạn

Dữ liệu trong Cơ sở dữ liệu thời gian thực được cấu trúc dưới dạng một cây duy nhất, trong khi Cloud Firestore hỗ trợ phân cấp dữ liệu rõ ràng hơn thông qua tài liệu, bộ sưu tập và bộ sưu tập con. Nếu bạn di chuyển một số dữ liệu của mình từ Cơ sở dữ liệu thời gian thực sang Cloud Firestore, bạn có thể muốn xem xét một kiến ​​trúc khác cho dữ liệu của mình.

Sự khác biệt chính cần xem xét

Nếu bạn di chuyển dữ liệu từ cây Cơ sở dữ liệu thời gian thực hiện có của mình sang các tài liệu và bộ sưu tập của Cloud Firestore, hãy lưu ý những khác biệt chính sau đây giữa các cơ sở dữ liệu có thể ảnh hưởng đến cách bạn cấu trúc dữ liệu trong Cloud Firestore:

  • Truy vấn nông mang lại sự linh hoạt hơn trong cấu trúc dữ liệu phân cấp.
  • Các truy vấn phức tạp mang lại mức độ chi tiết cao hơn và giảm nhu cầu về dữ liệu trùng lặp.
  • Con trỏ truy vấn cung cấp phân trang mạnh mẽ hơn.
  • Các giao dịch không còn yêu cầu một nguồn gốc chung cho tất cả dữ liệu của bạn và hiệu quả hơn.
  • Chi phí thanh toán khác nhau giữa Cơ sở dữ liệu thời gian thực và Cloud Firestore. Trong nhiều trường hợp, Cloud Firestore có thể đắt hơn Cơ sở dữ liệu thời gian thực, đặc biệt nếu bạn dựa vào nhiều hoạt động nhỏ. Cân nhắc giảm số lượng thao tác trên cơ sở dữ liệu của bạn và tránh ghi không cần thiết. Tìm hiểu thêm về sự khác biệt trong thanh toán giữa Cơ sở dữ liệu thời gian thực và Cloud Firestore.

Thực hành tốt nhất trong hành động

Ví dụ sau đây phản ánh một số cân nhắc mà bạn có thể thực hiện khi chuyển dữ liệu của mình giữa các cơ sở dữ liệu. Bạn có thể tận dụng khả năng đọc nông và khả năng truy vấn được cải thiện để có nhiều cấu trúc dữ liệu tự nhiên hơn những gì bạn có thể đã sử dụng với Cơ sở dữ liệu thời gian thực.

Hãy xem xét một ứng dụng hướng dẫn thành phố giúp người dùng tìm thấy các địa danh đáng chú ý ở các thành phố trên khắp thế giới. Vì Cơ sở dữ liệu thời gian thực thiếu các lần đọc nông, nên bạn có thể phải cấu trúc dữ liệu trong hai nút cấp cao nhất, như sau:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore có số lần đọc nông nên việc truy vấn tài liệu trong bộ sưu tập không lấy dữ liệu từ các bộ sưu tập con. Do đó, bạn có thể lưu trữ thông tin mốc trong một bộ sưu tập con:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

Tài liệu có kích thước tối đa là 1 MB, đây là một lý do khác để lưu trữ các mốc dưới dạng bộ sưu tập con, giữ cho mỗi tài liệu thành phố nhỏ, thay vì làm đầy tài liệu với danh sách lồng nhau.

Các khả năng truy vấn nâng cao của Cloud Firestore giúp giảm nhu cầu sao chép dữ liệu đối với các mẫu truy cập phổ biến. Ví dụ: hãy xem xét một màn hình trong ứng dụng hướng dẫn thành phố hiển thị tất cả các thủ đô được sắp xếp theo dân số. Trong Cơ sở dữ liệu thời gian thực, cách hiệu quả nhất để thực hiện việc này là duy trì một danh sách các thành phố thủ đô riêng biệt sao chép dữ liệu từ danh sách cities , như sau:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Trong Cloud Firestore, bạn có thể biểu thị danh sách các thành phố thủ đô theo thứ tự dân số dưới dạng một truy vấn:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Đọc thêm về mô hình dữ liệu Cloud Firestore và xem Giải pháp của chúng tôi để biết thêm ý tưởng về cách cấu trúc cơ sở dữ liệu Cloud Firestore của bạn.

Bảo mật dữ liệu của bạn

Cho dù bạn đang sử dụng Quy tắc bảo mật của Cloud Firestore cho Android, Apple hay máy khách Web hay Quản lý truy cập danh tính (IAM) cho máy chủ, hãy đảm bảo rằng bạn đang bảo mật dữ liệu của mình trong Cloud Firestore cũng như Cơ sở dữ liệu thời gian thực. Xác thực người dùng được xử lý bằng Xác thực cho cả hai cơ sở dữ liệu, vì vậy bạn không cần thay đổi cách triển khai Xác thực khi bắt đầu sử dụng Cloud Firestore.

Sự khác biệt chính cần xem xét

  • SDK dành cho thiết bị di động và web sử dụng Quy tắc bảo mật của Cloud Firestore, trong khi SDK máy chủ sử dụng Quản lý truy cập danh tính (IAM) để bảo mật dữ liệu.
  • Quy tắc bảo mật của Cloud Firestore không xếp tầng trừ khi bạn sử dụng ký tự đại diện. Các tài liệu và bộ sưu tập không kế thừa các quy tắc.
  • Bạn không cần phải xác thực dữ liệu một cách riêng biệt nữa (như bạn đã làm trong Cơ sở dữ liệu thời gian thực ).
  • Cloud Firestore kiểm tra các quy tắc trước khi thực hiện truy vấn để đảm bảo rằng người dùng có quyền truy cập thích hợp cho tất cả dữ liệu do truy vấn trả về.

Di chuyển dữ liệu lịch sử sang Cloud Firestore

Khi bạn đã ánh xạ cấu trúc dữ liệu và bảo mật của mình tới các mô hình bảo mật và dữ liệu của Cloud Firestore, bạn có thể bắt đầu thêm dữ liệu của mình. Nếu bạn định truy vấn dữ liệu lịch sử sau khi di chuyển ứng dụng của mình từ Cơ sở dữ liệu thời gian thực sang Cloud Firestore, hãy thêm bản xuất dữ liệu cũ vào cơ sở dữ liệu Cloud Firestore mới của bạn. Nếu định sử dụng cả Cơ sở dữ liệu thời gian thực và Cloud Firestore trong ứng dụng của mình, bạn có thể bỏ qua bước này.

Để tránh ghi đè dữ liệu mới bằng dữ liệu cũ, trước tiên bạn có thể muốn thêm dữ liệu lịch sử của mình. Nếu bạn thêm dữ liệu mới vào cả hai cơ sở dữ liệu đồng thời, như đã thảo luận trong bước tiếp theo, hãy đảm bảo rằng bạn ưu tiên dữ liệu mới được Chức năng đám mây thêm vào Cloud Firestore.

Để di chuyển dữ liệu lịch sử sang Cloud Firestore, hãy làm theo các bước sau:

  1. Xuất dữ liệu của bạn từ Cơ sở dữ liệu thời gian thực hoặc sử dụng bản sao lưu gần đây .
    1. Chuyển đến phần Cơ sở dữ liệu thời gian thực trong bảng điều khiển Firebase.
    2. Từ tab Dữ liệu , chọn nút cấp cơ sở dữ liệu của bạn và chọn Xuất JSON từ menu.
  2. Tạo cơ sở dữ liệu mới của bạn trong Cloud Firestore và thêm dữ liệu của bạn .

    Cân nhắc các chiến lược sau khi bạn di chuyển một số dữ liệu của mình sang Cloud Firestore:

    • Viết tập lệnh tùy chỉnh để chuyển dữ liệu cho bạn. Mặc dù chúng tôi không thể cung cấp mẫu cho tập lệnh này, vì mỗi cơ sở dữ liệu sẽ có những nhu cầu riêng, các chuyên gia của Cloud Firestore trên kênh Slack của chúng tôi hoặc trên Stack Overflow có thể xem xét tập lệnh của bạn hoặc đưa ra lời khuyên cho tình huống cụ thể của bạn.
    • Sử dụng SDK máy chủ (Node.js, Java, Python hoặc Go) để ghi dữ liệu trực tiếp lên Cloud Firestore. Để biết hướng dẫn về cách thiết lập SDK máy chủ, hãy xem Bắt đầu .
    • Để đẩy nhanh quá trình di chuyển dữ liệu lớn, hãy sử dụng tính năng ghi theo đợt và gửi tối đa 500 thao tác trong một yêu cầu mạng.
    • Để duy trì dưới giới hạn tốc độ của Cloud Firestore , hãy giới hạn hoạt động ở mức 500 lần ghi/giây cho mỗi bộ sưu tập.

Thêm dữ liệu mới vào Cloud Firestore

Để duy trì tính chẵn lẻ giữa các cơ sở dữ liệu của bạn, hãy thêm dữ liệu mới vào cả hai cơ sở dữ liệu trong thời gian thực. Sử dụng Chức năng đám mây để kích hoạt ghi vào Cloud Firestore bất cứ khi nào khách hàng ghi vào Cơ sở dữ liệu thời gian thực. Đảm bảo rằng Cloud Firestore ưu tiên dữ liệu mới đến từ Cloud Function hơn bất kỳ thao tác ghi nào bạn đang thực hiện từ quá trình di chuyển dữ liệu lịch sử của mình.

Tạo một chức năng để ghi dữ liệu mới hoặc thay đổi vào Cloud Firestore mỗi khi khách hàng ghi dữ liệu vào Cơ sở dữ liệu thời gian thực. Tìm hiểu thêm về trình kích hoạt Cơ sở dữ liệu thời gian thực cho Chức năng đám mây.

Đặt Cloud Firestore làm cơ sở dữ liệu chính cho dữ liệu được di chuyển

Nếu bạn đã quyết định sử dụng Cloud Firestore làm cơ sở dữ liệu chính cho một số dữ liệu của mình, hãy đảm bảo rằng bạn tính đến mọi chức năng phản chiếu dữ liệu mà bạn đã thiết lập và xác thực Quy tắc bảo mật của Cloud Firestore.

  1. Nếu bạn đã sử dụng Hàm đám mây để duy trì tính chẵn lẻ giữa các cơ sở dữ liệu của mình, hãy đảm bảo rằng bạn không sao chép các thao tác ghi trên cả hai cơ sở dữ liệu trong một vòng lặp. Chuyển đổi chức năng của bạn để ghi vào một cơ sở dữ liệu duy nhất hoặc xóa hoàn toàn chức năng này và bắt đầu loại bỏ dần chức năng ghi đối với dữ liệu đã di chuyển trong các ứng dụng vẫn được liên kết với Cơ sở dữ liệu thời gian thực. Cách bạn xử lý việc này cho ứng dụng của mình tùy thuộc vào nhu cầu cụ thể và người dùng của bạn.

  2. Xác minh rằng dữ liệu của bạn được bảo mật đúng cách. Xác thực Quy tắc bảo mật Cloud Firestore hoặc thiết lập IAM của bạn.