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.
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ì ngoại tuyến. Một điểm khác biệt rõ rệ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ạo tự động 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 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.
Các 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. 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ạ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
Các 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à thay đổi 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
Cá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ợ 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 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 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 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 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 thanh toán (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ả 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ư 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 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ó khả năng kết hợp dựa trên giai đoạn
Các truy vấn trong quy trình xử lý được xây dựng bằng cách xác định một loạt 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.
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 duy nhấ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:
- 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 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 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ý 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 đ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 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 Firestore Standard và Firestore Enterprise
Sự khác biệt chính về hoạt động giữa các thao tác Core và 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à 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 cần 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 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 nằm 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 lập 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 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ữ 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ì các 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 trong quy trình xử lý trong hướng dẫn Mô hình dữ liệu. |