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

Liczniki aktualizacji dużej ilości danych Mysql

Czy podzieliłeś klienta na osobną maszynę od serwera? To pierwszy, drobny krok w skalowaniu.

Czy masz zapytania dotyczące replikacji i tylko do odczytu wysyłane do Slaves? To pozwala na nieograniczone odczyt skalowanie. (Ale to nie odnosi się do pytania UPDATE, z wyjątkiem zmniejszenia obciążenia Mastera.)

115 IOP na pojedynczym, wirującym dysku wystarczy do jego nasycenia. innodb_flush_log_at_trx_commit domyślnie wynosi 1, co prowadzi do co najmniej 1 IOP na transakcję. Niektóre rozwiązania tymczasowe (do czasu, gdy ruch wzrośnie o kolejne 10x)...

SSD — może 1000 IOP.

Aktualizuj wsadowo (takie jak wspomniana przez @N.B.) To 100-krotnie zmniejsza liczbę "flushów".

innodb_flush_log_at_trx_commit =2 -- aby praktycznie wyeliminować spłukiwania (przy pewnej utracie bezpieczeństwa).

Ale -- nawet jeśli potrafisz wykonać UAKTUALNIENIA wystarczająco szybko, czy nie musisz również czytać wartości? Oznacza to, że będzie spór. Ile SELECTów na tym samym stół robisz? 100/s może być w porządku; 1000/s może powodować tak duże zakłócenia, że ​​nie zadziała.

Jak duży jest stół? Aby to zadziałało, musi być wystarczająco mały, aby można go było cały czas przechowywać w pamięci podręcznej.

Reddit to inne podejście — przechwytuj tam aktualizacje. Następnie stale pobieraj skumulowane liczby i przeprowadzaj potrzebne AKTUALIZACJE.

Sharding — w tym miejscu dzielisz dane na wiele komputerów. Podział na hash lub odnośnik (lub kombinację tych dwóch) identyfikatora użytkownika jest powszechny. Następnie UPDATE musi dowiedzieć się, którą maszynę zaktualizować, a następnie wykonać tam akcję. Jeśli masz 10 odłamków (maszyny), możesz utrzymać prawie 10-krotność szybkości aktualizacji. Ostatecznie jest to jedyny sposób, w jaki wszyscy najwięksi gracze mogą obsłużyć ponad 100 milionów użytkowników i miliardy zapytań dziennie.

PARTITIONing raczej nie pomoże. Kod czyszczenia partycji nie jest jeszcze wystarczająco wydajny, aby uniknąć zbyt dużego obciążenia dla tak małego zapytania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest partycjonowanie MYSQL?

  2. Jak wybrać wiele rekordów (wiersz) z kolumny w mysql?

  3. Problemy z hasłem MySQL (mac OS X Lion)

  4. SQL/PHP:Pokaż 3 najczęściej sprzedawane produkty z bazy danych

  5. Jak pogrupować rekordy bazy danych w 15-minutowe interwały czasowe