【发布时间】: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