Генерация суррогатных ключей удаленно - PullRequest
1 голос
/ 27 ноября 2009

Заранее извините, поскольку этот вопрос похож (но не совпадает!) С другими.

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

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

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

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

2-000000567, 2-000000567, ...

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

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

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

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

1 Ответ

1 голос
/ 27 ноября 2009

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

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

...