Мы рассматриваем использование значений UUID в качестве первичных ключей для нашей базы данных MySQL. Вставляемые данные генерируются из десятков, сотен или даже тысяч удаленных компьютеров и вставляются со скоростью 100-40 000 вставок в секунду, и мы никогда не будем делать никаких обновлений.Производительность UUID в MySQL?
Сама база данных, как правило, доходит до 50M записей, прежде чем мы начнем отбирать данные, а не массивную базу данных, но не очень маленькую. Мы также планируем работать на InnoDB, хотя мы открыты для изменения, если есть лучший механизм для того, что мы делаем.
Мы были готовы пойти с UUID типа Java типа 4, но в тестировании наблюдалось странное поведение. Во-первых, мы храним как varchar (36), и теперь я понимаю, что нам будет лучше использовать двоичный файл (16) - хотя насколько лучше я не уверен.
Вопрос в том, насколько сильно эти случайные данные завинчивают индекс, когда у нас есть записи 50M? Было бы лучше, если бы мы использовали, например, UUID типа 1, где самые левые биты были временными? Или, может быть, мы должны полностью удалить UUID и рассмотреть первичные ключи auto_increment?
Я ищу общие мысли/советы по работе с различными типами UUID, когда они хранятся в качестве индекса/первичного ключа в MySQL. Благодаря!
отсутствует одна важная деталь: являются ли первичные ключи генерируемыми сервером регистрации или самими клиентскими машинами? – hop
@hop они генерируются 10-1000 клиентами, которые вставляют данные –
. Где вам нужна универсальная уникальность в вашем сценарии? Мой совет - придерживаться auto_increment и использовать отдельное поле для описания удаленного компьютера, который отправляет данные. Не нужно изобретать велосипед здесь. –