Почему не разделять?

Когда НЕ хотите разбивать базу данных? (мышление Разделение MySQL )

В моем случае

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

Даже для последней точки, не работает ли поиск параллельно, поэтому во всех случаях, это победа ? Каковы недостатки в разделении? Почему это не то, что EVERYONE использует по умолчанию, по крайней мере, когда вы смотрите миллион + записи?

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

10 голосов | спросил chell 18 J000000Saturday15 2015, 00:32:29

3 ответа


5

Для проблем с производительностью нет серебряной пули, и разделение тоже не одно.

Каждый раздел по существу является таблицей для себя. Следовательно, запросы, написанные таким образом, чтобы база данных могла искать строки только в одном разделе, стала быстрее. Разница может быть огромной для запросов, которые должны были бы сканировать всю большую таблицу, но могут ограничиться сканированием только одного раздела в многораздельной таблице. Для уникальных ключевых поисков разница намного меньше.

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

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

ответил zgguy 18 J000000Saturday15 2015, 10:02:36
2

Ответ здесь хорошо написан и делает аргументы похожими на zgguy'а , что разделение не покупает вас много, если таковые имеются, приносит пользу сценарию с одним компьютером, где наиболее часто встречающиеся запросы основываются на первичном ключе или что-то подобное (поскольку индексированные запросы должны быть такими же быстрыми).

На самом деле, общий совет состоит в том, что основная причина раздела тангенциальна и в основном связана с управлением: например, разделяйте свои данные на основе даты, если вам нужно так часто очищать старые записи. Хотя было отмечено, что это также может принести пользу вашей производительности поиска, если ваши данные таковы, что большинство запросов будут удалять только недавно добавленные записи.

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

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

ответил chell 29 J000000Wednesday15 2015, 06:13:17
1

В первую очередь приходит в голову разделение разделов ; если это не то, что могут использовать ваши запросы.

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

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

ответил mysql_user 18 J000000Saturday15 2015, 08:04:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132