web-dev-qa-db-fra.com

Qu'est-ce que le partitionnement MYSQL?

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é.

  1. Est-il principalement utilisé pour plusieurs serveurs afin de ne pas traîner un serveur?
  2. Ainsi, une partie des données sera sur serveur1 et une partie des données sera sur serveur2. Et le serveur 3 va "pointer" vers server1 ou server2 ... est-ce ainsi que cela fonctionne?
  3. Pourquoi la documentation MYSQL se concentre-t-elle sur le partitionnement au sein du même serveur ... si le but est de le répartir sur plusieurs serveurs?
56
TIMEX

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:

  1. Supprimer les anciennes données par simple:

    ALTER TABLE employees DROP PARTITION p0;
    
  2. 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.

150
Szymon Lipiński

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