Firestore ở chế độ Native bao gồm 2 nhóm thao tác: Thao tác cốt lõi của Firestore và thao tác trong quy trình xử lý của Firestore.
Các thao tác cốt lõi của Firestore cung cấp chức năng Tạo, Đọc, Cập nhật và Xoá (CRUD) tài liệu tiêu chuẩn, cùng với tính năng hỗ trợ tích hợp cho các truy vấn nghe theo thời gian thực và tính năng duy trì dữ liệu ngoại tuyến. Một điểm khác biệt về hoạt động trong phiên bản này là chỉ mục là không bắt buộc và không được tự động tạo cho các trường riêng lẻ. Mặc dù điều này cho phép thực thi các truy vấn mà không cần định cấu hình chỉ mục trước, nhưng các truy vấn không có chỉ mục sẽ mặc định quét toàn bộ bộ sưu tập. Điều này có thể làm tăng độ trễ và chi phí khi tập dữ liệu tăng lên.
Các thao tác trong quy trình xử lý của Firestore là một tính năng trung tâm của phiên bản Firestore Enterprise, được xây dựng trên một công cụ truy vấn nâng cao để mở rộng đáng kể phạm vi truy vấn có thể thực hiện. Các thao tác trong quy trình xử lý sử dụng cú pháp truy vấn linh hoạt và phương thức lập chỉ mục riêng biệt, trong đó chỉ mục là không bắt buộc và không được tự động tạo, cho phép các thao tác truy xuất dữ liệu nâng cao cho ứng dụng.
Các tính năng của thao tác cốt lõi của Firestore
Các thao tác cốt lõi cho phép các thao tác CRUD tiêu chuẩn và truy vấn nghe theo thời gian thực. Tuy nhiên, khi sử dụng các thao tác này trên phiên bản Enterprise, hành vi cơ bản liên quan đến việc lập chỉ mục và tính phí sẽ thay đổi đáng kể so với phiên bản Standard.
Chức năng và tính liên tục
Các thao tác cốt lõi vẫn giữ lại cú pháp chuỗi phương thức quen thuộc (ví dụ: .where(), .orderBy()) được sử dụng trong phiên bản Standard. Các thao tác này hỗ trợ truy vấn nghe theo thời gian thực và tính năng duy trì dữ liệu ngoại tuyến cho ứng dụng di động và ứng dụng web. Bạn nên sử dụng các thao tác này cho khối lượng công việc giao dịch tiêu chuẩn, tra cứu đơn giản và di chuyển mã xử lý ứng dụng hiện có.
Lập chỉ mục tuỳ chỉnh
Không giống như phiên bản Standard, các thao tác cốt lõi trong phiên bản Enterprise không tự động tạo chỉ mục cho các trường riêng lẻ. Chỉ mục là không bắt buộc và không cần thiết để thực thi truy vấn. Nếu thiếu một chỉ mục cụ thể, truy vấn sẽ thực hiện quét toàn bộ bộ sưu tập. Mặc dù các truy vấn không có chỉ mục cho phép tạo mẫu nhanh, nhưng các truy vấn này có thể hoạt động chậm hơn và tốn kém hơn khi tập dữ liệu tăng lên. Nhà phát triển phải tạo chỉ mục theo cách thủ công để tối ưu hoá hiệu suất truy vấn và giảm mức sử dụng Đơn vị đọc.
Mô hình tính phí (dựa trên đơn vị)
Đơn vị đọc được tính phí theo từng phần 4KB chứ không phải theo số lượng tài liệu. Một truy vấn không có chỉ mục quét một bộ sưu tập lớn sẽ tiêu thụ Đơn vị đọc dựa trên tổng số byte được quét trên tất cả tài liệu. Đơn vị ghi được tính phí theo từng phần 1KB. Việc ghi một tài liệu sẽ tiêu thụ các đơn vị cho dữ liệu cộng với các đơn vị bổ sung cho mỗi mục chỉ mục được cập nhật. Không giống như trong phiên bản Standard (áp dụng tính năng lập chỉ mục tự động cho các trường riêng lẻ), giờ đây, bạn có thể chọn các trường cụ thể để lập chỉ mục nhằm tối ưu hoá chi phí và hiệu suất ghi.
Các tính năng của thao tác trong quy trình xử lý của Firestore
Phiên bản Firestore Enterprise có các thao tác trong quy trình xử lý sử dụng một công cụ truy vấn nâng cao giúp loại bỏ nhiều hạn chế hiện có của phiên bản Firestore Standard. Các thao tác trong quy trình xử lý cung cấp hàng trăm tính năng truy vấn bổ sung. Các thao tác trong quy trình xử lý có các khả năng sau:
Cú pháp có thể kết hợp dựa trên giai đoạn
Các truy vấn trong quy trình xử lý được tạo bằng cách xác định một loạt giai đoạn tuần tự được thực thi theo thứ tự. Điều này cho phép các thao tác phức tạp, chẳng hạn như lọc trên kết quả của một thao tác tổng hợp mà trước đây không thể thực hiện.
Ví dụ sau đây cho thấy một truy vấn trong quy trình xử lý tìm số lượng mã sản phẩm riêng biệt được xem trong tháng trước:
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
Nhiều chức năng
Truy vấn trong quy trình xử lý giới thiệu một số lượng lớn các chức năng mới, bao gồm:
- Tổng hợp: Hỗ trợ các hàm tổng hợp mới (như
sum(...),min(...)vàcount_distinct(...)) kết hợp với các trường nhóm tuỳ ý. - Kết hợp quan hệ: Thực hiện các thao tác kết hợp phía máy chủ trên các bộ sưu tập và bộ sưu tập con bằng cách sử dụng truy vấn con có liên quan.
- Lọc phức tạp: Hỗ trợ hàng trăm hàm bổ sung để biểu thị các câu lệnh
where(...)phức tạp tuỳ ý, bao gồmregex_match(...),add(...)vàstr_contains(...), tất cả đều không có yêu cầu về chỉ mục cứng. - Đọc / chiếu một phần: Truy xuất các tập hợp con động của tài liệu bằng cách sử dụng
select(...),remove_fields(...)và nhiều giai đoạn thao tác tài liệu khác.
Để tìm hiểu thêm về các chức năng này, hãy xem bài viết Truy vấn dữ liệu bằng các thao tác trong quy trình xử lý.
Hỗ trợ theo thời gian thực và ngoại tuyến
Để sử dụng tính năng theo thời gian thực và ngoại tuyến, nhà phát triển có thể sử dụng các thao tác cốt lõi của Firestore trong phiên bản Firestore Enterprise.
Tích hợp ứng dụng và công cụ
Phiên bản Enterprise bao gồm các tính năng chuyên biệt để tương tác và quản lý các truy vấn trong quy trình xử lý:
- Giải thích và lập hồ sơ truy vấn: Bạn có thể sử dụng kết quả Giải thích truy vấn để hiểu số lượng đơn vị đọc hoặc ghi mà một truy vấn tiêu thụ và phân tích quá trình thực thi của truy vấn đó.
- Thông tin chi tiết về truy vấn: Phiên bản Enterprise hỗ trợ Thông tin chi tiết về truy vấn giúp bạn xác định vị trí có thể tạo chỉ mục để cải thiện hiệu suất và chi phí bằng cách cung cấp khả năng hiển thị về các truy vấn hàng đầu được chạy trên cơ sở dữ liệu của bạn và các đặc điểm hiệu suất của chúng
- Các loại chỉ mục mới: Bạn có thể tạo các chỉ mục chuyên biệt cho phiên bản Enterprise, bao gồm các loại chỉ mục như chỉ mục thưa thớt, không thưa thớt và chỉ mục duy nhất. Phiên bản này cũng hỗ trợ việc tạo và chỉnh sửa chỉ mục tìm kiếm vectơ cho cơ sở dữ liệu Enterprise.
Sự khác biệt giữa phiên bản Firestore Standard và phiên bản Firestore Enterprise
Sự khác biệt chính về hoạt động giữa các thao tác cốt lõi và thao tác trong pipeline nằm ở việc quản lý việc lập chỉ mục, ảnh hưởng trực tiếp đến hiệu suất và chi phí.
| Phiên bản Standard – Thao tác cốt lõi | Phiên bản Enterprise – Thao tác cốt lõi và thao tác trong quy trình xử lý | |
| Yêu cầu về việc lập chỉ mục | Truy vấn yêu cầu phải có chỉ mục.
Chỉ mục cho các trường riêng lẻ được tạo tự động, trong khi các truy vấn phức tạp hơn dựa vào chỉ mục tổng hợp hoặc chỉ mục nhóm bộ sưu tập phải được định cấu hình theo cách thủ công. |
Truy vấn không yêu cầu phải có chỉ mục và do đó, chỉ mục là không bắt buộc.
Bạn xác định chỉ mục khi cần. Phiên bản Enterprise cũng hỗ trợ nhiều loại chỉ mục hơn, bao gồm chỉ mục không thưa thớt/thưa thớt và chỉ mục duy nhất. |
| Các trường được lập chỉ mục | Một trường __name__ bổ sung sẽ tự động được thêm vào các trường được lập chỉ mục nếu chưa có. | __name__ không tự động được thêm vào các trường được lập chỉ mục. Bạn cần chỉ định rõ ràng __name__ trong các trường được lập chỉ mục nếu trường này quan trọng đối với ứng dụng của bạn. |
| Chuẩn hoá thứ tự sắp xếp | Mệnh đề order by của truy vấn được chuẩn hoá bằng cách thêm các trường không bằng nhau và trường __name__ vào cuối (nếu chưa có). Điều này đảm bảo thứ tự duy nhất, mang tính xác định của các kết quả bất kể các trường khác trong mệnh đề order by. | Không chuẩn hoá thứ tự sắp xếp. Thứ tự sắp xếp như sort a ASC chỉ đảm bảo rằng kết quả được sắp xếp theo trường a. Cloud Firestore sẽ sử dụng các chỉ mục hiện có để trả về kết quả theo thứ tự hiệu quả nhất có thể. Do đó, nếu a không phải là duy nhất trong tập kết quả, thì thứ tự của các kết quả có thể khác nhau giữa các truy vấn tuỳ thuộc vào cấu hình chỉ mục, chiến lược thực thi, v.v. Để đảm bảo thứ tự duy nhất, mang tính xác định của các kết quả, bạn cần thêm một trường duy nhất như __name__ vào thứ tự sắp xếp. |
| Hiệu suất | Truy vấn được lập chỉ mục: Hiệu suất và chi phí tăng theo quy mô của tập kết quả. |
Truy vấn không có chỉ mục: Hiệu suất và chi phí tăng theo quy mô của tập dữ liệu. Truy vấn được lập chỉ mục: Hiệu suất và chi phí tăng theo quy mô của tập kết quả. Bạn nên sử dụng các công cụ Giải thích truy vấn và Thông tin chi tiết về truy vấn để tạo chỉ mục cũng như cải thiện hiệu suất và chi phí của các truy vấn. |
| Ảnh hưởng đến chi phí lưu trữ | Bạn phải chịu chi phí lưu trữ do các chỉ mục tự động và chỉ mục tổng hợp. | Bạn tiết kiệm được chi phí lưu trữ vì các chỉ mục không được tự động tạo cho mọi trường. |
| Cơ sở tính phí | Tính phí cho mỗi thao tác đọc, ghi và xoá tài liệu. | Tính phí cho mỗi Đơn vị đọc (từng phần 4KB) và Đơn vị ghi (từng phần 1KB). Việc ghi các mục chỉ mục sẽ tiêu thụ Đơn vị ghi.
Tìm hiểu về giá mới kèm theo một số ví dụ. |
| Quy tắc bảo mật | Quy tắc bảo mật bảo vệ các bộ sưu tập bằng cách xác minh quyền đọc/ghi. | Quy tắc bảo mật bảo vệ các bộ sưu tập bằng cách xác minh quyền đọc/ghi. Tìm hiểu cách mô hình hoá dữ liệu để hỗ trợ các truy vấn trong quy trình xử lý trong hướng dẫn Mô hình dữ liệu. |