NHibernate和hilo生成器:如何设计关键表?

NHibernate和hilo生成器:如何设计关键表?,nhibernate,database-design,hilo,Nhibernate,Database Design,Hilo,我要将我的一些实体从identity切换到hilo id generator 我不知道下一个高值的表应该如何设计 我应该为所有实体使用一个表,还是为一组相关实体使用一个表 我应该为每个实体使用另一个表吗 我应该使用一个表,每个实体有另一行或列吗 有什么最佳实践吗?需要考虑什么?这些方法有什么优点或缺点吗?我认为没有一种“最佳”实践,但了解HiLo的工作原理很重要: 表hilo生成器是为不支持序列的数据库设计的,序列更适合此任务 类的Hi值在您第一次保存该类的实例时,或在Lo值用完时检索并更

我要将我的一些实体从identity切换到hilo id generator

我不知道下一个高值的表应该如何设计

  • 我应该为所有实体使用一个表,还是为一组相关实体使用一个表
  • 我应该为每个实体使用另一个表吗
  • 我应该使用一个表,每个实体有另一行或列吗

有什么最佳实践吗?需要考虑什么?这些方法有什么优点或缺点吗?

我认为没有一种“最佳”实践,但了解HiLo的工作原理很重要:

  • 表hilo生成器是为不支持序列的数据库设计的,序列更适合此任务
  • 类的Hi值在您第一次保存该类的实例时,或在Lo值用完时检索并更新
  • 每个类使用不同的Hi
<>所以,你必须考虑至少两个变量:

  • 争论。通过使用单独的表,可以稍微提高性能
  • 射程。对于一个非常大的数据库,最终耗尽Hi值的风险更大

在考虑之后,这只是一个味觉的问题。

所以你会考虑使用单独的表格吗?争论:你是指并发事务吗?单个表应该如何影响性能?锁在上面?另一方面,当使用多个表时,会有更多的选择和更新,每个受影响的表一个选择和更新。一个组合可能很有用:为每组相关表创建一个表。是的,我会使用单独的表,因为有锁。选择/更新的数量是相同的,因为即使使用相同的表,生成器值也不会在类之间共享。同样,请记住关键概念:这只是将表用作序列生成器。为什么选择/更新的数量相同?当我有一个表时,为什么它要为每个需要ID的类选择并更新相同的表?因为它们是不同的TableHilGenerator实例,恰好使用相同的表名。它们可以使用不同的字段、不同的max_lo值等,但您可以自由创建自己的HiLo实现,对所有类别使用单个表/序列。。。