Firestore ở Chế độ gốc bao gồm 2 nhóm thao tác – Firestore Core và các thao tác của Firestore Pipeline.
Các thao tác Firestore Core cung cấp chức năng Tạo, Đọc, Cập nhật và Xoá (CRUD) tiêu chuẩn cho tài liệu, cùng với sự hỗ trợ tích hợp cho các truy vấn nghe theo thời gian thực và khả năng duy trì dữ liệu khi không có mạng. 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 không bắt buộc và không được tạo tự động cho các trường đơn. 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 chưa đượ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ể dẫn đến độ trễ và chi phí tăng lên khi tập dữ liệu tăng lên.
Các thao tác trong quy trình 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ể có. Các thao tác trong quy trình Firestore sử dụng cú pháp truy vấn linh hoạt và một 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 các ứng dụng.
Các tính năng của hoạt động Firestore Core
Các thao tác Core 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 nối chuỗi phương thức quen thuộc (ví dụ: .where(), .orderBy()) được dùng trong phiên bản Chuẩn. Các thao tác này hỗ trợ các truy vấn nghe theo thời gian thực và khả 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 các khối lượng công việc giao dịch tiêu chuẩn, các hoạt động tra cứu đơn giản và việc 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, hoạt động 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 một quy trình quét toàn bộ tập hợp. Mặc dù các truy vấn chưa được lập 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 tiêu thụ Đơn vị đọc.
Mô hình thanh toán (Dựa trên đơn vị)
Đơn vị đọc được tính phí theo các phần 4 KB thay vì theo số lượng tài liệu. Một truy vấn chưa đượ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ả các tài liệu. Đơn vị ghi được tính theo mức 1 KB. Việc ghi một tài liệu sẽ tiêu tốn các đơ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 Chuẩn, phiên bản này thực thi tính năng lập chỉ mục tự động 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 hoạt động trong quy trình Firestore
Phiên bản Firestore Enterprise có các hoạt động 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. Các thao tác trong quy trình Firestore cung cấp hàng trăm tính năng truy vấn bổ sung. Các thao tác trong Pipeline Firestore có những chức năng sau:
Cú pháp có thể kết hợp theo giai đoạn
Các truy vấn trong 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 các thao tác phức tạp, chẳng hạn như lọc kết quả của một hoạt động 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 quy trình tìm số lượng mã sản phẩm riêng biệt đã 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 khả năng mở rộng
Truy vấn Pipelines mang đến nhiều 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 (chẳng hạn 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 để thể hiện 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 yêu cầu chỉ mục cố định. - Đọ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 khác với 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 Pipeline.
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 trên 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ý Truy vấn trong quy trình:
- 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 để biết một truy vấn sử dụng bao nhiêu đơn vị đọc hoặc ghi 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 dành cho doanh nghiệp hỗ trợ Thông tin chi tiết về truy vấn. Tính năng này 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 về những 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 những truy vấn đó
- 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, không thưa và duy nhất. Công cụ 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 doanh nghiệp.
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 hoạt động Core và Pipeline nằm ở việc quản lý lập chỉ mục, điều này ảnh hưởng trực tiếp đến hiệu suất và chi phí.
| Firestore Standard – Các thao tác cốt lõi | Firestore Enterprise – Các thao tác cốt lõi và thao tác theo quy trình | |
| Yêu cầu về việc lập chỉ mục | Bạn phải 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 kết hợp hoặc chỉ mục nhóm tập hợp mà bạn phải định cấu hình theo cách thủ công. |
Không bắt buộc phải có chỉ mục, 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 dành cho doanh nghiệp 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. |
| 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 chưa đượ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ô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. |
| Hệ quả về 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 kết 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. |
| 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 (các phần 4 KB) và Đơn vị ghi (các 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ô hình định 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 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 trong hướng dẫn Mô hình dữ liệu. |