Nhibernate碎片生产准备好了吗?

Nhibernate碎片生产准备好了吗?,nhibernate,Nhibernate,在我工作的公司,我们有一个单一的数据库模式,但我们的每个客户都使用自己的专用数据库,一个中央数据库存储客户联系方式和客户使用的数据库,以便我们可以连接到适当的数据库。我看过使用NHibernate碎片,但它似乎变得非常安静,看起来不完整 有人知道这个项目的状态吗?有人在生产中使用过吗 如果它还没有达到可以在生产中使用的程度,有什么替代方案?两个主要问题似乎是: 为每个数据库创建一个会话工厂,然后创建一个包装器来选择合适的工厂来生成正确的会话——在我看来,这似乎有多余的会话工厂,效率不高 只创建一

在我工作的公司,我们有一个单一的数据库模式,但我们的每个客户都使用自己的专用数据库,一个中央数据库存储客户联系方式和客户使用的数据库,以便我们可以连接到适当的数据库。我看过使用NHibernate碎片,但它似乎变得非常安静,看起来不完整

有人知道这个项目的状态吗?有人在生产中使用过吗

如果它还没有达到可以在生产中使用的程度,有什么替代方案?两个主要问题似乎是:

  • 为每个数据库创建一个会话工厂,然后创建一个包装器来选择合适的工厂来生成正确的会话——在我看来,这似乎有多余的会话工厂,效率不高
  • 只创建一个会话工厂,但在调用opensession时向其传递一个IDbConnection,这将允许会话具有不同的数据库连接
    我对2的关注是NHibernate如何处理二级缓存,因为我相信它是由会话工厂控制的——我相信HiLo生成器也使用会话工厂。在这些情况下,会话连接到不同的数据库会导致问题吗?例如,我们将得到一个在两个数据库中id均为2的MyCompany.Model.User类,这会导致缓存中发生冲突吗?

    您可以查看SQL Server的分片库。如果您已经在使用NHibernate,则可能需要对代码进行一些更改,尽管NHibernate碎片是最新的NHibernate API更改,现在支持NHibernate的所有查询模型,包括Linq。目前不支持复杂的标量查询

    我们在多租户环境的生产环境中使用它,但有几件事需要注意

    NHibernate碎片对于每个碎片都有一个会话工厂,但只使用一个NHibernate配置实例来生成会话工厂。这种方法可能无法很好地扩展到大量碎片


    跨碎片查询不能很好地进行分页。它可以工作,但可能涉及大量的客户端处理。最好保持结果集尽可能小,并在可行的情况下将查询锁定到单个碎片。

    这可能是基于意见的查询,也可能是过于本地化的查询。