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 hiệu suất của Cơ sở dữ liệu theo thời gian thực của Firebase trong ứng dụng của bạn. Để tìm hiểu 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, hãy thu thập dữ liệu thông qua nhiều công cụ theo dõi Cơ sở dữ liệu theo thời gian thực, sau đó thay đổi cách ứng dụng của bạn hoặc cách sử dụng 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ông cụ, tuỳ thuộc vào mức độ chi tiết bạn cần:

  • Tổng quan cấp cao: Sử dụng công cụ trình phân tích tài nguyên để biết danh sách các truy vấn chưa được lập chỉ mục và thông tin tổng quan theo thời gian thực về các thao tác đọc/ghi.
  • Ước tính mức sử dụng được lập hoá đơn: Sử dụng chỉ số sử dụng có sẵn trong bảng điều khiển của Firebase để xem mức sử dụng đã lập hoá đơn và các chỉ số hiệu suất cấp cao của bạn.
  • Thông tin chi tiết chi tiết: Sử dụng giải pháp Giám sát trên đám mây để có cái nhìn chi tiết hơn về hiệu suất của cơ sở dữ liệu theo thời gian.

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

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

Xem nhanh 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 của cơ sở dữ liệu đang dùng để xử lý các yêu cầu tại một thời điểm bất kỳ (được phản ánh trong các chỉ số **Load** 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ơ sở dữ liệu
Cải thiện hiệu quả của trình nghe
Giới hạn lượt tải xuống bằng các 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 cơ sở dữ liệu của bạn để không vượt quá giới hạn 200.000 kết nối. Phân đoạn dữ liệu trong nhiều cơ sở dữ liệu
Giảm các kết nối mới
Băng thông chiều đi Nếu tệp tải xuống từ cơ sở dữ liệu của bạn có vẻ cao hơn mong muốn, bạn có thể cải thiện hiệu quả của 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 lượt 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
Dung lượng lưu trữ Đảm bảo bạn không lưu trữ dữ liệu không sử dụng hoặc cân bằng dữ liệu đã lưu trữ trên các cơ sở dữ liệu khác và/hoặc các sản phẩm Firebase để duy trì dưới hạn mức. Xoá dữ liệu không dùng đến
Tối ưu hoá cấu trúc dữ liệu
Phân đoạn dữ liệu trên nhiều cơ sở dữ liệu
Sử dụng Cloud Storage cho Firebase

Tối ưu hoá các 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 đó chỉ tồn tại trong thời gian ngắn. Các kết nối ngắn hạn và thường xuyê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 các SDK gốc cho nền tảng của ứng dụng, thay vì API REST. Các SDK duy trì các kết nối mở, giảm chi phí mã hoá SSL và tải cơ sở dữ liệu có thể kết hợp với API REST.

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

Phân đoạn dữ liệu trên nhiều cơ sở dữ liệu

Việc chia nhỏ dữ liệu trên nhiều thực thể Cơ sở dữ liệu theo thời gian thực, hay còn gọi là phân đoạn cơ sở dữ liệu, mang lại 3 lợi ích:

  1. Tăng tổng số kết nối đang hoạt động đồng thời được cho phép trên ứng dụng của bạn bằng cách chia các kết nối này trên các thực thể cơ sở dữ liệu.
  2. Cân bằng tải trên 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 riêng biệt, hãy sử dụng nhiều thực thể cơ sở dữ liệu để có thông lượng cao hơn và độ trễ thấp hơn.

Nếu đang sử dụng Gói giá linh hoạt, bạn có thể tạo nhiều thực thể cơ sở dữ liệu trong cùng một dự án Firebase, tận dụng phương thức xác thực người dùng phổ biến 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ả

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ư đường dẫn, nên bạn nên giữ cho cấu trúc dữ liệu của mình ở dạng phẳng nhất có thể. Bằng cách này, bạn có thể truy xuất dữ liệu mình cần một cách có chọn lọc mà không cần tải dữ liệu không cần thiết xuống ứng dụng.

Cụ thể, hãy cân nhắc ghi và xoá khi bạn đang cấu trúc dữ liệu của mình. Ví dụ: các đường dẫn có hàng nghìn lá có thể tốn kém khi xoá. Việc 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ể làm 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. Hãy sắp xếp dữ liệu theo cách cho phép bạn ghi hàng loạt vào một hoạt động dưới dạng cập nhật nhiều đường dẫn thông qua phương thức update() trong SDK hoặc các yêu cầu RESTful PATCH.

Để 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 về cấu trúc dữ liệu.

Ngăn chặn hành vi truy cập trái phép

Ngăn chặn các thao tác trái phép trên cơ sở dữ liệu của bạn bằng Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực. Ví dụ: việc sử dụng quy tắc có thể giúp tránh trường hợp người dùng độc hại tải toàn bộ cơ sở dữ liệu của bạn xuống nhiều lầ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 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 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ũng có thể đóng vai trò là giới hạn đối với dữ liệu được trả về thông qua các thao tác đọc. Khi bạn sử dụng các quy tắc dựa trên truy vấn, như được xác định bằng các biểu thức query. như query.limitToFirst, các truy vấn 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ỉ ở 1.000 kết quả đầu tiên của một truy vấn, theo thứ tự ư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 chỉ mục

Việc Lập chỉ mục dữ liệu làm giảm tổng băng thông mà bạn sử dụng cho mỗi truy vấn mà ứng dụng 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 TLS. Điều này đặc biệt hữu ích nếu bạn cần các kết nối thường xuyên, an toàn đến cơ sở dữ liệu.

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

Đặt trình nghe ở vị trí xa nhất có thể để giới hạn lượng dữ liệu mà chúng đồng bộ hoá. Trình nghe phải ở gần dữ liệu bạn muốn họ nhận được. Đừng theo dõi ở gốc cơ sở dữ liệu, vì việc này 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à các hoạt động nghe của bạn trả về và sử dụng các trình nghe chỉ tải nội dung cập nhật cho dữ liệu xuống – ví dụ: on() thay vì once(). Đặt trước .once() cho những hành động thực sự 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ể để có 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à 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ì việc này yêu cầu đọc toàn bộ vị trí từ lớp cố định.

Hãy nhớ thêm trình nghe một cách linh động và xoá trình nghe khi không còn cần thiết nữa.

Dọn dẹp dữ liệu không sử dụng

Định kỳ xoá mọi dữ liệu không dùng đến hoặc trùng lặp trong cơ sở dữ liệu. Bạn có thể chạy bản sao lưu để kiểm tra dữ liệu theo cách thủ công hoặc sao lưu định kỳ 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

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