Мисля, че сте объркали няколко термина тук.
Всичките ви данни влизат в една база данни (известна още като схема). В база данни можете да имате таблици.
напр.
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.