2013-06-24 7 views
1

Мои данные будут распределены между 50 базами данных с одинаковой схемой, скажем, только одна таблица ORDER (одна БД для каждого из 50 клиентов), но каждая запись должна быть глобально идентифицируемой , Я планирую использовать числовой UID как ПК.mySQL Кластерный индекс: как пробелы в значениях идентификатора влияют на производительность запросов

Я понимаю, что mySQL создаст кластерный индекс для этого ПК.

Данные всегда будут вставлены в монотонно возрастающий порядок UID.

Вопрос о производительности запроса. У меня есть два варианта при принятии решения о создании uids. Какой из них будет лучше для производительности запросов (в рамках данной БД), или это не имеет значения?

1) Для каждого клиента/базы данных я назначаю фиксированный жесткий диапазон, который определенно будет достаточным для всех будущих записей: я выбираю действительно огромный цифровой диапазон в масштабе 10^15 и в диапазоне I начинайте увеличивать на единицу так, чтобы все значения UID для этого конкретного БД были большими, но между ними не должно быть «отверстий»

2) Я использую генератор HiLo с глобальным распределением для записей во всех базах данных, что означает для данного DB записи будут иметь меньшее значение (по сравнению с 10^15 шкалой в # 1), но будет больше «дыр» между последовательными записями UID (точнее, между партиями UID: то есть, если размер партии равен 100 будут UID: 100, 101, 102, ... 199, а затем 1400,1 401, 1402..1499, а затем, возможно, 16000, 16001, .. 16099)

+0

Планируете ли вы разместить эти 50 баз данных на 50 серверах? Является ли эта проблема проблемой производительности, или это единственное средство для seaparate данных (для соображений неприкосновенности частной жизни)? – RandomSeed

+0

Да, из-за соображений неприкосновенности они должны быть отдельными серверами – rstepanenko

ответ

0

Простейшим решением будет добавление столбца instance_id ко всем таблицам, предопределенным для каждой базы данных, и использование стандартного механизма auto_increment. Фактическим уникальным идентификатором для записи был бы кортеж (instance_id, autinc_val).

+0

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