Firestore ở Chế độ gốc bao gồm hai nhóm thao tác: Thao tác cốt lõi của Firestore và Thao tác trong quy trình 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 sẵn cho các truy vấn nghe theo thời gian thực và tính năng lưu trữ cố định khi không có mạng. Một điểm khác biệt rõ rệt về hoạt động trong phiên bản này là các chỉ mục không bắt buộc và không được tạo tự động cho các trường đơn lẻ. Mặc dù điều này cho phép các truy vấn thực thi mà không cần 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ộ tập hợ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ý Firestore là một tính năng chính 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 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 hoạt động Firestore Core
Các thao tác cốt lõi cho phép thực hiện các thao tác CRUD tiêu chuẩn và truy vấn lắng 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à thanh toá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 cốt lõi vẫn giữ nguyên cú pháp chuỗi phương thức quen thuộc (ví dụ: .where(), .orderBy()) được dùng trong phiên bản Standard. Các thao tác này hỗ trợ truy vấn lắng nghe theo thời gian thực và lưu 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, các lượt tra cứu đơn giản và việc 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 một trường. Chỉ mục là không bắt buộc và không cần thiết để thực thi một 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ộ tập hợp. Mặc dù các truy vấn không được lập chỉ mục cho phép tạo nguyên mẫu nhanh chóng, 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 tiêu thụ Đơn vị đọc.
Mô hình thanh toán (theo đơn vị)
Đơn vị đọc được tính phí theo từng phần 4 KB 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 tập hợ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 1 KB. Việc ghi một tài liệu sẽ tiêu tốn đơn vị cho dữ liệu cộng với các đơn vị bổ sung cho mỗi mục nhập chỉ mục được cập nhật. Không giống như trong phiên bản Standard (thực thi việc 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í ghi và hiệu suất.
Các tính năng của hoạt động trong quy trình xử lý 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 cung cấp hàng trăm tính năng truy vấn bổ sung. Thao tác trong quy trình có các chức năng sau:
Cú pháp thành phần kết hợp dựa trên giai đoạn
Các truy vấn quy trình đượ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 thực hiện các thao tác phức tạp, chẳng hạn như lọc kết quả của một phép tổng hợp, điều mà trước đây không thể thực hiện được.
Ví dụ sau đây cho thấy một truy vấn quy trình 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 mở rộng
Truy vấn Pipeline mang đến nhiều tính 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ỳ ý. - Phép nối quan hệ: Thực hiện phép nối phía máy chủ trên các tập hợp và tập hợ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 để thể hiện các câu lệnh
where(...)phức tạp tuỳ ý, bao gồm cảregex_match(...),add(...)vàstr_contains(...), tất cả đều không có yêu cầu về chỉ mục cứng. - Đọc một phần / Phép chiếu: 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 khác trên tài liệu.
Để tìm hiểu thêm về các chức năng này, hãy xem phần Truy vấn dữ liệu bằng các thao tác trong quy trình.
Hỗ trợ theo thời gian thực và khi không có mạng
Để sử dụng tính năng Thời gian thực và Ngoại tuyến, nhà phát triển có thể 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 có các tính năng chuyên biệt để tương tác 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ả của tính năng Giải thích truy vấn để biết một truy vấn tiêu thụ bao nhiêu đơn vị đọc hoặc ghi và phân tích quá trình thực thi truy vấn đó.
- Thông tin chi tiết về truy vấn: Phiên bản Enterprise hỗ trợ tính năng 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á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, chỉ mục không thưa và chỉ mục duy nhất. Công cụ này cũng hỗ trợ tạo và chỉnh sửa chỉ mục của 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 lớn về hoạt động giữa Hoạt động cốt lõi và Hoạt động quy trình nằm ở việc quản lý hoạt động 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 tiêu chuẩn – Hoạt động cốt lõi | Phiên bản Enterprise – Hoạt động cốt lõi và Hoạt động quy trình | |
| Yêu cầu đối với việc lập chỉ mục | Bạn cần có chỉ mục để thực hiện truy vấn.
Chỉ mục cho từng trường đượ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 kết hợp hoặc chỉ mục nhóm tập hợp phải được định cấu hình theo cách thủ công. |
Chỉ mục không bắt buộc và do đó không bắt buộc đối với truy vấn.
Bạn có thể 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ưa và chỉ mục duy nhất. |
| Trường được lập chỉ mục | 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 được tự động thêm vào các trường được lập chỉ mục. Bạn cần chỉ định rõ __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 bất đẳng thức và trường __name__ vào cuối (nếu chưa có). Điều này đảm bảo thứ tự kết quả là duy nhất và tất định, bất kể các trường khác trong mệnh đề order by là gì. | 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 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ự kết quả là duy nhất và mang tính tất định, 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í điều chỉnh 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í sẽ 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, đồng thời cải thiện hiệu suất và chi phí của truy vấn. |
| Tác động đến chi phí lưu trữ | Bạn phải chịu chi phí lưu trữ cho các chỉ mục tự động và chỉ mục kết 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. |
| Giá vốn | Tính phí cho mỗi thao tác đọc, ghi và xoá tài liệu. | Tính phí theo Đơn vị đọc (phần 4 KB) và Đơn vị ghi (phần 1 KB). Việc ghi các mục chỉ mục sẽ tiêu tốn Đơn vị ghi.
Tìm hiểu về mức giá mới qua một số ví dụ. |
| Quy tắc bảo mật | Quy tắc bảo mật bảo vệ các tập hợp bằng cách xác minh quyền đọc/ghi. | Quy tắc bảo mật bảo vệ các tập hợp bằng cách xác minh quyền đọc/ghi. Tìm hiểu cách lập mô hình dữ liệu để hỗ trợ các truy vấn Pipeline trong hướng dẫn về Mô hình dữ liệu. |