Mysql
 sql >> Base de données >  >> RDS >> Mysql

pourquoi divisons-nous une table mysql en plusieurs tables plus petites ?

Je pense que vous avez mélangé quelques termes ici.

Toutes vos données vont dans une base de données (ou schéma). Dans une base de données, vous pouvez avoir des tables.

ex.

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

À l'intérieur des tables, vous avez des champs (id, name, address) alias colonnes. Et les tables ont une ou plusieurs lignes.
Un exemple pour la table employee :

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

Voilà pour les bases.

Pourquoi partitionner
Supposons maintenant que nous ayons beaucoup, beaucoup de personnes (lignes) dans notre base de données.
N'oubliez pas qu'il s'agit d'une base de données galactique, nous avons donc 100 milliards d'enregistrements.
Si nous voulons rechercher aussi rapidement c'est bien si nous pouvons le faire en parallèle.
Nous partitionnons donc la table (disons par pays) et nous pouvons ensuite avoir x serveurs qui recherchent dans 1 pays chacun.
Le partitionnement entre les serveurs s'appelle sharding .

Ou nous pouvons partitionner par ex. données historiques par année, nous n'avons donc pas à parcourir toutes les données juste pour obtenir le récent nouvelles. Nous n'avons qu'à passer par la partition pour cette année. C'est ce qu'on appelle le partitioning .

Quelle est la grande différence entre le sharding peut simplement partitioning ?

Partage
En sharding vous prévoyez que tous vos données sont pertinentes et tout aussi susceptibles d'être interrogées. (par exemple, Google peut s'attendre à ce que toutes ses données soient interrogées ; l'archivage d'une partie de ses données est inutile pour lui).
Dans ce cas, vous voulez que de nombreuses machines examinent vos données en parallèle, où chaque machine effectue une partie de la travail.
Donc, vous donnez à chaque machine une partition différente (shard) des données et donnez à toutes les machines la même requête. Lorsque les résultats sortent, vous UNION tous ensemble et affichez le résultat.

Partitionnement de base
Dans le partitioning de base une partie de vos données est hot et la partie est not . Un cas typique est celui des données historiques, les nouvelles données sont hot , les anciennes données sont à peine touchées.
Pour ce cas d'utilisation, il est inutile de mettre les anciennes données dans des serveurs séparés. Ces machines attendront et attendront sans rien faire car personne ne se soucie des anciennes données, à l'exception de certains auditeurs qui les examinent une fois par an.
Vous partitionnez donc ces données par an et le serveur archivera automatiquement les anciennes partitions afin que votre les requêtes ne porteront que sur une (peut-être 2) années de données et seront beaucoup plus rapides.

Ai-je besoin d'un partitionnement ?
Vous n'effectuez le partitionnement que lorsque vous avez beaucoup de données, car cela complique votre configuration.
Sauf si vous avez plus d'un million d'enregistrements, vous n'avez pas à envisager le partitionnement.
Si vous avez plus de 100 millions d'enregistrements, vous devriez certainement l'envisager.

Pour plus d'informations, voir :http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
et :http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Voir aussi wiki :http://en.wikipedia.org/wiki /Partition_%28database%29

Ce ne sont que mes heuristiques personnelles YMMV.