我有一个多租户MySQL数据库。对于大多数事情我在表中使用tenant-id列进行区分,但出于一些目的,最好有一个已经由租户id过滤的视图。例如,我可能有一个名为'quarterly_sales_view'的视图,但对于租户30我会有'quarterly_sales_view_30'而对于租户51我会有'quarterly_sales_view_51'。我动态地创建这些视图,一切都很好,但我们现在只有几个租户,我意识到这对数百万租户来说永远不会有用。
我的问题是,我是会遇到性能问题还是只有几千,几百或几十个自定义视图的硬限制?
附加信息:
我正在使用第三方工具(不成熟),它需要一个表名(或视图名称,因为它是只读的)并对其进行操作。在它正在工作的上下文中,我不能让它访问整个视图,所以我创建另一个视图,简单地定义为SELECT * FROM MasterView WHERE TenantId = 30.我认为这是一个解决方案,因为让工具直接在桌子上工作。幸运的是这个工具是开源的,所以我可以调整它以使用不同的方法。我只是想知道在目前的方法爆炸之前我已经有多长时间了。
答案 0 :(得分:1)
此问题(IMO)中的主要问题应该是性能较低,而设计更多。首先,视图的数量不应该影响性能,但是,为什么每个租户需要一个视图?是否无法在更通用的视图上按ID过滤租户。 E.g:
SELECT * FROM vwMyTentants WHERE TenantId = 30
无论是什么原因,你都应该重新考虑你的方法,因为它是设计气味的标志。