Последовательности#

Последовательности это перзистентные объекты в БД IDM. Они функционально аналогичны автоматически инкрементирующимся колонкам. Последовательности можно использовать для надежного и эффективного назначения уникальных идентификаторов большому количеству объектов IDM. Последовательности можно использовать для автоматического назначения UID и GID UNIX, перзистентных идентификаторов пользователей и т.д.

Последовательность — очень простой объект:

<sequence>
    <name>Unix UID numbers</name>
    <counter>1001</counter>
    <maxUnusedValues>10</maxUnusedValues>
</sequence>

Последовательность помнит только один важный параметр — счетчик (<counter>). Значение счетчика назначается объекту, затем инкрементируется.

Переиспользование значений счетчика#

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

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

Чтобы отключить такое переиспользование, установите значение параметра <maxUnusedValues> последовательности в 0.

Ограничения последовательностей#

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