Стратегия для решения проблемы с идентификацией базы данных / максимизацией автонумерации - PullRequest
2 голосов
/ 16 апреля 2009

Поля автонумерации (например, «идентификатор» в SQL Server) являются распространенным методом предоставления уникального ключа для таблицы базы данных. Однако, учитывая, что они довольно распространены, в какой-то момент в будущем мы будем иметь дело с проблемой, когда они начнут достигать своего максимального значения.

Кто-нибудь знает или рекомендует рекомендуемую стратегию, чтобы избежать этого сценария? Я ожидаю, что во многих ответах будет предложено переключиться на руководства, но, учитывая, что это потребует большого объема разработки (особенно если многие системы интегрированы и имеют общую ценность), есть ли другой путь? Двигаемся ли мы в направлении, когда более новые аппаратные средства / операционные системы / базы данных будут просто разрешать большие и большие значения для целых чисел?

Ответы [ 5 ]

11 голосов
/ 16 апреля 2009

Если вы действительно ожидаете, что ваши идентификаторы закончатся, используйте bigint. Для большинства практических целей он никогда не закончится, и если это произойдет, вы, вероятно, должны использовать uniqueidentifier.

Если у вас есть 3 миллиарда (что означает транзакцию / цикл на 3,0 ГГц процессоре) транзакций в секунду, для завершения bigint потребуется около века (даже если немного за знак).

Сказав это однажды, " 640K должно быть достаточно для всех . ":)

2 голосов
/ 16 апреля 2009

См. Эти связанные вопросы:

Принятые / получившие наибольшее количество голосов ответы покрывают его.

0 голосов
/ 16 апреля 2009

Если вы получаете такие большие объемы данных, что ваши идентификаторы максимально исчерпаны, вам также может понадобиться поддержка репликации, чтобы вы могли иметь несколько каким-либо образом синхронизированных экземпляров вашей базы данных.

Для таких случаев, а также для случаев, когда вы хотите избежать «угадываемых» идентификаторов (веб-приложений и т. Д.), Я бы предложил использовать Guids (уникальные идентификаторы) со стандартным новым Guid в качестве замены для столбцов идентификации. 1003 *

Поскольку направляющие уникальны, они позволяют правильно синхронизировать данные, даже если записи были одновременно добавлены в систему.

0 голосов
/ 16 апреля 2009

Столбцы идентификаторов обычно устанавливаются на 1 и увеличиваются на +1. Отрицательные значения так же действительны, как и положительные, что удваивает пул доступных идентификаторов.

0 голосов
/ 16 апреля 2009

Есть ли возможность циклически переключаться между номерами, которые были удалены из базы данных? Или большинство записей еще живы? Просто мысль.

Другой моей идеей было предложение Мердада перейти на bigint

...