#mysql #primary-key #auto-increment
#mysql #первичный ключ #автоматическое увеличение
Вопрос:
Веб-приложение, которое я настраиваю, должно быть масштабируемым по горизонтали, и для него с самого начала потребуется пара серверов MySQL (возможно, их количество увеличится до нескольких вскоре после запуска). Поскольку первичный ключ с автоматическим увеличением не подходит, мне было интересно, какие альтернативы используют люди.
Что-то с датой в имеет наибольший смысл, но если вы опуститесь до уровня миллисекунд и примете трехзначный идентификатор сервера, это будет очень большое число:
sssyymmddhhmmssmicros
или 001110510143622123456
прямо сейчас — плюс, возможно, вы могли бы использовать другое число в начале, чтобы упростить начальные нули (возможно, идентификатор центра обработки данных).
Время эпохи сокращает его, но лишь немного.
Что еще есть?
Ответ №1:
Я думаю, что вы ищете UUID (универсальный уникальный идентификатор). В MySQL вы можете сгенерировать UUID с помощью функции uuid().
SELECT uuid();
UUID выглядит следующим образом 8cb1764a-7b0d-11e0-aaa7-00270e0f8070 … Я знаю! это очень долго, но это работает.
Комментарии:
1. Что ж, это дало мне пищу для размышлений! Это больше, чем мое решение, и я немного беспокоюсь о снижении производительности, которое это вызовет при больших объединениях (но тогда я все равно не должен использовать большие объединения). Спасибо.
Ответ №2:
Я думаю, что вы ищете GTID. Они уникальны и работают с репликацией с несколькими мастерами в MySQL. ссылка для получения более подробной информации!
Ответ №3:
Краткий ответ: вам не нужна репликация с несколькими мастерами и, вероятно, не mysql (взгляните на cassandra). Но да, вам понадобятся последовательности, которые включают идентификатор master. Вы можете эмулировать последовательности, используя отдельную таблицу. Посмотрите, как PEAR эмулирует их, например.
Комментарии:
1. Я рассмотрю некоторые альтернативы, но подозреваю, что не буду их использовать (отчасти под давлением извне, а отчасти потому, что я еще не совсем уверен, что доверяю им). Я также немного боюсь использовать таблицу для последовательностей, потому что она обеспечивает единую точку отказа. Тем не менее, спасибо за ваш ответ.
2. Тогда вам следует использовать базу данных, которая предоставляет последовательности изначально. Использование uuid() эффективно использует последовательность, за исключением того, что они не являются последовательными. Если вам просто нужен уникальный идентификатор, и не важно, что они являются инкрементными, то uuid — это короткий ответ.