Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

por que dividimos uma tabela mysql em muitas tabelas menores?


Acho que você confundiu alguns termos aqui.

Todos os seus dados vão para um banco de dados (também conhecido como esquema). Em um banco de dados você pode ter tabelas.

por exemplo.
table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

Dentro das tabelas você tem os campos (id, name, address) aka colunas.E as tabelas têm uma ou mais linhas.
Um exemplo para o funcionário da tabela:
id  name        address           country
----------------------------------------------------
1   John        1 Regent Street   UK
2   James       24 Jump Street    China
3   Darth Vader 1 Death Star      Bestine, Tatooine

Tanto para o básico.

Por que particionar
Agora suponha que temos muitas e muitas pessoas (linhas) em nosso banco de dados.
Lembre-se disso, um banco de dados galáctico, então temos 100 bilhões de registros.
Se quisermos pesquisar tão rápido é bom se pudermos fazer isso em paralelo.
Então particionamos a tabela (digamos, por país) e podemos ter x servidores procurando em 1 país cada.
Particionar entre servidores é chamado de sharding .

Ou podemos particionar, por exemplo. dados históricos por ano, para que não precisemos passar por todos os dados apenas para obter os dados recente notícia. Nós só temos que passar pela partição para este ano. Isso é chamado de partitioning .

Qual ​​é a grande diferença entre sharding pode apenas partitioning ?

Fragmentação
Em sharding você prevê que todos seus dados são relevantes e têm a mesma probabilidade de serem consultados. (por exemplo, o google pode esperar que todos os seus dados sejam consultados; arquivar parte de seus dados é inútil para eles).
Neste caso, você deseja que muitas máquinas examinem seus dados em paralelo, onde cada máquina faz parte do work.
Então você dá a cada máquina uma partição diferente (shard) dos dados e dá a todas as máquinas a mesma consulta. Quando os resultados saírem, você UNION todos juntos e produza o resultado.

Particionamento básico
No partitioning básico parte de seus dados está hot e parte é not . Um caso típico são dados históricos, os novos dados são hot , os dados antigos dificilmente são tocados.
Para este caso de uso é inútil colocar os dados antigos em servidores separados. Essas máquinas vão esperar e esperar e não fazer nada porque ninguém se importa com os dados antigos, exceto alguns auditores que os examinam uma vez por ano.
Então você particiona esses dados por ano e o servidor arquivará automaticamente as partições antigas para que seu as consultas analisarão apenas um (talvez 2) anos de dados e serão muito mais rápidas.

Preciso de particionamento?
Você só faz particionamento quando tem muitos e muitos dados, porque isso complica sua configuração.
A menos que você tenha mais de um milhão de registros, você não precisa considerar o particionamento.
Se você tem mais de 100 milhões de registros, você definitivamente deve considerar isso.

Para obter mais informações, consulte: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
Veja também wiki:http://en.wikipedia.org/wiki /Partition_%28database%29

Estas são apenas minhas heurísticas pessoais YMMV.