Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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 của 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ợ Realtime Cơ sở dữ liệu cho sự hiện diện, như được nêu trong xây dựng hiện diện trong Cloud FireStore .

Tìm hiểu thêm về sự khác nhau 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 sau:

  1. Ánh xạ cấu trúc dữ liệu và các 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 trên 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 khác nhau và điều quan trọng là phải tính toán cẩn thận các phân kỳ đó trước khi bạn bắt đầu 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 bạn đang sử dụng cả hai cơ sở dữ liệu trong ứng dụng của mình, bạn không cần phải 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 nó được thêm vào Cơ sở dữ liệu thời gian thực.

  4. Đặt Cloud Firestore cho cơ sở dữ liệu chính của bạn cho dữ liệu đã 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.

Hãy chắc chắn rằng bạn chiếm thanh toán chi phí cho cả hai cơ sở dữ liệu thời gian thựcđám mây 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 như 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 tài liệu và bộ sưu tập 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:

  • 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 nhiều chi tiết 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 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ỏ. Cân nhắc giảm số lượng hoạt động 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.

Các phương pháp hay nhất trong hành động

Ví dụ sau phản ánh một số cân nhắc 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 các lần đọc nông và khả năng truy vấn được cải thiện cho 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 thế giới. Vì Cơ sở dữ liệu thời gian thực thiếu các lần đọc nông, 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, vì vậy việc truy vấn tài liệu trong bộ sưu tập không lấy dữ liệu từ 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 ...]
}

Các tài liệu có kích thước tối đa là 1MB, đây là một lý do khác để lưu trữ các địa danh dưới dạng một bộ sưu tập con, giữ cho mỗi tài liệu thành phố 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 thông thường. 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 để làm điều này là để duy trì một danh sách riêng của các thành phố vốn mà các bản sao dữ liệu từ cities danh sách 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')

Tìm hiểu thêm về mô hình dữ liệu đám mây FireStore và hãy xem chúng tôi giải pháp để có thêm ý tưởng về cách cấu trúc cơ sở dữ liệu đám mây FireStore của bạn.

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

Cho dù bạn đang sử dụng đám mây Security Rules FireStore cho Android, iOS, hoặc khách hàng Web, hoặc Quản lý truy cập Identity (IAM) cho các máy chủ, chắc chắn rằng bạn đang bảo vệ dữ liệu của bạn 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ởi Xác thực cho cả hai cơ sở dữ liệu, vì vậy bạn không cần phải thay đổi việc 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 di động và web sử dụng Quy tắc bảo mật Cloud Firestore, trong khi SDK máy chủ sử dụng Quản lý quyền truy cập danh tính (IAM) để bảo mật dữ liệu.
  • Quy tắc bảo mật Cloud Firestore không phân 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 cần phải dữ liệu Validate riêng (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 trả về bởi truy vấn.

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

Khi bạn đã ánh xạ dữ liệu và cấu trúc bảo mật của mình với dữ liệu và mô hình bảo mật 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 xuất dữ liệu cũ vào cơ sở dữ liệu Cloud Firestore mới của bạn. Nếu bạn đị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 với 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 bạn ưu tiên dữ liệu mới được thêm vào Cloud Firestore bằng Chức năng đám mây.

Để 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 một bản sao lưu gần đây .
    1. Tới những phần cơ sở dữ liệu thời gian thực trong căn cứ hỏa lực console.
    2. Từ tab Data, chọn nút gốc cấp của cơ sở dữ liệu của bạn và chọn Export 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 của bạn cho bạn. Trong khi chúng tôi không thể cung cấp một khuôn mẫu để kịch bản này, bởi vì tất cả các cơ sở dữ liệu sẽ có những nhu cầu đặc biệt, Cloud FireStore chuyên gia về chúng tôi kênh Slack hoặc trên Stack Overflow có thể xem lại kịch bản của bạn hoặc tư vấn phục vụ cho tình hình 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. Để được hướng dẫn về việc thành lập SDK máy chủ, xem Bắt đầu .
    • Để thúc đẩy sự di cư của dữ liệu lớn, sử dụng batched viết và gửi lên đến 500 hoạt động trong một yêu cầu mạng duy nhất.
    • Để duy trì dưới giới hạn tốc độ của Cloud FireStore , hoạt động giới hạn 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ừ Chức năng đám mây hơn bất kỳ lần 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 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ề Realtime trigger Cơ sở dữ liệu cho Cloud Chức năng.

Đặt Cloud Firestore cho cơ sở dữ liệu chính của bạn 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 rằng bạn không lặp lại 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 để ghi vào một cơ sở dữ liệu duy nhất hoặc loại bỏ hoàn toàn chức năng và bắt đầu loại bỏ 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ý vấn đề này cho ứng dụng của mình tùy thuộc vào nhu cầu cụ thể của bạn 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.