【问题标题】:Horizontal partitioning of tables in multitenant shared environments多租户共享环境中表的水平分区
【发布时间】:2018-05-04 13:18:06
【问题描述】:

我有一个数据库,我需要在其中存储来自不同用户(即租户)的数据(例如资源)。

这些资源可以在多个用户之间共享。

因此,我有一个用户表、一个资源表和一个多对多表 UserResources。

TABLE Users (GUID userId, String username);

TABLE Resources (GUID resourceId, String resourcePath, DateTime createdAt, DateTime updatedAt, int property1, ...);

TABLE UserResources (GUID userId, GUID resourceId);

表'UserResources'的水平分区最有效的策略是什么?

那是

我应该使用哪些列作为 UserResources 中的分区列以获得最佳的查询性能(就执行时间而言)?

谢谢大家!

cghersi

【问题讨论】:

  • 嗨。您正在询问有关多租户分区基础知识的教科书和手册章节,并要求我们将它们应用于非常普遍的情况。请阅读一些内容并提出具有适当详细信息的特定问题。 How to Ask
  • 我目前的一般评论是“更好”/“最好”等:除非定义它,否则工程中没有“更好”/“最好”之类的东西。同样不幸的是,所有合理的实际定义都需要大量的经验,以及与对细节的混乱敏感度相互作用的大量因素。进行简单的设计。当您通过测量证明您可以想到的设计和所有替代方案都存在问题时(无论当时意味着什么),然后提出一个非常具体的问题。这也应该定义“更好”/“最好”。 meta.stackexchange.com/q/204461
  • 感谢 philipxy 的 cmets。其实我认为这是一个非常具体的问题;我试图在最后明确添加它。当然,try&measure 方法是最佳的,我只是想提示从哪里开始,而不是在反复试验中浪费几个月的时间......
  • @CristianoGhersi - 您使用的是哪个数据库引擎?它可以产生很大的不同。
  • GUID 会降低性能;你真的需要那种身份证吗?

标签: database relational-database multi-tenant partitioning


【解决方案1】:

对多对多表进行分区是没有意义的。您不太可能获得任何性能。事实上,性能可能会受到影响。

我的多对多表技巧(针对 MySQL):http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2014-03-21
    • 2022-09-27
    • 2010-09-07
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多