我是从c#/ NHibnernate的角度问这个问题,但它通常适用。令人担忧的是,HiLo策略非常快,但是例如低记录计数表(例如用户)从同一组id共享作为高记录计数表(例如注释)。因此,通过其他策略,您可以更快地获得更高的数字。那么人们推荐什么呢?
代码方: INT / UINT /长/ ULONG?
DBSide: INT / BIGINT?
我的感觉是长篇大论,但想要进行理智检查:)
答案 0 :(得分:5)
补充迭戈的回答..
您可以在每个生成器上设置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范围的每个实体都会锁定所有其他实体,在某些情况下会导致您陷入僵局。
希望这有帮助!
此致
菲利普
答案 1 :(得分:2)
你可能很安全。
无论如何,你没有拥有为所有实体使用相同的表。您可以将每个生成器上的table
参数设置为不同的值。