2009-04-16 2 views
2

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

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

ответ

11

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

Если у вас есть (это означает, что транзакции/цикл на процессоре 3.0GHz) транзакций в секунду, это займет около столетия для bigint выбежать (даже если вы отложили немного для знак).

Это сказал однажды, «640K ought to be enough for anybody.» :)

+2

+1 для цитаты из 640k –

+1

На самом деле это не такая же проблема. 640K было вычислительным ограничением, и это логическое ограничение в реальном мире. Очевидно, что в то время было около 640 тыс. Данных. –

+0

Почему бы не руководствоваться? 64 бит может быть следующим 640K ... – Paco

0

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

Моя другая идея была предложение Мердад о переходе на BigInt

0

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

+0

Да, и если вы используете bigint, это даст вам еще 30 миллионов лет :) –

+0

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

0

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

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

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