Nhibernate Shards生产准备好了吗?

时间:2010-06-22 18:28:05

标签: nhibernate

在我工作的公司,我们有一个数据库模式,但每个客户都使用自己的专用数据库,一个中央数据库存储客户端联系人详细信息以及客户端使用的数据库,因此我们可以连接到相应的数据库。我已经看过使用NHibernate Shards,但似乎已经非常安静,看起来并不完整。

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

如果它还没有被认为可用于生产,那么有哪些替代方案?两个主要的似乎是:

  1. 为每个数据库创建一个会话工厂,然后创建一个包装器以选择适当的工厂来生成正确的会话 - 这在我看来有冗余会话工厂而且效率不高
  2. 只创建一个会话工厂但是在调用opensession时会传递一个IDbConnection - 这将允许会话具有不同的数据库连接。
  3. 我对2的关注是NHibernate如何应对二级缓存,因为我认为它是由会话工厂控制的 - HiLo生成器也使用我相信的会话工厂。在这些情况下,会话附加到不同的dbs会导致问题吗?例如,我们最终会得到两个数据库中id为2的MyCompany.Model.User类,这会导致缓存中的冲突吗?

2 个答案:

答案 0 :(得分:0)

您可以查看Enzo SQL Shard SQL Server的分片库。如果您已经在使用NHibernate,那么代码中可能需要进行一些更改

答案 1 :(得分:0)

NHibernate Shards是最新的NHibernate API更新,并且现在支持NHibrrnate的所有查询模型,包括Linq。当前不支持复杂的标量查询。

我们在生产过程中将其用于多租户环境,但是要注意一些事项。

NHibernate分片为每个分片都有一个会话工厂,但是仅使用单个NHibernate Configuration实例来生成会话工厂。这种方法可能无法很好地扩展到大量分片。

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