Re[8]: SequenceHiLo
От: Sharov Россия  
Дата: 20.03.23 10:06
Оценка:
Здравствуйте, RushDevion, Вы писали:


RD>Нет, не пересекутся. Смотри.

RD>
RD> CREATE SEQUENCE [dbo].[MySequence] START WITH 1 INCREMENT BY 10;

RD> SELECT NEXT VALUE FOR [dbo].[MySequence]; -- (1) возвращается 1

RD> SELECT NEXT VALUE FOR [dbo].[MySequence]; -- (2) возвращается 11
RD>

RD>Получение NEXT VALUE синхронизованы на уровне движка БД, т.е. там что-то типа такого:
RD>
RD>lock(syncLock) {
RD>  var old = current
RD>  current += 10;
RD>  return old;
RD>}
RD>

RD>В (1) мы получили значение 1. И мы знаем, что шаг sequence = 10.
RD>Это значит, что значения 1,2,3...10 можно спокойно использовать в качестве идентификаторов, т.к. следующий кто вызовет sequence получит уже 11.
RD>Аналогично после шага (2) можно использовать 11,12...20 и т.д.

Ага, ясно, благодарю. Собственно, я на хабре нашел статью, где обсуждался этот механизм, и там соотв. таблица
(sequence) генерится EF на уровне бд. Соотв. вопрос -- значит при создании контекста бд\сессии он, вновь
созданный контекст, будет неявно ходить в бд для получения нужной последовательности? Иначе как мы узнаем hilo?


S>> Если короче-- каковы сценарии hilo?

RD>Плюс, например, в логи можно писать ID-сущностей, не делая каждый раз SaveChanges.

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

RD>Или иногда бывает нужна сквозная идентификация всех объектов в БД и поэтому отдельный IDENTITY на каждой таблицы не подходит.


А что это такое? Типа общий, уникальный id для всех объектов в бд?
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.