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

dlaczego dzielimy tabelę mysql na wiele mniejszych?

Myślę, że masz tutaj pomieszanych kilka terminów.

Wszystkie twoje dane trafiają do jednej bazy danych (czyli schematu). W bazie danych możesz mieć tabele.

np.

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

Wewnątrz tabel masz pola (id, name, address) aka kolumny.A tabele mają jeden lub więcej wierszy.
Przykład dla pracownika tabeli:

id  name        address           country
----------------------------------------------------
1   John        1 Regent Street   UK
2   James       24 Jump Street    China
3   Darth Vader 1 Death Star      Bestine, Tatooine

Tyle o podstawach.

Dlaczego partycjonowanie
Teraz załóżmy, że w naszej bazie danych mamy bardzo dużo osób (wierszy).
Pamiętaj, że jest to galaktyczna baza danych, więc mamy 100 miliardów rekordów.
Jeśli chcemy przeszukiwać tak szybko fajnie, jeśli możemy to robić równolegle.
Więc dzielimy tabelę (powiedzmy według kraju), a następnie możemy mieć x serwerów szukających w 1 kraju każdy.
Podział na serwery nazywa się sharding .

Lub możemy podzielić np. dane historyczne według roku, więc nie musimy przeglądać wszystkich dane tylko po to, aby uzyskać najnowsze Aktualności. Na ten rok musimy tylko przejść przez przegrodę. Nazywa się to partitioning .

Jaka jest duża różnica między sharding może po prostu partitioning ?

Sharding
W sharding przewidujesz, że wszystkie Twoje dane są istotne i równie prawdopodobne, że zostaną odpytane. (np. Google może oczekiwać, że wszystkie ich dane zostaną odpytane; archiwizowanie części ich danych jest dla nich bezużyteczne).
W tym przypadku chcesz, aby wiele komputerów przeglądało Twoje dane równolegle, przy czym każda maszyna wykonuje część pracy.
Więc dajesz każdej maszynie inną partycję (odłamek) danych i dajesz wszystkim maszynom to samo zapytanie. Kiedy wyjdą wyniki, UNION je wszystkie razem i wyprowadza wynik.

Podstawowe partycjonowanie
W podstawowym partitioning część Twoich danych jest hot a część to not . Typowym przypadkiem są dane historyczne, nowe dane są hot , stare dane prawie nie zostają naruszone.
W tym przypadku użycia nie ma sensu umieszczać starych danych na oddzielnych serwerach. Te maszyny będą po prostu czekać, czekać i nic nie zrobią, ponieważ nikt nie dba o stare dane, z wyjątkiem niektórych audytorów, którzy przeglądają je raz w roku.
Więc dzielisz te dane na rok, a serwer automatycznie archiwizuje stare partycje, aby Twoje zapytania będą dotyczyć tylko jednego (może 2) lat danych i będą znacznie szybsze.

Czy potrzebuję partycjonowania?
Partycjonujesz tylko wtedy, gdy masz bardzo dużo danych, ponieważ komplikuje to konfigurację.
O ile nie masz więcej niż miliona rekordów, nie musisz brać pod uwagę partycjonowania.
Jeśli masz masz ponad 100 milionów rekordów, zdecydowanie powinieneś to rozważyć.

Aby uzyskać więcej informacji, zobacz:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
i:http://blog.mayflower.de/archives/353-Is-MySQL-partycjonowanie-przydatne-dla-bardzo-duzych-real-life-problems.html
Zobacz także wiki:http://en.wikipedia.org/wiki /Partition_%28database%29

To tylko moja osobista heurystyka YMMV.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klejnot MySQL na OSX 10.7 Lion

  2. Jak usunąć hasło roota MySQL?

  3. Próba uzyskania własności nie-obiektowej - CodeIgniter

  4. Przyspieszenie dużej liczby aktualizacji i wstawek mysql

  5. varchar(255) vs mały tekst/tinyblob i varchar(65535) vs obiekt BLOB/tekst