Catch up on everthing we announced at this year's Firebase Summit. Learn more

Quy mô với nhiều cơ sở dữ liệu

Cách tốt nhất để tối ưu hóa hiệu suất và mở rộng quy mô dữ liệu của bạn trong Cơ sở dữ liệu thời gian thực của Firebase là chia nhỏ dữ liệu của bạn thành nhiều phiên bản Cơ sở dữ liệu thời gian thực, còn được gọi là phân tách cơ sở dữ liệu. Sharding mang đến cho bạn sự linh hoạt để quy mô vượt ra ngoài giới hạn áp dụng cho các trường hợp cơ sở dữ liệu cá nhân, ngoài việc cân bằng tải và tối ưu hóa hiệu suất.

Khi nào cần chia nhỏ dữ liệu của bạn

Bạn có thể muốn chia nhỏ dữ liệu của mình trên nhiều cơ sở dữ liệu nếu bạn đang sử dụng Cơ sở dữ liệu thời gian thực và phù hợp với bất kỳ trường hợp nào sau đây:

  • Bạn muốn mở rộng quy mô vượt quá giới hạn của 200.000 kết nối đồng thời, 1.000 ghi hoạt động / giây, hoặc bất kỳ khác giới hạn cho một trường hợp cơ sở dữ liệu duy nhất.
  • Bạn có nhiều tập dữ liệu rời rạc và muốn tối ưu hóa hiệu suất (ví dụ: ứng dụng trò chuyện phục vụ các nhóm người dùng độc lập, riêng biệt).
  • Bạn muốn cân bằng tải trên nhiều cơ sở dữ liệu để cải thiện thời gian hoạt động và giảm nguy cơ quá tải một phiên bản cơ sở dữ liệu duy nhất.

Cách phân chia dữ liệu của bạn

Để chia nhỏ dữ liệu của bạn, hãy làm theo các bước sau (được mô tả chi tiết hơn bên dưới):

  1. Ánh xạ dữ liệu của bạn với nhiều cơ sở dữ liệu theo nhu cầu cụ thể của ứng dụng của bạn.
  2. Tạo nhiều cá thể cơ sở dữ liệu.
  3. Định cấu hình ứng dụng của bạn để ứng dụng kết nối với phiên bản Cơ sở dữ liệu thời gian thực cần thiết cho mỗi tập dữ liệu.

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

Khi bạn ánh xạ dữ liệu của mình tới nhiều cơ sở dữ liệu, hãy cố gắng đáp ứng các điều kiện sau:

  • Mỗi truy vấn chỉ chạy trên một phiên bản cơ sở dữ liệu duy nhất. Cơ sở dữ liệu thời gian thực không hỗ trợ các truy vấn trên các phiên bản cơ sở dữ liệu.
  • Không chia sẻ hoặc sao chép dữ liệu giữa các phiên bản cơ sở dữ liệu (hoặc chia sẻ hoặc trùng lặp tối thiểu).
  • Mỗi phiên bản ứng dụng chỉ kết nối với một cơ sở dữ liệu tại bất kỳ thời điểm nào.

Khi bạn lập bản đồ dữ liệu của mình, hãy cân nhắc áp dụng các chiến lược sau:

Tạo "phân đoạn chính"

Lưu trữ bản đồ về cách dữ liệu của bạn được lưu trữ trên các phiên bản cơ sở dữ liệu. Bằng cách này, bạn có thể lập trình tra cứu phiên bản cơ sở dữ liệu nào tương ứng với máy khách đang kết nối. Hãy nhớ rằng điều này có thể có nhiều chi phí hơn là kết nối trực tiếp với phiên bản cơ sở dữ liệu cụ thể mà bạn cần, khi bạn cần.

Dữ liệu nhóm theo danh mục hoặc theo khách hàng

Lưu trữ dữ liệu trong các phiên bản cơ sở dữ liệu được lưu trữ, được nhóm theo người dùng hoặc kiểu dữ liệu. Ví dụ: nếu bạn xây dựng một ứng dụng trò chuyện phục vụ nhiều tổ chức, bạn có thể tạo một phiên bản cơ sở dữ liệu cho mỗi tổ chức và lưu trữ tất cả dữ liệu trò chuyện trong các phiên bản cơ sở dữ liệu duy nhất.

Trong trường hợp này, tổ chức A và tổ chức B không chia sẻ dữ liệu, không có bất kỳ dữ liệu trùng lặp nào trong cơ sở dữ liệu của bạn và bạn chỉ thực hiện truy vấn đối với một phiên bản cơ sở dữ liệu duy nhất. Ngoài ra, người dùng trong mỗi tổ chức chỉ kết nối với cơ sở dữ liệu của tổ chức khi họ sử dụng ứng dụng trò chuyện.

Sau đó, bạn có thể tạo trước một số trường hợp cơ sở dữ liệu và sử dụng ID của tổ chức để ánh xạ một nhóm đến trường hợp cơ sở dữ liệu của nó. Ví dụ, tổ chức A ánh xạ tới Cơ sở dữ liệu thời gian thực A.

Cách bạn ánh xạ dữ liệu cho ứng dụng của mình tùy thuộc vào trường hợp sử dụng cụ thể của bạn, nhưng các điều kiện và chiến lược nêu trên có thể giúp bạn xác định điều gì phù hợp với dữ liệu của mình.

Tạo nhiều phiên bản Cơ sở dữ liệu thời gian thực

Nếu bạn đang ở trên các kế hoạch giá Blaze , bạn có thể tạo nhiều trường hợp cơ sở dữ liệu trong các dự án căn cứ hỏa lực tương tự.

tạo cơ sở dữ liệu trong bảng điều khiển Firebase với menu ngữ cảnh trong phần cơ sở dữ liệu

  1. Trong căn cứ hỏa lực điều khiển, đi đến tab Dữ liệu trong phát triển> Cơ sở dữ liệu phần.
  2. Chọn Tạo cơ sở dữ liệu mới từ menu trong phần cơ sở dữ liệu thời gian thực.
  3. Tùy chỉnh tài liệu tham khảo Cơ sở dữ liệu của bạn và quy tắc an ninh , sau đó nhấp vào Got nó.

Lặp lại quy trình để tạo nhiều phiên bản cơ sở dữ liệu nếu bạn cần. Mỗi phiên bản cơ sở dữ liệu có bộ Quy tắc cơ sở dữ liệu thời gian thực của Firebase riêng, vì vậy bạn có thể tinh chỉnh quyền truy cập vào dữ liệu của mình.

Bạn có thể tạo và quản lý các trường hợp cơ sở dữ liệu trong các căn cứ hỏa lực console hoặc bằng cách sử dụng cơ sở dữ liệu thời gian thực quản lý REST API .

Chỉnh sửa và triển khai Quy tắc cơ sở dữ liệu thời gian thực cho từng phiên bản

Đảm bảo rằng Quy tắc cơ sở dữ liệu thời gian thực của bạn cho phép truy cập thích hợp vào từng cá thể cơ sở dữ liệu trong dự án của bạn. Mỗi cơ sở dữ liệu đã thiết lập riêng của mình các quy tắc mà bạn có thể chỉnh sửa và triển khai từ căn cứ hỏa lực điều khiển, hoặc sử dụng các căn cứ hỏa lực CLI để triển khai các mục tiêu .

  • Để chỉnh sửa và triển khai các quy tắc từ bảng điều khiển Firebase, hãy làm theo các bước sau:

    1. Đi đến tab Rules trong Phát triển> phần cơ sở dữ liệu.
    2. Chọn cơ sở dữ liệu bạn muốn chỉnh sửa, sau đó sửa đổi các quy tắc.
  • Để chỉnh sửa và triển khai các quy tắc từ Firebase CLI, hãy làm theo các bước sau:

    1. Sửa đổi các quy tắc trong các tập tin quy tắc cho các trường hợp cơ sở dữ liệu của bạn (ví dụ, foo.rules.json ).
    2. Tạo và áp dụng các mục tiêu triển khai để liên kết các cơ sở dữ liệu sử dụng cùng một tệp quy tắc. Ví dụ:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Cập nhật firebase.json tập tin cấu hình với mục tiêu triển khai:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Chạy lệnh triển khai:

      firebase deploy

Đảm bảo rằng bạn luôn chỉnh sửa và triển khai các quy tắc từ cùng một nơi. Việc triển khai các quy tắc từ Firebase CLI sẽ ghi đè mọi chỉnh sửa bạn đã thực hiện trong bảng điều khiển Firebase và việc chỉnh sửa quy tắc trực tiếp trong bảng điều khiển Firebase sẽ ghi đè mọi thay đổi gần đây mà bạn đã triển khai thông qua Firebase CLI.

Kết nối ứng dụng của bạn với nhiều phiên bản cơ sở dữ liệu

Sử dụng tham chiếu cơ sở dữ liệu để truy cập dữ liệu được lưu trữ trong các trường hợp cơ sở dữ liệu thứ cấp. Bạn có thể lấy tham chiếu cho một phiên bản cơ sở dữ liệu cụ thể bằng URL hoặc ứng dụng. Nếu bạn không chỉ định URL, bạn sẽ nhận được tham chiếu cho phiên bản cơ sở dữ liệu mặc định của ứng dụng.

Phiên bản web 9

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

const app1 = initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Phiên bản web 8

const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Nhanh
Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên Clip mục tiêu App.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Lấy một trường hợp cơ sở dữ liệu thứ cấp bằng URL var ref: DatabaseReference! ref = Database.database ("https://testapp-1234.firebaseio.com") .reference ()
Objective-C
Lưu ý: sản phẩm căn cứ hỏa lực này không có sẵn trên Clip mục tiêu App.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Lấy một trường hợp cơ sở dữ liệu thứ cấp bằng URL @property (mạnh, nonatomic) FIRDatabaseReference * ref; self.ref = [[FIRDatabase databaseWithURL: @ "https://testapp-1234.firebaseio.com"] tham chiếu];

Java

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

Kotlin + KTX

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Chỉ định một phiên bản khi sử dụng Firebase CLI

Sử dụng các --instance tùy chọn để xác định các căn cứ hỏa lực Realtime Cơ sở dữ liệu bạn muốn áp dụng một lệnh căn cứ hỏa lực CLI để. Ví dụ, sử dụng lệnh sau đây để chạy các hồ sơ cho một trường hợp cơ sở dữ liệu tên my-example-shard.firebaseio.com :

firebase database:profile --instance "my-example-shard"

Tối ưu hóa các kết nối trên mỗi cơ sở dữ liệu

Nếu mỗi máy khách cần kết nối với nhiều cơ sở dữ liệu trong một phiên, bạn có thể giảm số lượng kết nối đồng thời với mỗi phiên bản cơ sở dữ liệu bằng cách kết nối với mỗi phiên bản cơ sở dữ liệu chỉ chừng nào cần thiết.

Nhận thêm lời khuyên

Nếu bạn cần thêm sự giúp đỡ sharding dữ liệu của bạn trên nhiều trường hợp cơ sở dữ liệu, tiếp cận với các chuyên gia căn cứ hỏa lực trên của chúng tôi kênh Slack hoặc trên Stack Overflow .