多个模式与巨大的表格
考虑一个移动设备pipe理器系统,其中包含每个用户的信息,如存储他在手机上安装的应用程序的表格,审核详细信息,通知信息等。是否明智地为每个用户创build一个单独的模式? 对于单个用户来说,表格的数量是很大的,每个用户大约有30个表格。 将所有这些信息放到这些表中(反过来创build巨大的表),还是为每个用户创build一个模式,最好是有一个独立的模式?
提前致谢
我想看看哪种方法在查询数据库方面更有效率。
在多租户数据库中,查询只是问题的一部分。 问题的其他部分是成本,数据隔离和保护,维护和灾难恢复。 这些是重要的; 您不能 仅考虑多租户数据库中的查询效率。
多租户解决scheme的范围从每个租户一个数据库(无共享)到每个租户一个行(共享一切)。
“无共享”,“独立数据库”或每个租户一个数据库
- 每个客户最贵。 (大量的客户端意味着大量的服务器。)
- 数据隔离度最高。
- 单一租户的灾难恢复简单而直接。
- 维护在理论上更难,因为需要在每个数据库中进行更改。 但是你的dbms可能很容易支持在每个数据库中运行存储过程。 (例如,SQL Server有一个未公开的系统存储过程,例如sp_msforeachdb,你也可以编写自己的。)“无共享”也是最容易定制的,但是这也引发了更多的维护问题。
- 每桌最less的行数。 查询速度接近最佳。
“共享一切”或“共享模式”或“每个星球一个数据库”
- 每个租户最便宜。
- 数据隔离度最低。 每个表都有一列标识一行所属的租户。 由于租户行在每个表中都是混合的,因此意外暴露其他租户的数据相对比较简单。
- 单身居民的灾难恢复相对复杂, 你必须恢复许多表中的单个行。 另一方面,单一租户的灾难相对不寻常。 大部分灾难可能会影响到所有租户。
- 考虑到所有租户共享表格,结构维护更简单。 但是,这会增加沟通负担,因为您必须与每个租户进行沟通和协调。 这不容易定制。
- 每个表的最大行数。 快速查询比较困难,但取决于多less租户和多less行。 你可以轻易地进入VLDB领域。
在“无共享”和“共享一切”之间是“共享架构”。
“共享模式”
- 租户共享一个数据库,但每个租户都有自己的命名模式。 成本落在“无分享”和“分享一切”之间; 大型系统通常需要的服务器数量比“无共享”要less,服务器数量多于“共享所有”。
- 比“分享一切”要好得多。 不像“一无所有”那么有隔阂。 (您可以在模式上授予和撤销权限。)
- 单个租户的灾难恢复需要恢复多个模式之一。 这要么相对容易,要么相当困难,这取决于你的dbms。
- 维护比“一无所有”容易。 并不像“共享一切”那么简单。 编写一个将在数据库的每个模式中执行的存储过程是相对简单的。 在“租户”之间共享公共桌面比“共享空间”要容易。
- 通常每个服务器的活跃租户比“无共享”要多,这意味着他们共享(降低)更多的资源。 但不像“共享一切”那样糟糕。
微软在多租户架构上有一个很好的文章,更多的细节。 (链接只是多页文档的一页。)