Firestore ở chế độ Native (Gốc) bao gồm 2 nhóm thao tác: Thao tác Firestore Core (Cốt lõi) và thao tác Firestore Pipeline (Quy trình).
Thao tác Firestore Core cung cấp chức năng Tạo, Đọc, Cập nhật và Xoá (CRUD) tài liệ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. Điểm khác biệt về thao tác 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.
Thao tác Firestore Pipeline 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. Thao tác Pipeline 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 Firestore Core
Thao tác Core cho phép các thao tác CRUD 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à thay đổi về hoá đơn sẽ thay đổi đáng kể so với phiên bản Standard.
Chức năng và tính liên tục
Thao tác Core 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 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, thao tác Core trong phiên bản Enterprise không tự động tạo chỉ mục cho từng trường. 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 chúng 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 thanh toán (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 từng trường), 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 Firestore Pipeline
Phiên bản Firestore Enterprise có thao tác Pipeline 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. Thao tác Pipeline cung cấp hàng trăm tính năng truy vấn bổ sung. Thao tác Pipeline có các khả năng sau:
Cú pháp có thể kết hợp dựa trên giai đoạn
Truy vấn Pipeline được xây dựng 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 (trước đây không thể thực hiện được).
Ví dụ sau đây cho thấy một truy vấn Pipeline 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()
Các chức năng nâng cao
Truy vấn Pipeline 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 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 tương 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 thao tác Pipeline operations.
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 thao tác Firestore Core 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ý truy vấn Pipeline:
- 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 thông tin chi tiết 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 đ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 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
Điểm khác biệt chính về thao tác giữa thao tác Core và thao tác 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 Core | Phiên bản Enterprise – Thao tác Core và thao tác Pipeline | |
| Yêu cầu về việc lập chỉ mục | Truy vấn yêu cầu 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 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 | Trường __name__ bổ sung được tự động thêm vào các trường được lập chỉ mục nếu chưa có. | __name__ không được tự động 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 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ó của bạn để 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 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 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ỷ lệ thuận với kích thước của tập kết quả. |
Truy vấn không có chỉ mục: Hiệu suất và chi phí tỷ lệ thuận với kích thước của tập dữ liệu. Truy vấn được lập chỉ mục: Hiệu suất và chi phí tỷ lệ thuận với kích thước 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 truy vấn. |
| Ảnh hưởng đến chi phí lưu trữ | Bạn phải chịu chi phí lưu trữ phát sinh từ 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ì 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ợ truy vấn Pipeline trong hướng dẫn Mô hình dữ liệu. |