Вопрос

Заранее прошу прощения, так как этот вопрос похож (но не такой же!) на другие.

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

Я рассматривал схему, которая позволила бы мне использовать целые числа, обеспечивая лучшую производительность в базе данных, но, очевидно, я не могу просто использовать автоматические числа.Идея состоит в том, чтобы использовать ключ с двумя значениями - стратегию High-Low, как, по-моему, она называется.Ключ будет состоять из источника (где он был сгенерирован, обычно 1 из 2 местоположений в данном бизнес-примере) и автоматически увеличиваемого значения.Например:

1-000000567, 1-000000568, 1-000000569, 1-000000570, ...

И для другого источника:

2-000000567, 2-000000567, ...

Это также означало бы, что я мог бы сохранить их в базе данных в виде целых чисел (т.е. "2-000000567" стало бы целым числом "2000000567").

Кто-нибудь может увидеть какие-либо проблемы с этим?Такие , как индексирование или фрагментации что может произойти?Или, может быть, даже лучший способ сделать это?

Просто чтобы подтвердить, что в этом ключе нет бизнес-смысла, пользователь никогда не увидит его (за исключением, возможно, параметров URL) и не будет им пользоваться.

Я с нетерпением жду вашего мнения и ценю ваше время, миллион благодарностей :)

Это было полезно?

Решение

Это объясняет алгоритм hilo, на который вы ссылаетесь: Что такое алгоритм Hi / Lo?

Это часто используемое решение для "отключения" таких проблем, как ваша.Для , т. е.если вы используете Hibernate / NHibernate, это один из рекомендуемых вариантов первичного ключа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top