【问题标题】:What is the difference between multiple data sources and multi tenancy?多数据源和多租户有什么区别?
【发布时间】:2016-10-25 12:06:39
【问题描述】:

在 mongodb 和 gorm 的上下文中,如果我们需要为不同的客户端拥有不同的数据库,那么多租户(With Database 模式)和多数据源方法是实现同一件事的两种解决方案,还是两者之间有什么区别?他们?

多数据源解决方案: http://gorm.grails.org/latest/mongodb/manual/#multipleDataSources

多租户解决方案: http://gorm.grails.org/latest/mongodb/manual/#multiTenancy

【问题讨论】:

    标签: mongodb grails grails-orm


    【解决方案1】:

    它们并不是为了达到相同的目的

    tldr; 多数据源意味着为不同的对象提供不同的数据库(如果您只打算使用 mongodb,则为集合),而多租户将存储相同的对象但添加一个鉴别器来识别客户端特定的数据。

    如果您的问题是关于支持为不同的客户提供不同的数据库,答案将是多租户

    多个数据源

    Grails 支持(长期)为同一个应用程序拥有多个数据库(它可以是不同的数据库供应商或来自同一供应商的不同数据库)。目的是将特定数据存储在不同的数据库/命名空间中。

    例如,您可以决定为您业务的所有核心实体设置一个数据库,并为所有审计/日志记录设置一个专用数据库。使用多个数据源时,您会将对象映射到专用数据源

    多租户(根据 OP 上下文使用数据库租户)

    另一方面,在多租户(数据库租户)中,grails 将为您的客户端提供一个单一的数据库模式来存储所有对象。因此来自客户端 A 的数据将位于客户端 B 之外的另一个数据库中。Grails 将有一些默认的租户解析器(如果需要,您仍然可以覆盖)它将设法根据上下文确定需要查询哪个数据库。

    【讨论】:

    • 非常感谢@Frederic,这就是我的想法。多租户似乎是我的答案,我会实施。但是,理论上讲,例如只有3个客户端的场景,我们需要不同的mongodb数据库(具有相同的集合/文档),通过Mode=Database的多数据源和多租户都可以达到相同的结果。对吗?
    • 好吧,假设您将采购订单 (PO) 存储在数据库中,然后您想列出特定客户的采购订单,使用多租户,您知道您只会获得当前客户采购订单,但是如果您实现多个数据源,您需要自己实现 mongo 连接,以便它在您的客户端数据库中查询,并且不会从系统中获取所有 POs
    • “...虽然多租户将存储相同的对象,但添加一个鉴别器来识别客户端特定的数据。”也不是“另一方面,在多租户(数据库租户)中,grails 将为您的客户提供一个单一的数据库模式来存储所有对象。”一定是真的。 GORM 支持每个数据库的租户、每个模式的租户或通过鉴别器的租户。
    • @JeffScottBrown 你说得对,但 OP 特别提到了 DB 租户的多租户
    • OP 包括“如果我们需要为不同的客户提供不同的数据库......”。我引用的这两种说法都不适用于那种情况,一般来说也不是正确的。他们谈到了 GORM 可用于支持多租户的一种方式。
    猜你喜欢
    • 2011-02-12
    • 2019-01-08
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多