2017-09-29 19 views
5

Mam kolekcję Cosmos DB z licznymi partycjami opartymi na identyfikatorze urządzenia. Często mam przypadki użycia, które wymagają pobrania najnowszego dokumentu przez określony identyfikator urządzenia. Obecnie używam funkcjonalność SELECT TOP 1 dostępne w DocumentDB API, jak pokazano poniżej, aby to osiągnąć:Cosmos DB (DocumentDB API): Wydajny sposób na zapytanie o najnowszy dokument według identyfikatora partycji?

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

wyniki to podejście w zwiększonej konsumpcji RU/s oraz zmniejszenie wydajności jak gromadzenie i poszczególne partycje stają się większe, jak można się było spodziewać. Jako tymczasowe remedium na ten problem, dodałem dodatkowy gdzie klauzule ograniczenia zakresu zapytania przez timestamp:

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 

chciałbym wiedzieć, czy istnieje lepszy sposób, aby wybrać ostatnią dokumentu przez ID partycji, jako dodatek do tego, gdzie klauzula może spowodować nieoczekiwane lub brakujące wyniki.

Odpowiedz

0

Miałem podobny scenariusz, w którym identyfikator śledzonego zasobu stanowi mój klucz partycjonowania, a na tej partycji znajduje się 2.880 zdarzeń dziennie na zasób, a liczba ta będzie nadal rosnąć wraz z upływem czasu.

Podczas gdy pełna historia zdarzeń była wymagana dla innych przypadków użycia, ten konkretny przypadek użycia wymagał wyodrębnienia ostatniego zdarzenia. Utworzono alternatywną kolekcję, która używa tego samego klucza partycji, ale zawiera stan CURRENT, czyli ostatnie zdarzenie dla tego zasobu.

Kiedy zdarzenie zostanie zapisane na stronie WRITE, będąc kolekcją, która utrzymuje wszystkie zdarzenia dla zasobu, wyzwalacz aktualizuje stronę READ o najnowszą wartość.

Chociaż może to wydawać się, że podwaja nakład pracy przy pisaniu, w naszym przypadku użycia zrekompensowało to wzrost wydajności po stronie czytającej.

znalazłem ten artykuł do MS mieć zastosowania Working with the change feed support in Azure Cosmos DB

+0

Dzięki @Mr Slim, mogę skończyć się tę trasę, ale mam nadzieję, że to alternatywne podejście, które dostarczy najnowszy odczyt bez konieczności utrzymywania ta dodatkowa dodatkowa kolekcja. –

+0

Powodzenia. Jeśli znajdziesz alternatywę, opublikuj tutaj, ponieważ chciałbym zobaczyć alternatywne podejście. –

Powiązane problemy