Генерация номеров заказов - Сохранение уникальности на нескольких машинах - Уникальное начальное число - PullRequest
0 голосов
/ 17 августа 2010

Я пытаюсь создать номер заказа для клиентов.У меня будет несколько машин, у которых нет доступа к одной и той же базе данных (поэтому я не могу использовать первичные ключи и генерировать уникальный идентификатор).

У меня будет уникальная строка, которую я мог бы использовать для начального числа для некоторого алгоритма, который сгенерирует уникальный выглядящий буквенно-цифровой идентификатор # для номера заказа.Я не хочу использовать эту уникальную строку в качестве заказа #, поскольку ее содержимое не подходит для использования клиентом для заказа №.

Возможно ли совместить использование GUID и моегоуникальная строка с некоторым алгоритмом для создания уникального заказа #?Открыты для любых предложений.

Ответы [ 4 ]

1 голос
/ 17 августа 2010

Если у вас относительно небольшое количество машин, и у каждого из них есть собственный файл конфигурации или настройки, вы можете назначить букву каждой машине (A, B, C ...) и затем добавить букву в заказ. число, которое может быть просто автоматически увеличивающимся целым числом в каждой БД.

т.е.

Starting each database ID at 1000:
1001A // First  order on database A
1001B // First  order on database B
1001C // First  order on database C
1002A // Second order on database A
1003A // Third  order on database A
1004A // etc...
1002B
1002C

Ваша таблица заказов в каждой базе данных будет содержать столбец идентификаторов (целое число) и идентификатор «машины» (символы A, B, C ...), поэтому в случае, если вам когда-либо потребуется объединить базы данных в одну, каждый заказ будет уникальный.

0 голосов
/ 17 августа 2010

Вы можете использовать идентификаторы и в качестве первичного ключа, если генерируете их идентификаторы из хранимой процедуры (или, возможно, в Oracle с использованием последовательности).

Что вам нужно сделать, это заставить каждую машину генерировать в другом диапазоне, например станок от 1 до 1 миллиона, станок B от 1000001 до 2000000 и т. д.

0 голосов
/ 17 августа 2010

Вы говорите, что у вас есть уникальная строка, которая не подходит для показа клиентам.

Если это только неуместно и не нужно, то есть связано с безопасностью / конфиденциальностью, вы можете просто каким-то образом изменить его. Простым примером будет Rot13

Но, как правило, я бы тоже предложил использовать UUID (кроме версии 4) для случайных чисел. Вероятность создания дубликатов крайне мала, и есть библиотеки для многих языков программирования.

0 голосов
/ 17 августа 2010

Просто используйте направленный вверх guid / uuid. Они учитывают mac-адрес сетевого интерфейса, чтобы сделать его уникальным для этой машины.

http://en.wikipedia.org/wiki/Uuid

...