2012-06-06 3 views
1

Я разрабатываю веб-приложение в кластерной среде. Проблема в том, что нам нужно создать идентификатор для каждого создаваемого объекта. Мы находимся в среде с несколькими узлами базы данных, которые все потоки друг с другом. Идея, что у меня была, была последовательность со смещением. Таким образом, у одного сайта будут идентификаторы, заканчивающиеся на 1, следующие 2 и так далее. Это кажется громоздким решением, потому что вы ограничены рядом сред. Каков наилучший способ гарантировать уникальный сгенерированный первичный ключ, когда вы находитесь в среде с нарушенной базой данных?Генерация идентификатора базы данных в кластерной среде

ответ

0

Лично я бы предпочел последовательность со смещением. Да, вы ограничены определенным количеством сред, но, на самом деле, вы можете, как правило, устанавливать вещи с самого начала, чтобы количество доступных сред было намного больше, чем вам действительно нужно. Если вы делаете что-то вроде

На сайте 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, чтобы сгенерировать глобально уникальный идентификатор и использовать его для ваших основных ключей. Это не так эффективно, как использование последовательности, и для этого потребуется больше места, но это позволяет вам иметь произвольное количество машин.

Смежные вопросы