Sử dụng Cloud Firestore với Cơ sở dữ liệu thời gian thực 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, đồng thời 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 sự hỗ trợ của Cơ sở dữ liệu thời gian thực cho sự hiện diện, như được nêu trong Xây dựng sự hiện diện trong 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 tới 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, do đó 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ắ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 của mình 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. Đặt Cloud Firestore làm cơ sở dữ liệu chính cho dữ liệu đã di chuyển. Sau 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 mức sử dụng Cơ sở dữ liệu thời gian thực cho dữ liệu đã di chuyển. Hãy xem xét các phiên bản ứng dụng 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 đến 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ó sang tài liệu và bộ sưu tập của Cloud Firestore, hãy ghi nhớ 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:

  • Các 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 cung cấp mức độ chi tiết hơn và giảm nhu cầu dữ liệu trùng lặp.
  • Con trỏ truy vấn cung cấp khả năng phân trang mạnh mẽ hơn.
  • Các giao dịch không còn yêu cầu một 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 thao tác nhỏ. Hãy cân nhắc việc giảm số lượng thao tác trên cơ sở dữ liệu của bạn và tránh việc 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 tiễn tốt nhất trong hành động

Ví dụ sau đây phản ánh một số điều cần cân nhắc mà bạn có thể thực hiện khi chuyển dữ liệu 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 mức 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 nổi tiếng ở 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 khả năng đọc nông nên bạn có thể phải cấu trúc dữ liệu thành 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 một 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 địa danh dưới dạng bộ sưu tập con, giữ cho mỗi tài liệu về thành phố ở kích thước nhỏ, thay vì các tài liệu cồng kềnh với các danh sách lồng nhau.

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 cho các kiể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ành phố 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 riêng các thành phố thủ đô sao chép dữ liệu từ danh sách cities , như sau:

{
   cities: {
    // ...
   },

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

Trong Cloud Firestore, bạn có thể thể hiện 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 máy khách Android, Apple hay Web hay Quản lý truy cập danh tính (IAM) cho máy chủ, hãy đảm bảo 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, do đó 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. 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 cần phải xác thực dữ liệu một cách riêng biệt (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 được truy vấn trả về.

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

Sau khi ánh xạ dữ liệu và cấu trúc 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 dự đị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ũ sang cơ sở dữ liệu Cloud Firestore mới của bạn. Nếu dự đị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 cùng một lúc, như được thảo luận trong bước tiếp theo, hãy đảm bảo bạn ưu tiên dữ liệu mới được Cloud Functions 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 .

    Hãy xem xét 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 mộ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, như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 lại 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ì 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 theo 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 Functions 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 chức năng ghi dữ liệu mới hoặc thay đổi dữ liệu 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 đã 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 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 Cloud Firestore của mình.

  1. Nếu bạn đã sử dụng Chức năng đá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 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 chức năng của bạn sang ghi vào một cơ sở dữ liệu hoặc xóa hoàn toàn chức năng 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 gắn với Cơ sở dữ liệu thời gian thực. Cách bạn xử lý vấn đề 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.