Zakładając, że twoje dane są niezmienne i mają rozmiar, możesz rozważyć Amazon Redshift; jest napisany dla rozwiązań do raportowania wielkości petabajtów.
W Dynamo mogę wymyślić kilka wykonalnych projektów. W pierwszym można użyć jednej tabeli, z mieszanym hash/kluczem zakresu (oba ciągi). Kluczem skrótu będzie nazwa serii czasowej, kluczem zakresu będzie znacznik czasu jako ciąg ISO8601 (który ma przyjemną właściwość, że kolejność alfabetyczna jest również porządkiem chronologicznym), a każdy element ma dodatkowy atrybut; wartość'. Daje to możliwość wyboru wszystkiego, począwszy od szeregów czasowych (Kwerenda na równości hashKey) i podzestawu szeregów czasowych (Zapytanie o równość hashKey i klauzulę rangeKey BETWEEN). Jednak głównym problemem jest problem "hotspot": wewnętrznie, Dynamo podzieli dane przez hashKey i rozproszy Twoje ProvisionedReadCapacity na wszystkie partycje. Więc możesz mieć 1000 KB odczytów na sekundę, ale jeśli masz 100 partycji, to masz tylko 10 KB na sekundę dla każdej partycji, a odczytanie wszystkich danych z pojedynczej serii czasu (pojedynczego klawisza skrótu) spowoduje tylko jedną partycję. Więc możesz myśleć, że twoje 1000 KB odczytów daje 1 MB na sekundę, ale jeśli masz 10 MB danych, może to potrwać znacznie dłużej, ponieważ twoja pojedyncza partycja będzie cię dławić znacznie mocniej.
Z drugiej strony DynamoDB ma bardzo wysoką, ale kosztowną górną granicę skalowania; jeśli chcesz, możesz zapłacić za 100 000 jednostek mocy obliczeniowej i mieć podsekwencyjne czasy odpowiedzi na wszystkie te dane.
Innym teoretycznym projektem byłoby przechowywanie każdej serii czasowej w oddzielnej tabeli, ale nie sądzę, że DynamoDB ma skalować do milionów tabel, więc to prawdopodobnie nie jest.
Możesz spróbować rozłożyć serie czasowe na 10 tabel, w których dane "bardzo dobrze odczytane" znajdują się w tabeli 1, "prawie nigdy nie czyta się danych" w tabeli 10, a wszystkie inne dane znajdują się gdzieś pomiędzy. Umożliwiłoby to "pogrupowanie" reguł dotyczących przepustowości/partycjonowania partycji, ale przy wysokim stopniu złożoności projektu. Ogólnie rzecz biorąc, prawdopodobnie nie jest tego warte; gdzie masz nową serię czasową? Jak pamiętasz, gdzie oni wszyscy są? Jak przenieść serię czasową?
Myślę, że DynamoDB obsługuje niektóre wewnętrzne "pęknięcia" na tego typu czytaniach z mojego własnego doświadczenia i możliwe jest, że moje liczby są wyłączone, a otrzymasz odpowiednią wydajność. Jednak moim werdyktem jest zaglądanie do Redshift.
Czego używałeś w końcu? – Hugo
jaki projekt wykorzystałeś? – Narayan