Mysql
 sql >> база данни >  >> RDS >> Mysql

защо разделяме една mysql таблица на много по-малки таблици?

Мисля, че сте объркали няколко термина тук.

Всичките ви данни влизат в една база данни (известна още като схема). В база данни можете да имате таблици.

напр.

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

Вътре в таблиците имате полета (id, name, address) известен още като колони. И таблиците имат един или повече реда.
Пример за служител на таблицата:

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

Толкова за основите.

Защо разделяне
Сега да предположим, че имаме много и много хора (редове) в нашата база данни.
Запомнете това е галактическа база данни, така че имаме 100 милиарда записи.
Ако искаме да търсим толкова бързо хубаво е, ако можем да правим това паралелно.
Така че разделяме таблицата (да речем по държава) и след това можем да имаме x сървъри, търсещи в 1 държава всеки.
Разделянето между сървъри се нарича sharding .

Или можем да разделим напр. исторически данни по години, така че не е нужно да преглеждамевсички данните само за да получите последните Новини. Остава ни само да преминем през раздела за тази година. Това се нарича partitioning .

Каква е голямата разлика между partitioning може просто partitioning ?

Разделяне
В sharding очаквате, чевсичко вашите данни са уместни и е еднакво вероятно да бъдат запитани. (напр. google може да очаква всичките им данни да бъдат запитани; архивирането на част от данните им е безполезно за тях).
В този случай искате много машини да разглеждат данните ви паралелно, където всяка машина извършва част от работа.
Така вие давате на всяка машина различен дял (шард) от данните и давате на всички машини една и съща заявка. Когато излязат резултатите, вие UNION всички заедно и извеждат резултата.

Основно разделяне
При основното partitioning част от вашите данни са hot и частта е not . Типичен случай са исторически данни, новите данни са hot , старите данни почти не се докосват.
За този случай на употреба е безсмислено да поставяте старите данни в отделни сървъри. Тези машини просто ще чакат и ще чакат и не правят нищо, защото никой не се интересува от старите данни, освен някои одитори, които ги преглеждат веднъж годишно.
Така че вие ​​разделяте тези данни по години и сървърът автоматично ще архивира старите дялове, така че заявките ще разглеждат само една (може би 2) години данни и ще бъдат много по-бързи.

Имам ли нужда от разделяне?
Разделяте само когато имате много и много данни, защото това усложнява настройката ви.
Освен ако нямате повече от милион записа, не е нужно да обмисляте разделяне.
Ако имате повече от 100 милиона записи, определено трябва да го помислите.

За повече информация вижте:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
и:http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Вижте също wiki:http://en.wikipedia.org/wiki /Partition_%28database%29

Това са само моите лични евристики YMMV.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Създайте индекс с помощта на Cypher

  2. XAMPP/MySQL:не можа да се отвори файл с пространство за таблици с една таблица .\mysql\innodb_index_stats.ibd след рестартиране на MySQL

  3. Съхранение на шведски знаци в базата данни на mysql

  4. Съхранение на бизнес логика в базата данни

  5. Използване на Mysqli bind_param с колони за дата и час?