Я также углубился в это, и хотя я, безусловно, являюсь ссылкой на этот вопрос, есть несколько ключевых фактов, которые я собрал, и моменты, которыми я хотел бы поделиться:
Раздел является разделением логической базы данных или ее составных элементов в различные независимые части. Разбиение базы данных обычно выполняется по причинам управляемости, производительности или доступности, например, для балансировки нагрузки.
https://en.wikipedia.org/wiki/Partition_(database)
Sharding - это тип разделения, например, горизонтальное разделение (HP)
Существует также Вертикальное разбиение (VP), посредством которого вы разбиваете таблицу на более мелкие отдельные части. Нормализация также включает в себя это разделение столбцов по таблицам, но вертикальное разделение выходит за рамки этого и разделяет столбцы, даже если они уже нормализованы.
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Мне очень нравится ответ Тони Бако о Quora, где он заставляет вас думать с точки зрения схемы (а не столбцов и строк). Он утверждает, что ...
« Горизонтальное разделение », или сегментирование, - это копирование [копирование] схемы, а затем разделение данных на основе ключа сегмента.
« Вертикальное разделение » включает в себя разделение схемы (и данные идут вместе для поездки).
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
В Oracle Partitioning Guide есть несколько хороших цифр. Я скопировал несколько выдержек из статьи.
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Когда разделить таблицу
Вот несколько советов о том, когда разбивать таблицу:
- Таблицы размером более 2 ГБ всегда должны рассматриваться как кандидаты на разбиение.
- Таблицы, содержащие исторические данные, в которых новые данные добавляются в новейший раздел. Типичным примером является хронологическая таблица, в которой обновляются только данные текущего месяца, а остальные 11 месяцев доступны только для чтения.
- Когда содержимое таблицы должно быть распределено по различным типам устройств хранения.
Обрезка перегородок
Сокращение разделов является самым простым, а также наиболее существенным средством повышения производительности с помощью разделения. Сокращение разделов часто может повысить производительность запросов на несколько порядков. Например, предположим, что приложение содержит таблицу «Заказы», содержащую историю заказов, и что эта таблица была разбита по неделям. Запрос, запрашивающий заказы на одну неделю, будет обращаться только к одному разделу таблицы «Заказы». Если бы в таблице «Заказы» имелись данные за 2 года, то этот запрос получал бы доступ к одному разделу вместо 104. Этот запрос может потенциально выполняться в 100 раз быстрее просто из-за сокращения раздела.
Стратегии разделения
Вы можете прочитать их текст и визуализировать их изображения, которые все объясняют довольно хорошо.
И наконец, важно понимать, что базы данных чрезвычайно ресурсоемки:
- ЦПУ
- диск
- I / O
- объем памяти
Многие администраторы баз данных будут разделяться на одну и ту же машину, где разделы будут совместно использовать все ресурсы, но обеспечат улучшение дискового и ввода-вывода за счет разделения данных и / или индекса.
В то время как другие стратегии будут использовать архитектуру «без разделения ресурсов», где сегменты будут размещаться в отдельных и отдельных вычислительных блоках (узлах), имеющих 100% ЦП, диска, ввода-вывода и памяти. Предоставление собственного набора преимуществ и сложностей.
https://en.wikipedia.org/wiki/Shared_nothing_architecture