Jest to bardziej pytanie koncepcyjne. Inspiracją jest użycie bardzo dużej tabeli, w której nawet proste zapytanie zajmuje dużo czasu (odpowiednio zindeksowane). Zastanawiam się, czy istnieje lepsza struktura, a po prostu pozwalam, by stół rósł nieustannie.Jak skonstruować bardzo duży stół?
Przez duże mam na myśli 10 000 000 rekordów, które rosną każdego dnia o około 10 000 dziennie. Stół taki mógłby trafić 10 000 000 dodatkowych rekordów co 2,7 roku. Powiedzmy, że nowsze rekordy są dostępne najczęściej, ale starsze muszą pozostać dostępne. Mam dwie koncepcje koncepcyjne, aby przyspieszyć.
1) Zachowaj tabelę wzorcową, która przechowuje wszystkie dane, indeksowane według daty w odwrotnej kolejności. Utwórz oddzielny widok dla każdego roku, który zawiera tylko dane dla tego roku. Następnie, podczas odpytywania i powiedzmy, że zapytanie ma pobrać tylko kilka rekordów z trzyletniego okresu, mógłbym użyć połączenia, aby połączyć trzy widoki i wybrać z nich.
2) Inną opcją byłoby utworzenie oddzielnej tabeli na każdy rok. Następnie, ponownie używając unii, aby połączyć je podczas odpytywania.
Czy ktoś jeszcze ma inne pomysły lub koncepcje? Wiem, że to jest problem, z którym Facebook się zmierzył, więc jak myślisz, jak sobie z tym poradzili? Wątpię, że mają jedną tabelę (status_updates), która zawiera 100 000 000 000 rekordów.
Jakie są względne częstotliwości tego dostępu? Jak często potrzebowałbyś rzeczywistego związku rocznych danych? A nawet jeśli potrzebujesz unii, dlaczego nie po prostu połączysz dane * poza * bazą danych, aby uniknąć kosztów ogólnych związku? –
Czy możesz podać nam liczbę (i typy) pól w tabeli? –