Mysql
 sql >> Database >  >> RDS >> Mysql

perché dividiamo una tabella MySQL in molte tabelle più piccole?

Penso che tu abbia confuso alcuni termini qui.

Tutti i tuoi dati vanno in un database (noto anche come schema). In un database puoi avere tabelle.

es.

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

All'interno delle tabelle hai i campi (id, name, address) alias colonne.E le tabelle hanno una o più righe.
Un esempio per dipendente di tabella:

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

Questo per quanto riguarda le basi.

Perché il partizionamento
Ora supponiamo di avere un sacco di persone (righe) nel nostro database.
Ricorda che questo è un database galattico, quindi abbiamo 100 miliardi di record.
Se vogliamo cercare così velocemente è bello se possiamo farlo in parallelo.
Quindi partizioniamo la tabella (diciamo per paese) e quindi possiamo avere x server che cercano in 1 paese ciascuno.
Il partizionamento tra server è chiamato sharding .

Oppure possiamo partizionare ad es. dati storici per anno, quindi non dobbiamo esaminare tutti i dati solo per ottenere i recenti notizia. Dobbiamo solo passare attraverso la partizione per quest'anno. Questo si chiama partitioning .

Qual ​​è la grande differenza tra il sharding può solo partitioning ?

Sharding
In sharding prevedi che tutti i tuoi dati sono rilevanti e altrettanto probabili essere interrogati. (es. lavoro.
Quindi assegni a ciascuna macchina una partizione (shard) di dati diversa e fornisci a tutte le macchine la stessa query. Quando escono i risultati, UNION tutti insieme e produrre il risultato.

Partizionamento di base
Nel partitioning di base parte dei tuoi dati è hot e la parte è not . Un caso tipico sono i dati storici, i nuovi dati sono hot , i vecchi dati vengono a malapena toccati.
Per questo caso d'uso è inutile mettere i vecchi dati in server separati. Quelle macchine aspetteranno e aspetteranno e non faranno nulla perché a nessuno importa dei vecchi dati tranne alcuni revisori che li esaminano una volta all'anno.
Quindi partizioni quei dati per anno e il server archivierà automaticamente le vecchie partizioni in modo che tu le query esamineranno solo un (forse 2) anni di dati e saranno molto più veloci.

Ho bisogno del partizionamento?
Esegui il partizionamento solo quando hai moltissimi dati, perché complica la tua configurazione.
A meno che tu non abbia più di un milione di record, non devi prendere in considerazione il partizionamento.
Se lo fai hai più di 100 milioni di record, dovresti assolutamente prenderlo in considerazione.

Per ulteriori informazioni, vedere:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
e:http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Vedi anche wiki:http://en.wikipedia.org/wiki /Partizione_%28database%29

Queste sono solo le mie euristiche personali YMMV.