Шардинг базы данных против секционирования

недавно я читал о масштабируемых архитектурах. В этом контексте два слова, которые продолжают показывать базы данных wrt, -sharding и перегородки. Я искал описания в поисковых системах, Википедии и stackoverflow, но все равно запутался.

могли бы эксперты в stackoverflow помочь мне получить основы правильно?

  • в чем разница между sharding и перегородки ?
  • это правда, что 'все разделенные базы данных по существу секционированы (на разных узлах), но все разделенные базы данных не обязательно разделены' ?

4 ответов


секционирование-это более общий термин для разделения данных между таблицами или базами данных. Sharding-это один из конкретных типов секционирования, а именно горизонтальное секционирование.

Смотрите также здесь:http://www.quora.com/Whats-the-difference-between-sharding-and-partition


похоже, это отвечает на оба ваших вопроса:

горизонтальная разметка разделяет одну или несколько таблиц по строкам, обычно в пределах одного экземпляра схемы и сервера базы данных. Это может предложите преимущество путем уменьшение размера индекса (и таким образом усилия поиска) при условии, что существует какой-то очевидный, надежный, неявный способ идентификации в какой таблице будет найдена определенная строка без необходимости для поиска индекса, например, классический пример "CustomersEast" и CustomersWest столы, где их индекс уже показывает где их найдут.

Sharding выходит за рамки этого: он разбивает проблемные таблицы в таким же образом, но он делает это по несколько экземпляров схемы. Очевидным преимуществом было бы то, что поисковая нагрузка для большая секционированная таблица теперь может быть разделена на несколько серверов (логический или физический), а не только несколько индексов на одном и том же логическом сервер.

источник:Wiki-Shard.

Sharding-это процесс хранения записей данных по нескольким машины и подход MongoDB к удовлетворению требований данных рост. По мере увеличения размера данных одна машина может не быть достаточный для хранения данных или обеспечения приемлемого чтения и записи пропускная способность. Sharding решает проблему с горизонтальным масштабированием. С sharding, вы добавляете больше машин для поддержки данных рост и потребности операций чтения и записи.

источник: в MongoDB.


Я также погружался в это, и хотя я на сегодняшний день ссылка на этот вопрос, есть несколько ключевых фактов, которые я собрал, и моменты, которые я хотел бы поделиться:

A раздел - это разделение логической базы данных или ее составных элементов на отдельные независимые части. База данных перегородки нормально сделано для причин управляемости, представления или наличия, как для нагрузки балансировка.

https://en.wikipedia.org/wiki/Partition_ (база данных)

Sharding - это тип секционирования, например Горизонтальная Разметка (HP)

есть еще Вертикальное Секционирование (VP) при котором вы разделяете таблицу на более мелкие отдельные части. Нормализация также включает это разделение столбцов по таблицам, но вертикальное разделение выходит за рамки этого и разбивает столбцы, даже если уже нормализовался.

https://en.wikipedia.org/wiki/Shard_ (database_architecture)

Мне очень нравится ответ Тони Бако на Quora, где он заставляет вас думать в терминах схемы (а не столбцов и строк). Он утверждает это...

"горизонтальная разметка", или sharding, реплицирует [копирование] схемы, а затем делит данные на основе ключа shard.

"вертикальное секционирование" включает разделение схемы (и данные идут вместе для поездки).

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

руководство по Секционированию базы данных Oracle имеет некоторые хорошие цифры. Я скопировал несколько отрывков из статьи.

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

когда разбить a Таблица

вот некоторые предложения о том, когда разбивать таблицу:

  • таблицы, превышающие 2 ГБ, всегда должны рассматриваться как кандидаты для разделения.
  • таблицы, содержащие исторические данные, в которых новые данные добавляются в новейший раздел. Типичным примером является историческая таблица, где только данные текущего месяца можно обновить, а остальные 11 месяцев только для чтения.
  • когда содержание таблицы должно быть распределены между различными типами запоминающих устройств.

Обрезка Раздела

обрезка разделов является самым простым, а также наиболее существенным средством повышения производительности с помощью секционирования. Обрезка разделов часто может повысить производительность запросов на несколько порядков. Например, предположим, что приложение содержит таблицу Orders, содержащую историческую запись заказов, и что эта таблица была секционирована по неделям. Вопрос запрос заказов в течение одной недели будет иметь доступ только к одной секции таблицы заказов. Если таблица Orders имеет 2 года исторических данных, то этот запрос будет обращаться к одной секции вместо 104 секций. Этот запрос потенциально может выполняться в 100 раз быстрее просто из-за обрезки разделов.

Стратегии Секционирования

  • ряд
  • хэш
  • список

вы можете прочитать их текст и визуализируйте их образы, которые объясняют все довольно хорошо.

и, наконец, важно понимать, что базы данных чрезвычайно ресурсоемки:

  • CPU
  • диск
  • I / O

многие DBA будут разделяться на одной машине, где разделы будут делиться всеми ресурсами, но обеспечивают улучшение диска и ввода-вывода путем разделения данных и / или индекс.

в то время как другие стратегии будут использовать архитектуру "общего ничего", где осколки будут находиться на отдельных и отдельных вычислительных единицах (узлах), имеющих 100% процессора, диска, ввода-вывода и памяти для себя. Предоставление собственного набора преимуществ и сложностей.

https://en.wikipedia.org/wiki/Shared_nothing_architecture


Рассмотрим таблицу в базе данных с 1 млн. строк и 100 столбцов В перегородки вы можете разделить таблицу на 2 или более таблиц, имеющих свойство, как:

  1. 0,4 миллиона строк(табл. 1), 0,6 миллиона строк (табл. 2)

  2. 1 миллион строк и 60 столбцов (table1) и 1 миллион строк и 40 столбцов(table2)

    может быть несколько таких случаев

Это общие разделение

но Sharding обратитесь к 1-му случаю, только когда мы разделяем данные на основе строк. Если мы разделяем таблицу на несколько таблиц, нам нужно поддерживать несколько похожих копий схем, как теперь у нас есть несколько таблиц.