Mở rộng quy mô với nhiều cơ sở dữ liệu

Cách tốt nhất để tối ưu hoá hiệu suất và điều chỉnh quy mô dữ liệu trong Cơ sở dữ liệu theo thời gian thực của Firebase là chia nhỏ dữ liệu của bạn thành nhiều thực thể Cơ sở dữ liệu theo thời gian thực, còn được gọi là phân đoạn cơ sở dữ liệu. Tính năng phân đoạn giúp bạn linh hoạt mở rộng quy mô vượt quá giới hạn áp dụng cho từng thực thể cơ sở dữ liệu, bên cạnh tính năng cân bằng tải và tối ưu hoá hiệu suất.

Thời điểm phân đoạn dữ liệu của bạn

Bạn nên phân đoạn 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 theo 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 200.000 kết nối đồng thời, 1.000 thao tác ghi/giây hoặc bất kỳ giới hạn nào khác cho một thực thể cơ sở dữ liệu.
  • Bạn có nhiều tập dữ liệu riêng biệt và muốn tối ưu hoá hiệu suất (ví dụ: một ứng dụng nhắn tin phục vụ những nhóm người dùng độc lập và 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 thực thể cơ sở dữ liệu.

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

Để phân đoạn 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 dưới đây):

  1. Liên kết 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.
  2. Tạo nhiều thự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 thực thể Cơ sở dữ liệu theo thời gian thực cần thiết cho mỗi tập dữ liệu.

Lập bản đồ dữ liệu của bạn

Khi bạn ánh xạ dữ liệu đến 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 thực thể cơ sở dữ liệu duy nhất. Cơ sở dữ liệu theo thời gian thực không hỗ trợ truy vấn qua 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 thực thể cơ sở dữ liệu (hoặc giảm thiểu việc chia sẻ hay sao chép).
  • 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 một thời điểm bất kỳ.

Khi bạn liên kết dữ liệu của mình, hãy xem xét á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 thực thể cơ sở dữ liệu. Bằng cách này, bạn có thể lập trình để tra cứu thực thể cơ sở dữ liệu nào tương ứng với ứng dụng kết nối. Hãy lưu ý rằng thao tác này có thể gây hao tổn nhiều hơn so với việc kết nối trực tiếp với thực thể cơ sở dữ liệu cụ thể mà bạn cần khi cần.

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

Lưu trữ dữ liệu trong các thực thể cơ sở dữ liệu riêng biệt, được nhóm theo người dùng hoặc loại dữ liệu. Ví dụ: nếu 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 thực thể cơ sở dữ liệu cho từng tổ chức và lưu trữ tất cả dữ liệu trò chuyện trong các thực thể cơ sở dữ liệu riêng biệ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ó dữ liệu trùng lặp trong cơ sở dữ liệu của bạn và bạn chỉ thực hiện truy vấn dựa trên một thực thể 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 nhắn tin.

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

Cách bạn liên kết dữ liệu cho ứng dụng phụ thuộc vào trường hợp sử dụng cụ thể, 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 những điều 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 theo thời gian thực

Nếu đang sử dụng gói giá linh hoạt, bạn có thể tạo tối đa 1.000 thực thể cơ sở dữ liệu trong cùng một dự án Firebase.

tạo một cơ sở dữ liệu trong bảng điều khiển của Firebase bằng trình đơn theo bối cảnh trong mục cơ sở dữ liệu

  1. Trong bảng điều khiển của Firebase, hãy chuyển đến thẻ Data (Dữ liệu) trong phần Develop > Database (Phát triển > Cơ sở dữ liệu).
  2. Chọn Tạo cơ sở dữ liệu mới trên trình đơn trong mục Cơ sở dữ liệu theo thời gian thực.
  3. Tuỳ chỉnh Tài liệu tham khảo về cơ sở dữ liệuQuy tắc bảo mật, sau đó nhấp vào Đã hiểu.

Lặp lại quá trình này để tạo số lượng thực thể cơ sở dữ liệu tuỳ ý. Mỗi phiên bản cơ sở dữ liệu có một bộ Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực 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 thực thể cơ sở dữ liệu trong bảng điều khiển của Firebase hoặc sử dụng API REST quản lý cơ sở dữ liệu theo thời gian thực.

Chỉnh sửa và triển khai Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực cho từng trường hợp

Hãy đảm bảo Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực cho phép truy cập thích hợp vào từng phiên bản cơ sở dữ liệu trong dự án của bạn. Mỗi cơ sở dữ liệu có một bộ quy tắc riêng mà bạn có thể chỉnh sửa và triển khai trong bảng điều khiển của Firebase hoặc sử dụng CLI của Firebase để triển khai mục tiêu.

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

    1. Chuyển đến thẻ Quy tắc trong phần Phát triể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 quy tắc từ Giao diện dòng lệnh (CLI) của Firebase, hãy làm theo các bước sau:

    1. Sửa đổi quy tắc trong tệp quy tắc cho các thực thể cơ sở dữ liệu (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 những 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 tệp cấu hình firebase.json của bạn với các 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 bạn thường xuyê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ừ Giao diện dòng lệnh (CLI) của Firebase sẽ ghi đè mọi nội dung bạn chỉnh sửa trong bảng điều khiển của Firebase, còn việc chỉnh sửa các quy tắc ngay trong bảng điều khiển của Firebase sẽ ghi đè mọi thay đổi gần đây mà bạn đã triển khai thông qua Giao diện dòng lệnh (CLI) của Firebase.

Kết nối ứng dụng với nhiều thực thể 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 thực thể cơ sở dữ liệu phụ. Bạn có thể lấy thông tin tham chiếu cho một thực thể cơ sở dữ liệu cụ thể bằng URL hoặc ứng dụng. Nếu không chỉ định URL, bạn sẽ lấy thông tin tham chiếu cho thực thể cơ sở dữ liệu mặc định của ứng dụng.

API mô-đun web

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);

API không gian tên trên web

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);
Swift
Lưu ý: Sản phẩm Firebase này không dùng được trên mục tiêu App Clip (Đoạn video ứng dụng).
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Lấy một phiên bản cơ sở dữ liệu phụ bằng URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
Lưu ý: Sản phẩm Firebase này không dùng được trên mục tiêu App Clip (Đoạn video ứng dụng).
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Lấy thực thể cơ sở dữ liệu phụ theo URL @property (strong, nonatom) FIRDatabaseReference *ref; self.ref = [[FIRDatabase DatabaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

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

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();

Chỉ định một thực thể khi sử dụng Giao diện dòng lệnh (CLI) của Firebase

Sử dụng tuỳ chọn --instance để chỉ định Cơ sở dữ liệu theo thời gian thực của Firebase mà bạn muốn áp dụng lệnh CLI của Firebase. Ví dụ: sử dụng lệnh sau để chạy trình phân tích tài nguyên cho một thực thể cơ sở dữ liệu có tên my-example-shard.firebaseio.com:

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

Tối ưu hoá các kết nối trên từng cơ sở dữ liệu

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

Xem thêm lời khuyên

Nếu bạn cần được trợ giúp thêm về việc phân đoạn dữ liệu trên nhiều thực thể cơ sở dữ liệu, hãy liên hệ với các chuyên gia Firebase trên kênh Slack của chúng tôi hoặc trên Stack Overflow.