【问题标题】:Practical implementation of multi-tenant approach in mysql / mariadb (or amazon aurora)mysql / mariadb(或amazon aurora)中多租户方法的实际实现
【发布时间】:2019-08-19 16:59:33
【问题描述】:

我完全理解使用共享模式和单独模式(或 mysql 中的数据库)的优缺点。查看我们选择使用共享架构的那些。

寻找有关如何更轻松地实现多租户的想法。我很高兴为每个表添加一个键,但这意味着我们需要为在每个查询中使用多租户的每个表添加“where tenant_id = X”。听起来很痛苦。

更好的方法是设置一些影响查询中的所有表或连接中的所有查询的参数。这将避免必须更新所有现有查询以及必须在以后的查询中包含对租户 ID 的检查。

我有一些初步的想法(如下),但它们似乎也很痛苦。

  1. 为每个按租户 ID 自动过滤的表创建临时视图(可能使用临时表?)

  2. 创建按租户 ID 过滤并在查询中动态设置表名的视图

  3. 按租户 ID 使用分区并查询各个分区。

谁有更好的想法?

【问题讨论】:

  • 你考虑过表名前缀吗?
  • 那么将每个表分成多个带有租户前缀的表?我认为为每个租户创建一组新表并不实际,因为这会使添加租户变得复杂,并且会使表更改变得困难,因为我们需要更新 X 个表而不是一个。
  • 您没有指出每个租户都有相同的架构。反正我没看到问题。当然,在每个表中都有一个列,您可以利用表分区。而且您可能会在所有内容周围放置某种包装器,这样您就不必为每个查询添加 WHERE 子句。
  • 当使用共享模式时,我认为这意味着所有租户都属于同一个模式。我很好奇您所说的包装器是什么意思,但是,您的意思是哪种包装器?谢谢!

标签: mysql mariadb amazon-aurora


【解决方案1】:

您提出的共享模式模型的一个问题是您的客户。过去,我曾与许多公司合作过,他们的客户协议规定他们的数据是独立的,不能与其他客户数据混合,这意味着我们必须按照客户路线采用单独的模式。

您可能会发现这也是一个更灵活的解决方案,如果您的任何客户端变得非常大,您可以将它们移至自己的服务器/实例,并使用 ProxySQL 等实用程序将流量引导到相关基于架构名称的服务器/实例。

如果您有在所有客户端之间共享的数据,请将其放在其自己的“主”服务器上,该服务器会向下复制到客户端服务器。如果需要扩展读取,您可以通过将副本链接到客户端服务器来进一步复制。

无论您决定如何做,我都会注意将客户数据合并到一个架构中的法律影响 - 检查您是否拥有合并数据的客户权限。显然,如果您正在构建类似社交网络的东西,那么您将需要合并数据,但这是意料之中的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2015-03-20
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多