Firestore ở chế độ Native bao gồm 2 tập hợp thao tác – thao tác Firestore Core và thao tác Firestore Pipeline.
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 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ì ngoại tuyến. Một điểm khác biệt rõ ràng 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ạo tự động cho các trường riêng lẻ. Mặc dù điều này cho phép thực hiện 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 lập chỉ mục sẽ mặc định quét toàn bộ bộ sưu tập. Điều này có thể dẫn đến việc 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ể có. 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ạo tự động, 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 tiêu chuẩn và các 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
Thao tác Core giữ lại cú pháp chuỗi phương thức quen thuộc (cho
ví dụ: .where(), .orderBy()) được sử dụng trong phiên bản Standard. Các
thao tác này hỗ trợ các truy vấn nghe theo thời gian thực và tính năng duy trì ngoại tuyến cho ứng dụng web và thiết bị di động. 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ã ứ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 một trường. Chỉ mục là không bắt buộc và không cần thiết để thực hiện 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 lập 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 thay vì theo số lượng tài liệu. Một truy vấn không được lập 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ả cá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 một 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ó cá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ó khả năng 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 các giai đoạn tuần tự stages được thực thi theo thứ tự. Điều này cho phép thực hiện 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 phép tổng hợp mà 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()
Nhiều chức năng
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:
- Phép 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ỳ ý. - 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 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 các 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ới và quản lý các 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 và đặc điểm hiệu suất của các truy vấn đó
- 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 riêng biệ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 Firestore Standard và Firestore Enterprise
Sự khác biệt chính về hoạt động 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, điều này ả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à Pipeline | |
| Yêu cầu về việc lập chỉ mục | Cần có chỉ mục cho các truy vấn.
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. |
Không bắt buộc phải có chỉ mục và do đó, chỉ mục là không bắt buộc đối với các truy vấn.
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 cả chỉ mục không thưa thớt/thưa thớt và chỉ mục riêng biệt. |
| 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 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 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 và cải thiện hiệu suất cũng như chi phí của các truy vấn. |
| Hàm ý về chi phí lưu trữ | Bạn phải chịu chi phí lưu trữ do 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ạo tự động cho mọi trường. |
| Cơ sở chi 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 Pipeline trong hướng dẫn Mô hình dữ liệu. |