Tối ưu hoá hiệu suất của cơ sở dữ liệu

Có một số cách để cải thiện Cơ sở dữ liệu theo thời gian thực của Firebase hiệu suất trong ứng dụng của bạn. Để biết những việc bạn có thể làm nhằm tối ưu hoá Hiệu suất của Cơ sở dữ liệu theo thời gian thực, thu thập dữ liệu thông qua nhiều Cơ sở dữ liệu theo thời gian thực công cụ giám sát, sau đó điều chỉnh mức sử dụng của ứng dụng hoặc Cơ sở dữ liệu theo thời gian thực cho phù hợp.

Theo dõi hiệu suất của Cơ sở dữ liệu theo thời gian thực

Bạn có thể thu thập dữ liệu về hiệu suất của Cơ sở dữ liệu theo thời gian thực thông qua một số các công cụ khác nhau, tuỳ thuộc vào mức độ chi tiết mà bạn cần:

Cải thiện hiệu suất theo chỉ số

Sau khi bạn đã thu thập dữ liệu, hãy khám phá các chiến lược và phương pháp hay nhất sau đây dựa trên kh��a cạnh hiệu suất mà bạn muốn cải thiện.

Tổng quan về các chiến lược cải thiện hiệu suất
Chỉ số Nội dung mô tả Các phương pháp hay nhất
Tải/sử dụng Tối ưu hoá dung lượng đang được sử dụng của cơ sở dữ liệu yêu cầu vào bất kỳ thời điểm cụ thể nào (được phản ánh trong **Tải** hoặc **io/database_load**). Tối ưu hoá cấu trúc dữ liệu
Phân đoạn dữ liệu trên các cơ sở dữ liệu
Cải thiện hiệu quả của người nghe
Giới hạn tải xuống bằng quy tắc dựa trên truy vấn
Tối ưu hoá kết nối
Kết nối đang hoạt động Cân bằng số lượng kết nối đang hoạt động đồng thời với không vượt quá giới hạn 200.000 kết nối. Phân đoạn dữ liệu trên các cơ sở dữ liệu
Giảm kết nối mới
Băng thông đi Nếu số lượt tải xuống từ cơ sở dữ liệu của bạn có vẻ cao hơn mức bạn muốn, bạn có thể cải thiện hiệu quả hoạt động đọc và giảm chi phí mã hoá. Tối ưu hoá kết nối
Tối ưu hoá cấu trúc dữ liệu
Giới hạn việc tải xuống bằng các quy tắc dựa trên truy vấn
Sử dụng lại các phiên SSL
Cải thiện hiệu quả của trình nghe
Hạn chế quyền truy cập vào dữ liệu
Bộ nhớ Đảm bảo bạn không lưu trữ dữ liệu không sử dụng hoặc cân bằng trên các cơ sở dữ liệu khác và/hoặc các sản phẩm của Firebase để duy trì hạn mức. Xoá dữ liệu không sử dụng
Tối ưu hoá cấu trúc dữ liệu
Phân đoạn dữ liệu trên các cơ sở dữ liệu
Sử dụng Cloud Storage cho Firebase

Tối ưu hoá mối kết nối

Các yêu cầu RESTful như GETPUT vẫn cần có kết nối, mặc dù kết nối đó trong thời gian ngắn. Những kết nối thường xuyên, trong thời gian ngắn này thực sự có thể làm tăng đáng kể chi phí kết nối, tải cơ sở dữ liệu và băng thông đi so với các kết nối đang hoạt động theo thời gian thực đến cơ sở dữ liệu của bạn.

Bất cứ khi nào có thể, hãy sử dụng SDK gốc cho nền tảng của ứng dụng, thay vì API REST. SDK duy trì kết nối mở, giúp giảm chi phí mã hoá SSL và tải cơ sở dữ liệu có thể thêm bằng API REST.

Nếu bạn sử dụng API REST, hãy cân nhắc sử dụng tính năng duy trì hoạt động của HTTP để duy trì mở kết nối hoặc sử dụng sự kiện do máy chủ gửi, giúp giảm chi phí do bắt tay SSL.

Dữ liệu được phân đoạn trên nhiều cơ sở dữ liệu

Chia tách dữ liệu của bạn trên nhiều thực thể Cơ sở dữ liệu theo thời gian thực, còn được gọi là tính năng phân đoạn cơ sở dữ liệu, mang lại ba lợi ích:

  1. Tăng tổng số lượt kết nối đồng thời đang hoạt động được phép trên ứng dụng của bạn lên bạn có thể chia tách chúng trên các thực thể cơ sở dữ liệu.
  2. Cân bằng tải giữa các thực thể cơ sở dữ liệu.
  3. Nếu bạn có các nhóm người dùng độc lập chỉ cần quyền truy cập vào các tập dữ liệu, sử dụng các thực thể cơ sở dữ liệu khác nhau để có thông lượng cao hơn và thấp hơn độ trễ.

Nếu đang sử dụng Gói giá linh hoạt, bạn có thể tạo nhiều các bản sao cơ sở dữ liệu trong cùng một dự án Firebase, tận dụng một người dùng chung trên các thực thể cơ sở dữ liệu.

Tìm hiểu thêm về cách thức và thời điểm phân đoạn dữ liệu.

Xây dựng cấu trúc dữ liệu hiệu quả

Bởi vì Cơ sở dữ liệu theo thời gian thực truy xuất dữ liệu từ các nút con của đường dẫn cũng như lộ trình, thì bạn nên giữ cấu trúc dữ liệu của mình càng phẳng càng tốt. Bằng cách này, bạn có thể truy xuất có chọn lọc dữ liệu mình cần mà không cần tải dữ liệu không cần thiết xuống máy khách.

Cụ thể, hãy cân nhắc việc ghi và xoá khi bạn xây dựng cấu trúc dữ liệu. Ví dụ: nếu xoá những con đường có hàng nghìn chiếc lá thì có thể sẽ rất tốn kém. Chia chúng thành các đường dẫn có nhiều cây con và ít lá hơn trên mỗi nút có thể tăng tốc độ xoá.

Ngoài ra, mỗi lượt ghi có thể chiếm 0,1% tổng mức sử dụng cơ sở dữ liệu. Xây dựng cấu trúc dữ liệu của bạn theo cách cho phép bạn ghi hàng loạt thành một dưới dạng cập nhật nhiều đường dẫn thông qua một trong hai phương thức update() trong SDK hoặc yêu cầu PATCH RESTful.

Để tối ưu hoá cấu trúc dữ liệu và cải thiện hiệu suất, hãy làm theo các phương pháp hay nhất cho cấu trúc dữ liệu.

Ngăn chặn truy cập trái phép

Ngăn chặn các hoạt động trái phép trên cơ sở dữ liệu của bạn bằng Quy tắc bảo mật cho cơ sở dữ liệu theo thời gian thực. Ví dụ: việc sử dụng các quy tắc có thể tránh được trường hợp người dùng độc hại tải xuống lặp đi lặp lại toàn bộ cơ sở dữ liệu của bạn.

Tìm hiểu thêm về cách sử dụng Quy tắc cơ sở dữ liệu theo thời gian thực của Firebase.

Sử dụng các quy tắc dựa trên truy vấn để giới hạn số lượt tải xuống

Quy tắc bảo mật cho cơ sở dữ liệu theo thời gian thực hạn chế quyền truy cập vào dữ liệu trong cơ sở dữ liệu của bạn, nhưng các quy tắc này cũng đóng vai trò là giới hạn dữ liệu được trả về qua thao tác đọc. Khi bạn sử dụng các quy tắc dựa trên truy vấn, được xác định bằng biểu thức query. như query.limitToFirst, các truy vấn này chỉ truy xuất dữ liệu bị giới hạn bởi quy tắc.

Ví dụ: quy tắc sau đây giới hạn quyền đọc chỉ cho 1.000 quy tắc đầu tiên các kết quả của một truy vấn được sắp xếp theo mức độ ưu tiên:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

Tìm hiểu thêm về Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực.

Truy vấn lập chỉ mục

Lập chỉ mục dữ liệu của bạn làm giảm tổng số băng thông mà bạn sử dụng cho mỗi truy vấn mà ứng dụng của mình chạy.

Sử dụng lại các phiên SSL

Giảm chi phí hao tổn mã hoá SSL trên các kết nối được tiếp tục bằng cách phát hành Vé phiên giao dịch TLS (Bảo mật tầng truyền tải). Điều này đặc biệt rất hữu ích nếu bạn cần kết nối thường xuyên và bảo mật đến cơ sở dữ liệu.

Cải thiện hiệu quả của trình nghe

Đặt trình nghe ở sâu nhất có thể để hạn chế lượng dữ liệu chúng sẽ đồng bộ hoá. Người nghe phải ở gần dữ liệu mà bạn muốn họ nhận được. Đừng nghe tại thư mục gốc của cơ sở dữ liệu, vì điều đó sẽ dẫn đến việc tải xuống toàn bộ cơ sở dữ liệu của bạn.

Thêm truy vấn để giới hạn dữ liệu mà thao tác nghe trả về và sử dụng trình nghe chỉ tải các bản cập nhật cho dữ liệu xuống, ví dụ: on() thay vì once() Đặt trước .once() để thực hiện những hành động không yêu cầu cập nhật dữ liệu. Ngoài ra, hãy sắp xếp các truy vấn của bạn bằng cách sử dụng orderByKey() bất cứ khi nào có thể, cho hiệu suất tốt nhất. Việc sắp xếp bằng orderByChild() có thể chậm hơn từ 6 đến 8 lần và thì việc sắp xếp bằng orderByValue() có thể rất chậm đối với các tập dữ liệu lớn vì yêu cầu đọc toàn bộ vị trí từ tầng cố định.

Đừng quên thêm người nghe một cách linh động và xoá trình nghe khi họ không sử dụng lâu hơn cần thiết.

Dọn dẹp dữ liệu không dùng đến

Định kỳ xoá mọi dữ liệu không sử dụng hoặc trùng lặp trong cơ sở dữ liệu của bạn. Bạn có thể chạy bản sao lưu để kiểm tra dữ liệu của bạn theo cách thủ công hoặc sao lưu định kỳ dữ liệu đó vào một bộ chứa Google Cloud Storage. Ngoài ra hãy cân nhắc việc lưu trữ dữ liệu được lưu trữ thông qua Cloud Storage cho Firebase.

Gửi mã có thể mở rộng mà bạn có thể cập nhật

Ứng dụng tích hợp vào thiết bị IoT phải bao gồm mã có thể mở rộng mà bạn có thể cập nhật dễ dàng. Hãy nhớ kiểm thử kỹ các trường hợp sử dụng và tính đến các tình huống nơi bạn có thể tăng cơ sở người dùng theo cấp s�� nhân và tăng khả năng để triển khai bản cập nhật cho mã của bạn. Xem xét kỹ những thay đổi lớn mà bạn có thể cần để thực hiện, chẳng hạn như bạn quyết định phân đoạn dữ liệu của mình.