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


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

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

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

4 ответа:

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

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

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

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

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

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

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

источник: MongoDB.

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

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

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

сегментирование - это тип разделения, например Горизонтальная Разметка (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 имела 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 столбцов(табл. 1) и 1 миллион строк и 40 столбцов (табл. 2)

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

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

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