Я разрабатываю веб-приложение в кластерной среде. Проблема в том, что нам нужно создать идентификатор для каждого создаваемого объекта. Мы находимся в среде с несколькими узлами базы данных, которые все потоки друг с другом. Идея, что у меня была, была последовательность со смещением. Таким образом, у одного сайта будут идентификаторы, заканчивающиеся на 1, следующие 2 и так далее. Это кажется громоздким решением, потому что вы ограничены рядом сред. Каков наилучший способ гарантировать уникальный сгенерированный первичный ключ, когда вы находитесь в среде с нарушенной базой данных?Генерация идентификатора базы данных в кластерной среде
ответ
Лично я бы предпочел последовательность со смещением. Да, вы ограничены определенным количеством сред, но, на самом деле, вы можете, как правило, устанавливать вещи с самого начала, чтобы количество доступных сред было намного больше, чем вам действительно нужно. Если вы делаете что-то вроде
На сайте 1
CREATE SEQUENCE sequence_name
START WITH 1
INCREMENT BY 1000;
На сайте 2
CREATE SEQUENCE sequence_name
START WITH 2
INCREMENT BY 1000;
и вниз линии, вы можете иметь до 999 сайтов, прежде чем вы должны переработать свои последовательности. Этого более чем достаточно. Если вы думаете, что у вас реально есть 1000 сайтов, вы можете просто установить прирост до 10000 или 100 000. Учитывая количество значений, которые может генерировать последовательность, вы все равно не закончите работу, даже если вы установите значение в миллионы. Реально, вы столкнетесь с проблемами с Streams, занимающимися слишком большим количеством сайтов, задолго до того, как вы столкнетесь с проблемами с последовательностями.
Если вы не хотите идти по этому пути, другим вариантом будет использование SYS_GUID
, чтобы сгенерировать глобально уникальный идентификатор и использовать его для ваших основных ключей. Это не так эффективно, как использование последовательности, и для этого потребуется больше места, но это позволяет вам иметь произвольное количество машин.
- 1. Планировщик в кластерной среде
- 2. AtmosphereFramework в кластерной среде
- 3. Синхронизация в кластерной среде
- 4. Spring Scheduler в кластерной среде
- 5. Проблема одновременной транзакции в кластерной среде
- 6. Spring Singleton в кластерной среде
- 7. Управление активами в кластерной среде
- 8. Обмен данными в кластерной среде
- 9. Переключение сокета в кластерной среде
- 10. объединение пулов в кластерной среде
- 11. rethinkdb nodejs контейнер в кластерной среде
- 12. Создание Quartz Триггеры в кластерной среде
- 13. Информация о доступе к базе данных по кластерной среде
- 14. Где хранятся данные в кластерной среде?
- 15. Как singleton является javax.ejb.Singleton в кластерной среде?
- 16. Jboss AS 7 Infinispan в кластерной среде
- 17. спящий кеш первого уровня в кластерной среде
- 18. как управлять состоянием cfcs в кластерной среде
- 19. Генерация идентификатора уникального числа
- 20. Построение пользовательской последовательности в многопотоковой и кластерной среде
- 21. Проблемы с сериализацией в кластерной среде
- 22. Высокая доступность планируемых агентов в кластерной среде
- 23. Использование кварца с мулом в кластерной среде
- 24. Кварц в кластерной среде без рабочего места
- 25. Spring Scheduled Задача, выполняемая в кластерной среде
- 26. FTP-входящий адаптер в кластерной среде
- 27. Общая java HashMap в кластерной среде
- 28. Минимизация гранул и слияние в кластерной среде
- 29. Может работать кеш Google в кластерной среде
- 30. Как синхронизировать блок обрабатывается в кластерной среде