Tối ưu hóa Hiệu suất Cơ sở dữ liệu

Có một số cách khác nhau để cải thiện hiệu suất Cơ sở dữ liệu thời gian thực Firebase trong ứng dụng của bạn. Để tìm hiểu những gì bạn có thể làm để tối ưu hóa hiệu suất Cơ sở dữ liệu thời gian thực của mình, hãy thu thập dữ liệu thông qua các công cụ giám sát Cơ sở dữ liệu thời gian thực khác nhau, sau đó thực hiện các thay đổi đối với ứng dụng hoặc việc sử dụng Cơ sở dữ liệu thời gian thực cho phù hợp.

Giám sát hiệu suất cơ sở dữ liệu 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 thời gian thực thông qua một số công cụ khác nhau, tùy 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 lược tả để biết danh sách các truy vấn chưa được lập chỉ mục và tổng quan về thời gian thực của các hoạt động đọc/ghi.
  • Ước tính mức sử dụng đã tính phí: Sử dụng số liệu sử dụng có sẵn trong bảng điều khiển Firebase để xem mức sử dụng đã tính phí và số liệu hiệu suất cấp cao của bạn.
  • Chi tiết chi tiết: Sử dụng Giám sát đám mây để có cái nhìn chi tiết hơn về cách cơ sở dữ liệu của bạn hoạt động theo thời gian.

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

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

Chiến lược cải thiện hiệu suất trong nháy mắt
Hệ mét Sự miêu tả Thực hành tốt nhất
Tải/Sử dụng Tối ưu hóa mức dung lượng cơ sở dữ liệu của bạn đang sử dụng để xử lý các yêu cầu tại bất kỳ thời điểm nào (được phản ánh trong các chỉ số **Load** hoặc **io/database_load**). Tối ưu hóa cấu trúc dữ liệu của bạn
Phân chia dữ liệu trên 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 với các quy tắc dựa trên truy vấn
Tối ưu hóa kết nối
Kết nối đang hoạt động Cân bằng số lượng kết nối hoạt động đồng thời với cơ sở dữ liệu của bạn để duy trì dưới giới hạn 200.000 kết nối. Phân chia dữ liệu trên 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 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ã hóa. Tối ưu hóa kết nối
Tối ưu hóa cấu trúc dữ liệu của bạn
Giới hạn tải xuống với các quy tắc dựa trên truy vấn
Tái sử dụng phiên SSL
Cải thiện hiệu quả của người nghe
Hạn chế quyền truy cập vào dữ liệu
Kho Đả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ữ của mình trên các cơ sở dữ liệu khác và/hoặc các sản phẩm Firebase để duy trì trong hạn mức. Dọn dẹp dữ liệu không sử dụng
Tối ưu hóa cấu trúc dữ liệu của bạn
Phân chia dữ liệu trên cơ sở dữ liệu
Sử dụng Cloud Storage cho Firebase

Tối ưu hóa kết nối

Các yêu cầu RESTful như GETPUT vẫn yêu cầu kết nối, mặc dù kết nối đó chỉ tồn tại trong thời gian ngắn. Những kết nối thường xuyên, ngắn hạ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 gửi đi so với các kết nối hoạt động, thời gian thực tới 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 ứng dụng của bạn thay vì API REST. SDK duy trì các kết nối mở, giảm chi phí mã hóa SSL và tải cơ sở dữ liệu có thể xảy ra với 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ì HTTP để duy trì kết nối mở hoặc sử dụng các sự kiện do máy chủ gửi , điều này có thể giảm chi phí từ việc bắt tay SSL.

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

Việc chia tách dữ liệu của bạn trên nhiều phiên bản Cơ sở dữ liệu thời gian thực, hay còn gọi là phân chia cơ sở dữ liệu, mang lại ba lợi ích:

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

Nếu đang sử dụng gói giá Blaze , bạn có thể tạo nhiều phiên bản 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 phiên bản cơ sở dữ liệu.

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

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

Vì Cơ sở dữ liệu 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 việc giữ cấu trúc dữ liệu của bạn càng phẳng càng tốt là điều hợp lý. 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 xuống dữ liệu không cần thiết cho khách hàng.

Đặc biệt, hãy cân nhắc việc ghi và xóa khi bạn 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ể sẽ tốn kém khi xóa. 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ể tăng tốc độ xóa.

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

Để tối ưu hóa cấu trúc dữ liệu của bạn và cải thiện hiệu suất, hãy làm theo các phương pháp hay nhất dành 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 cơ sở dữ liệu thời gian thực. Ví dụ: sử dụng quy tắc có thể tránh được trường hợp người dùng độc hại liên tục tải xuống 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 thời gian thực Firebase .

Sử dụng quy tắc dựa trên truy vấn để hạn chế tải xuống

Quy tắc bảo mật cơ sở dữ liệu 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 chú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 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ởi query. các biểu thức như query.limitToFirst , các truy vấn chỉ truy xuất dữ liệu được giới hạn bởi quy tắc.

Ví dụ: quy tắc sau chỉ giới hạn quyền truy cập đọc vào 1000 kết quả đầu tiên của 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 thời gian thực .

Truy vấn chỉ mục

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

Tái sử dụng phiên SSL

Giảm chi phí mã hóa SSL trên các kết nối được nối lại 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 yêu cầu kết nối thường xuyên và an toàn với cơ sở dữ liệu.

Cải thiện hiệu quả của người nghe

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

Đảm bảo cũng thêm người nghe một cách linh hoạt và xóa chúng 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ỳ xóa mọi dữ liệu không được 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 mình theo cách thủ công hoặc sao lưu dữ liệu định kỳ vào nhóm Google Cloud Storage. Đồng thời xem xét 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 mà bạn có thể cập nhật dễ dàng. Đảm bảo kiểm tra kỹ lưỡng 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 của mình theo cấp số nhân và xây dựng khả năng triển khai các bản cập nhật cho mã của mình. 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.