При использовании стратегии генерации идентификаторов HiLo, какие типы должны использоваться для хранения идентификаторов?

Я спрашиваю об этом с точки зрения aC#/NHibnernate, но в целом это применимо. Проблема заключается в том, что стратегия HiLo работает, хотя идентификаторы работают довольно быстро, и, например, таблица с небольшим количеством записей (например, "Пользователи") делится из того же набора идентификаторов, что и таблица с большим количеством записей (например, комментарии). Таким образом, вы можете получить большие цифры быстрее, чем с другими стратегиями. Так что люди рекомендуют?

Сторона кода: int / uint / long / ulong?

DBSide: int / bigint?

Я чувствую, что нужно идти с длинными и бигингтами, но хотел бы проверить здравомыслие:)

2 ответа

Решение

Дополняя ответ Диего..

Вы можете установить table Параметр на каждом генераторе, но IMO приводит к ненужному количеству таблиц только для хранения идентификаторов.

Я бы, вероятно, рекомендовал использовать одну строку для каждой сущности (в той же таблице). С дополнительными параметрами вы можете настроить алгоритм HiLo, и он будет блокировать только необходимую строку. У вас есть отличные семена для каждой сущности. В FluentNH это было бы что-то похожее на:

        Id(x => x.Id, "Id")
            .GeneratedBy.HiLo("IdsTable", "id", "20", 
                p => p.AddParam("where", "table = 'mappedent'"));

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

Надеюсь это поможет!

С Уважением,

Филипе

Вы, вероятно, в безопасности с долго.

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

Другие вопросы по тегам