2017-09-29 22 views
5

Tôi có bộ sưu tập Cosmos DB với nhiều phân vùng dựa trên ID thiết bị. Tôi thường xuyên sử dụng các trường hợp yêu cầu truy xuất tài liệu gần đây nhất bằng một ID thiết bị cụ thể. Tôi hiện đang sử dụng các chức năng SELECT TOP 1 sẵn trong DocumentDB API như hình dưới đây để thực hiện điều này:Cosmos DB (DocumentDB API): Cách hiệu quả để truy vấn tài liệu gần đây nhất bằng ID phân vùng?

SELECT TOP 1 * 
FROM c 
WHERE c.deviceId = 5 
ORDER BY c.timeStamp DESC 

Cách tiếp cận này kết quả trong tăng RU/s tiêu thụ và giảm hiệu suất như bộ sưu tập và phân vùng cá nhân phát triển về kích thước, như người ta mong đợi. Như một phương thuốc tạm thời cho vấn đề này, tôi đã bổ sung thêm nơi khoản để giới hạn phạm vi truy vấn bởi dấu thời gian:

SELECT TOP 1 * 
FROM c 
WHERE c.deviceId = 5 
AND c.timeStamp >= 1506608558 --timestamps are unix/epoch based to optimize indexing 
AND c.timeStamp <= 1506694958 
ORDER BY c.timeStamp DESC 

Tôi muốn biết nếu có một cách tốt hơn để chọn tài liệu mới nhất của id phân vùng, khi thêm mệnh đề where where này có thể dẫn đến kết quả không mong đợi hoặc bị thiếu.

Trả lời

0

Tôi có kịch bản tương tự trong đó Id của nội dung tôi đang theo dõi tạo khóa phân vùng và trong phân vùng đó có 2.880 sự kiện mỗi ngày cho mỗi nội dung và điều đó sẽ tiếp tục tăng theo thời gian.

Khi lịch sử sự kiện đầy đủ được yêu cầu cho các trường hợp sử dụng khác, trường hợp sử dụng cụ thể này yêu cầu sự kiện mới nhất cần trích xuất. Vì vậy, một Bộ sưu tập thay thế được tạo ra sử dụng cùng một khóa phân vùng, nhưng chứa trạng thái CURRENT tức là sự kiện mới nhất cho nội dung đó.

Khi một sự kiện được ghi vào bên WRITE, là bộ sưu tập lưu giữ tất cả các sự kiện cho nội dung, trình kích hoạt sẽ cập nhật phần READ với giá trị mới nhất.

Mặc dù điều này có vẻ như đang tăng gấp đôi nỗ lực viết, trong trường hợp sử dụng của chúng tôi, hiệu suất tăng ở mặt đọc được bù đắp cho điều này.

tôi tìm thấy bài viết MS này được sử dụng Working with the change feed support in Azure Cosmos DB

+0

Cảm ơn @Mr Slim, tôi có thể kết thúc đi tuyến đường này, nhưng tôi hy vọng có một cách tiếp cận khác mà sẽ cung cấp việc đọc mới nhất mà không cần phải duy trì bộ sưu tập bổ sung có trạng thái này. –

+0

Chúc may mắn. Nếu bạn tìm thấy một giải pháp thay thế, vui lòng đăng bài ở đây vì tôi muốn thấy một cách tiếp cận khác. –

Các vấn đề liên quan