To jest stara wersja strony!


Partycjonowanie dużych zbiorów danych

Czym jest partycjonowanie?

Partycjonowanie polega na fizycznym podzieleniu tabel w bazie danych na osobne pliki. Mechanizm ten jest zupełnie transparentny dla użytkownika. Oznacza to, że na tabeli można wykonywać dokładnie te same operacje co na zwykłej tabli, uwzględniając transakcje.

Dzięki partycjonowaniu można znacznie przyspieszyć operacje na bardzo dużych tabelach.

Kiedy używać partycjonowania?

  • Kiedy chcemy przyspieszyć pojedyncze operacje INSERT i SELECT
  • Kiedy chcemy przyspieszyć operacje SELECT operujące na zakresach (np. od - do)
  • Kiedy chcemy fizycznie podzielić tabelę między różne partycje lub dyski twarde
  • Kiedy chcemy wydajnie przechowywać dane historyczne

Partycjonowanie w MySQL

Mechanizm partycjonowania dostępny jest w MySQL od wersji 5.1

Zagadnienia techniczne

Partycje można tworzyć poleceniem

CREATE TABLE

lub

ALTER TABLE


Składnia:

CREATE TABLE <tableName> (<columns>)
ENGINE=<engineName>
PARTITION BY <type> ( <partitionExpression> );

<type> może być: RANGE, LIST, HASH or KEY

Przykład RANGE:

CREATE TABLE employee (
  employee_id INTEGER AUTO_INCREMENT,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  store_id TINYINT,
  PRIMARY KEY (employee_id )
) ENGINE=MyISAM
PARTITION BY RANGE (employee_id) (
PARTITION p0 VALUES LESS THAN (10000),
PARTITION p1 VALUES LESS THAN (20000),
PARTITION p2 VALUES LESS THAN (30000),
PARTITION p3 VALUES LESS THAN (40000),
PARTITION p4 VALUES LESS THAN MAXVALUE)

Parametr MAXVALUE jest opcjonalny.

Zakresy wartości muszą być podane w kolejności rosnącej.

Przykład LIST:

CREATE TABLE employee (
  employee_id INT,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  store_id TINYINT
) ENGINE=MyISAM
PARTITION BY LIST (store_id) (
PARTITION pNorth VALUES IN (2,8,12),
PARTITION pEast VALUES IN (1,4,7),
PARTITION pWest VALUES IN (3,5,6,10),
PARTITION pSouth VALUES IN (9,11)
)

Jeśli klucz podstawowy istnieje, musi zawierać wszystkie kolumny z wyrażenia PARTITION.

Przykład HASH:

CREATE TABLE employee (
employee_id INT AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
store_id TINYINT,
PRIMARY KEY (employee_id)
) ENGINE=MyISAM
PARTITION BY HASH (employee_id)
PARTITIONS 4;

Uwagi:

  • Wyrażenie w funkcji HASH musi zwracać typ INTEGER

Metody partycjonowania

Przykłady poprawnego podejścia do partycjonowania danych

Testy wydajnościowe na dużych zbiorach danych

Partycjonowanie w PostreSQL - lekko nieintuicyjnie...

Zaawansowane możliwości partycjonowania

Sub-partitioning

Zalety i wady partycjonowania

Zalety

Wady

pl/dydaktyka/ztb/2010/projekty/partycjonowanie/start.1275335644.txt.gz · ostatnio zmienione: 2019/06/27 15:56 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0