Pracuję nad projektem RoR dla mojej firmy, a nasz zespół programistów rozpoczął już krótką debatę na temat projektu, w szczególności bazy danych.
Mamy model Message
, który należy utrwalić. To bardzo, bardzo mały model z tylko trzema kolumnami db innymi niż id, jednak prawdopodobnie będzie ich DUŻO, kiedy przejdziemy do produkcji. Obserwujemy aż 1 000 000 wstawień dziennie. Modele będą zawsze przeszukiwane tylko za pomocą dwóch kluczy obcych, które mogą być indeksowane. Poza tym modele nigdy nie muszą być usuwane, ale nie musimy też ich przechowywać, gdy mają około trzech miesięcy.
Zastanawiamy się więc, czy implementacja tej tabeli w Postgres spowoduje znaczący problem z wydajnością? Czy ktoś ma doświadczenie z bardzo dużymi bazami danych SQL, aby powiedzieć nam, czy będzie to problem? A jeśli tak, jaką alternatywę powinniśmy wybrać?
źródło
Odpowiedzi:
Wiersze na tabelę same w sobie nie będą stanowić problemu.
Zatem z grubsza 1 milion wierszy dziennie przez 90 dni to 90 milionów wierszy. Nie widzę powodu, dla którego Postgres nie mógłby sobie z tym poradzić, nie znając wszystkich szczegółów tego, co robisz.
W zależności od dystrybucji danych możesz użyć kombinacji indeksów, indeksów filtrowanych i jakiegoś rodzaju partycjonowania tabel, aby przyspieszyć działanie, gdy zobaczysz, jakie problemy z wydajnością możesz mieć lub nie. Twój problem będzie taki sam na każdym innym RDMS, który znam. Jeśli potrzebujesz tylko 3 miesięcy projektowania danych w procesie wycinania danych, nie potrzebujesz już więcej. W ten sposób uzyskasz spójną ilość danych w tabeli. Twoje szczęście, że wiesz, ile danych będzie istnieć, przetestuj je pod kątem swojej objętości i zobacz, co otrzymasz. Testowanie jednej tabeli z 90 milionami wierszy może być tak proste, jak:
https://wiki.postgresql.org/wiki/FAQ
źródło
Innym sposobem na znaczne przyspieszenie zapytań w tabeli zawierającej> 100 milionów wierszy jest grupowanie tabeli w indeksie, który jest najczęściej używany w zapytaniach w godzinach poza godzinami pracy. Mamy tabelę z> 218 milionami wierszy i znaleźliśmy 30-krotne ulepszenia.
Ponadto w przypadku bardzo dużej tabeli dobrym pomysłem jest utworzenie indeksu dla kluczy obcych.
źródło