我从 ac#/NHibnernate 的角度问这个问题,但它通常适用。令人担忧的是,HiLo 策略会很快通过 id,例如,低记录数表(例如用户)与高记录数表(例如评论)共享同一组 id。因此,您可以使用其他策略更快地获得高数字。那么人们推荐什么呢?
代码端:int/uint/long/ulong?
DBSide:int/bigint?
我的感觉是长期和bigingts,但想要一个健全的检查:)
我从 ac#/NHibnernate 的角度问这个问题,但它通常适用。令人担忧的是,HiLo 策略会很快通过 id,例如,低记录数表(例如用户)与高记录数表(例如评论)共享同一组 id。因此,您可以使用其他策略更快地获得高数字。那么人们推荐什么呢?
代码端:int/uint/long/ulong?
DBSide:int/bigint?
我的感觉是长期和bigingts,但想要一个健全的检查:)
补充迭戈的答案..
您可以table
在每个生成器上设置参数,但 IMO 会导致不必要的表数量仅用于保存 ID。
我可能会建议每个实体使用一行(在同一个表中)。使用可选参数,您可以配置 HiLo 算法,它只会锁定必要的线路。每个实体都有不同的种子。在 FluentNH 中,它类似于:
Id(x => x.Id, "Id")
.GeneratedBy.HiLo("IdsTable", "id", "20",
p => p.AddParam("where", "table = 'mappedent'"));
尽管如此,您也可以避免where
额外的参数,只需设置一个不同的列(即使在 DB 中也可以让您拥有不同的 ID 类型)。但是,如果您有大量实体(由于 DBs 列 nr 限制),它会打扰您。还要记住,每个请求 ID 范围的实体都会锁定所有其他实体,这在某些情况下会导致您陷入死锁。
希望这可以帮助!
问候,
菲利普
你可能很安全。
无论如何,您不必为所有实体使用同一个表。您可以将table
每个生成器上的参数设置为不同的值。