【问题标题】:Multiple Raven Databases with different Replication strategies具有不同复制策略的多个 Raven 数据库
【发布时间】:2013-12-18 05:57:31
【问题描述】:

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

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

首先我想知道是否有人创建了一个包含两个 raven 数据库的应用程序?

其次,我想知道您可能遇到了哪些问题,以及我可以尽早计划或缓解哪些问题的一般认识?

提前谢谢你,

【问题讨论】:

    标签: database replication ravendb multiple-databases


    【解决方案1】:

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

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

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

    每个数据库都应该用于逻辑上非常不同的事物。您将无法轻松地在两个数据库之间混合数据。如果一个数据库中的文档包含对另一个数据库中文档 ID 的引用,则您将无法使用“包含”功能在一次往返中获取这两个文档 - 数据库之间基本上会有一堵墙。例如,索引不能跨越数据库。

    访问这两个数据库需要为每个数据库启动一个 IDocumentSession,这两个数据库都需要单独管理。如果您在基础架构级别管理文档会话(即每个 HTTP 请求一个会话),那么拥有两个会使事情变得相当复杂。

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

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

    【讨论】:

    • 您不需要每个数据库单独的 DocumentStore 实例。您可以在创建会话时提供数据库名称。如果您要与不同服务器上的不同数据库通信,则只需要多个 DocumentStore 实例。
    • 我想要第二个意见,因为我认识回复帖子的人。
    • 我说的是在具有单独复制策略的单独服务器上拥有单独的 RavenDB
    • 谢谢马特!忘记了通过 1 个文档存储打开与同一服务器上不同数据库的会话的选项。编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多