具有不同复制策略的多个Raven数据库

时间:2013-12-17 19:06:36

标签: database replication ravendb multiple-databases

Raven DB创建多个数据库以支持不同的复制策略。

最近,我的任务是创建一个额外的乌鸦数据库来存储与用户有关的信息。因此,我所使用的解决方案将在一个Raven数据库中提供一些信息,在另一个Raven数据库中提供用户信息。请求的原因是我们可以支持两个数据库的不同复制策略。鉴于我的理解,raven仅支持每个RavenDB的单一复制策略。

首先,我想知道是否有人创建了具有两个乌鸦数据库的应用程序?

其次,我想知道您可能遇到的问题,以及我可以在早期计划或减轻哪些问题的一般意识?

提前谢谢你,

1 个答案:

答案 0 :(得分:0)

有多个Raven数据库是可能的,但仅在某些情况下是可取的。

如果每个数据库都可能位于不同的服务器上(正如您所说的那样,因为您谈论的是复制方式不同),那么每个数据库都必须拥有自己的DocumentStore,设置起来相当昂贵,但这只应该在无论如何应用程序启动,你说的是2,而不是50。

正如Matt在评论中提到的,如果在同一台服务器上有两个数据库,那么您可以使用相同的DocumentStore并在打开会话时指定数据库名称。

每个数据库应该是逻辑上非常不同的东西。您将无法轻松地在两个数据库之间混合数据。如果一个数据库中的文档包含对另一个数据库中文档ID的引用,那么您将无法使用Include功能在一次往返中获取这两个文档 - 数据库之间基本上会存在隔离墙。例如,索引不能跨越数据库。

访问这两个数据库需要为每个数据库启动一个IDocumentSession,这两个数据库都需要单独管理。如果您在基础架构级别管理文档会话(即每个HTTP请求一个会话),那么让两个文件会很复杂。

但是,如果您有一个分段类型的应用程序,这可以很好地工作。例如,如果您有一个在多个网站(或网站区域)上提供单点登录的用户数据库,那么这可能是一个不错的选择。在大多数页面上,用户信息基本上是只读的(比如显示Stack Overflow顶部的黑条),用户管理页面除外。

如果您要使用Udi Dahan样式的SOA应用程序结构来定义服务边界并且每个服务都有自己的独立数据库,这也可能很常见。