Я думаю, что у вас здесь есть несколько терминов.
Все ваши данные попадают в одну базу данных (она же схема).В базе данных вы можете иметь таблицы.
например,
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
.
В чем большая разница между sharding
может просто partitioning
?
Sharding
Insharding
вы ожидаете, что все ваши данные актуальны и одинаково вероятны для запроса.(например, 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
См. также вики: http://en.wikipedia.org/wiki/Partition_%28database%29
*) Это всего лишь моя личная эвристика YMMV.