Гарантированно ли монотонно увеличивается идентификатор объекта Rails ActiveRecord? - PullRequest
2 голосов
/ 18 августа 2011

Я бы хотел иметь возможность возвращать объекты в порядке их создания.Очевидно, что я мог бы использовать поле create_at для этого, но это не сработает в моих тестовых сценариях, где я отключил Time.zone.now, чтобы всегда возвращать одно и то же время.

Гарантирует ли AR, что следующий идентификатор будетвсегда будет больше, чем последний объект, или есть вероятность, что он будет использовать удаленные идентификаторы.Я почти уверен, что базы данных предлагают оба типа функциональности, но что Rails выбирает по умолчанию?

EDIT:

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

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Active Record выполняет INSERT без указания идентификатора, а затем извлекает идентификатор, с которым он был создан, поэтому я предполагаю, что это специфический параметр базы данных.

3 голосов
/ 18 августа 2011

Нет гарантии, что идентификаторы будут соответствовать порядку вставки, но вы, как правило, в безопасности.

Например: если у вас действительно большая база данных, в которой скопилось много дыр из-за удаленных элементовВы можете сжать его и сбросить базовые последовательности (или то, что ваша база данных использует для генерации идентификаторов), чтобы восстановить некоторые неиспользуемые значения.Rails просто использует реализацию базы данных, но ваш администратор БД (или вы с его шляпой) не так ограничен.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...