Mysql
 sql >> Baza danych >  >> RDS >> Mysql

bardzo duża tabela mysql i raportowanie

Zacznij od zajrzenia do partition wstaw swój stół, jeśli jeszcze tego nie zrobiłeś:

http://dev.mysql.com/doc/refman/5.1 /pl/partycjonowanie.html

http://www.slideshare.net/datacharmer/mysql-partitions-tutorial

http ://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-duży-real-life-problems.html

Jak „konsolidujesz” swoje dane? Może metoda, której używasz, nie jest optymalna. Dobrym podejściem (daj mi znać, jeśli to właśnie robisz) jest utworzenie tabeli zawierającej dane zagregowane. Następnie skonfiguruj to w ten sposób:

Najpierw odłóż na bok sposób, w jaki dane są zrzucane do głównej tabeli...

  • Utwórz zadanie (cron lub cokolwiek, co możesz mieć pod ręką lub już skonfigurowane), które działa w określonych odstępach czasu, w zależności od tego, jak dane są ładowane do głównej tabeli (nazwijmy je MAIN , posuwając się do przodu). Jeśli Twoja tabela MAIN jest ładowana co godzinę, zsynchronizuj ją. Co pół godziny? Nie ma znaczenia. Możesz sprawdzić prędkość mimo to, a jeśli Twoje raporty są poza godzinami szczytu, zaplanuj na ten czas

  • Prawidłowo zindeksuj tabelę pod kątem danych skonsolidowanych. Nazwijmy to AGG iść naprzód.

  • Utwórz procedurę składowaną, która ładuje dane z MAIN do AGG, czyli w zasadzie AGG LOAD FOR INTERVAL-? . Oczywiście jesteś jedyną osobą, która wie, jak i kiedy dane zostaną wstawione do MAIN, więc będziesz także osobą, która wie, jaki jest zamiar agregacji. Możliwe jest również dalsze uruchamianie agregującej procedury składowanej, jeśli intencja agregacji nie została zakończona (powiedzmy, że jest to cały dzień, więc jest to akumulacja do momentu ustawienia)

  • Użyj STAGING tabele. Dla mnie są najlepsze .

  • Utwórz procedurę składowaną, która ponownie sprawdza dane, tak aby wszelkie aktualizacje lub dodatkowe wstawienia rekordów mogły zostać odzwierciedlone w tabeli AGG, uruchamiając tę ​​procedurę. Uwzględnij parametry zakresu do zaktualizowania. Jeśli jest codziennie, masz DAILY AGG LOAD i DAILY AGG RELOAD procedura. Dołącz AGG CHECK INTERVAL i AGG CHECK DAILY zabieg, który pomoże Ci dobrze spać w nocy. Aha i nie wspominając o AGG DATA HOLE CHECK lub MISSING AGG DATA CHECK i zastosuj reguły biznesowe, które implementują sprawdzanie wymaganej minimalnej ilości danych, które można uzyskać z tabeli zagregowanej lub z tabeli głównej lub tabeli pomostowej (najlepiej)

  • Oczywiście nigdy nie modyfikuj AGG stół. Zawsze tylko ładuj ponownie.

  • Jak to pomaga? Czy nie byłoby wtedy potrzebne tylko, aby raporty wysyłały zapytanie do AGG? tabeli, która jest mniejsza i szybsza (ponieważ agregacja została już wykonana)? Być może problem z wydajnością pojawia się wraz z ładowaniem interwałowym, ale jeśli odpowiednio ustrukturyzujesz swoją tabelę, jej indeksy i konserwację, powinno to być tego warte.

  • Gdzie wkracza partycjonowanie? Archiwizacja. Po upływie określonego czasu (porozmawiaj o tym, co jest akceptowalne ze swoim zespołem/szefem/topmanem) możesz zarchiwizować stare dane z MAIN . Doświadczyłem konieczności przechowywania danych z 1 roku w produkcyjnej bazie danych. To było trochę uciążliwe, ale ponieważ była to prośba klienta, firma nie miała wyboru, jak tylko dać mi potrzebne miejsce na dysku (pociera ręce) i chłopcze, bawiłem się tym, aż coś działało przyzwoicie. Muszę wspomnieć, że moje doświadczenie dotyczyło Microsoft SQL Server 2005, a procedury składowane i SSIS sprawiły, że było to zabawne.

To wszystko, jeśli jeszcze tego nie wiesz i dla innych, którzy mogą chcieć rozważyć opcje. Nie mówię, że nie znałeś już żadnego z powyższych; Mówię tylko, co udało mi się zrobić wcześniej — biorąc pod uwagę, że nie miałem więcej informacji z twojego postu, z wyjątkiem tego, że masz proces konsolidacji, który próbowałeś.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę sprawdzić, czy MySQL i Tomcat są uruchomione?

  2. wybierz * w pliku zewnętrznym, który nie działa nawet dla roota

  3. Płaskie dane dziecka/rodzica z nieznaną liczbą kolumn

  4. Android pobiera dane z tabeli MySql

  5. Mysql:Zamów według polubienia?