J'ai lu la documentation ( http://dev.mysql.com/doc/refman/5.1/en/partitioning.html ), mais j'aimerais, avec vos propres mots, de quoi il s'agit et pourquoi. utilisé.
L’idée du partitionnement n’est pas d’utiliser plusieurs serveurs, mais d’utiliser plusieurs tables au lieu d’une seule. Vous pouvez diviser une table en plusieurs tables afin de pouvoir disposer des anciennes données dans une sous-table et des nouvelles données dans une autre. Ensuite, la base de données peut optimiser les requêtes dans lesquelles vous demandez de nouvelles données en sachant qu'elles se trouvent dans la deuxième table. De plus, vous définissez comment les données sont partitionnées.
Exemple simple tiré de la documentation MySQL :
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY RANGE ( YEAR(separated) ) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
Cela permet d’accélérer, par exemple:
Supprimer les anciennes données par simple:
ALTER TABLE employees DROP PARTITION p0;
La base de données peut accélérer une requête comme celle-ci:
SELECT COUNT(*)
FROM employees
WHERE separated BETWEEN '2000-01-01' AND '2000-12-31'
GROUP BY store_id;
Sachant que toutes les données sont stockées uniquement sur la partition p2.
Une partitioned table est une table logique unique composée de plusieurs sous-tables physiques. Le code de partitionnement est en réalité un simple wrapper autour d'un ensemble d'objets Handler Qui représentent les partitions sous-jacentes. et transmet les demandes au moteur de stockage via les objets Handler. Le partitionnement est une sorte de boîte noire qui cache les partitions Sous-jacentes au niveau de la couche SQL, bien que vous puissiez les voir assez facilement en En regardant le système de fichiers, où vous verrez les tables de composants. avec une convention de nommage délimitée par des hachages .
Par exemple, Est un moyen simple de placer chaque année les ventes dans une partition distincte:
CREATE TABLE sales (
order_date DATETIME NOT NULL,
-- Other columns omitted
) ENGINE=InnoDB PARTITION BY RANGE(YEAR(order_date)) (
PARTITION p_2010 VALUES LESS THAN (2010),
PARTITION p_2011 VALUES LESS THAN (2011),
PARTITION p_2012 VALUES LESS THAN (2012),
PARTITION p_catchall VALUES LESS THAN MAXVALUE );
lire plus ici .