„Teraz – jak rozwiązałbyś opisany problem?”
Z prostymi płaskimi plikami.
Oto dlaczego
Masz 2 000 000 podmiotów. Partycja na podstawie numeru podmiotu:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Każdy plik danych to level1/level2/level3/batch_of_data
Następnie możesz odczytać wszystkie pliki w danej części katalogu, aby zwrócić próbki do przetworzenia.
Jeśli ktoś chce relacyjnej bazy danych, załaduj pliki dla danego identyfikatora podmiotu do bazy danych w celu ich użycia.
Edytuj W numerach dnia.
-
date_id
/entity_id
reguła niepowtarzalności nie coś, z czym trzeba sobie poradzić. Jest (a) trywialnie nakładany na nazwy plików i (b) nieistotny dla zapytań. -
date_id
„rollover” nic nie znaczy — nie ma zapytania, więc nie ma potrzeby zmiany nazwy.date_id
powinien po prostu rosnąć bez ograniczeń od daty epoki. Jeśli chcesz wyczyścić stare dane, usuń stare pliki.
Ponieważ żadne zapytanie nie opiera się na date_id
, nic nie trzeba z tym robić. Może to być nazwa pliku dla wszystkiego, co ma znaczenie.
Aby uwzględnić date_id
w zestawie wyników, zapisz go w pliku z pozostałymi czterema atrybutami, które znajdują się w każdym wierszu pliku.
Edytuj przy otwarciu/zamknięciu
Do pisania musisz pozostawić plik(i) otwarte. Wykonujesz okresowe opróżnienia (lub zamykasz/ponownie otwierasz), aby upewnić się, że rzeczy naprawdę trafią na dysk.
Masz dwie możliwości wyboru architektury swojego pisarza.
-
Mieć pojedynczy proces „zapisujący”, który konsoliduje dane z różnych źródeł. Jest to przydatne, jeśli zapytania są stosunkowo częste. Płacisz za połączenie danych w czasie zapisu.
-
Otwórz jednocześnie kilka plików do zapisu. Podczas wykonywania zapytania połącz te pliki w jeden wynik. Jest to przydatne, ponieważ zapytania są stosunkowo rzadkie. Płacisz za połączenie danych w czasie zapytania.