f44*_*ran 6 schema performance sql-server
这是一个数据库,用户可以在其中创建“项目”并对其进行处理。我们有一个表格project和各种其他表格,其中包含项目的不同属性(每个项目的多行,从 2-30K 行)。所有这些都包含projectID链接到project. 目前数据库是400GB。
我们正在尝试为每个项目创建一个架构,其中每个架构都将包含所有属性表。每当创建一个项目时,它都会获得一个新的模式。这意味着每个表最多包含 30K 行,这将提高select性能。我们将在查询中使用动态 SQL 来读取/插入。
我觉得这不是数据库的正确应用,但我如何向我的团队证明这是一种糟糕的方法?
Rem*_*anu 13
阅读本文:多租户数据架构。它广泛讨论了 3 种可能方法(每个表中的租户 ID、每个租户的架构、每个租户的数据库)的优缺点。这种方法称为“共享数据库,分离模式”,是一种有效的方法。无论这是否最适合您的情况,我都无法做出这样的决定。这就是论文对这种方法的看法:
分离模式方法的一个显着缺点是租户数据在发生故障时更难恢复。如果每个租户都有自己的数据库,那么恢复单个租户的数据意味着只需从最近的备份恢复数据库。对于单独模式的应用程序,恢复整个数据库意味着用备份数据覆盖同一数据库上每个租户的数据,无论每个租户是否遭受任何损失。因此,要恢复单个客户的数据,数据库管理员可能必须将数据库恢复到临时服务器,然后将客户的表导入生产服务器——这是一项复杂且可能耗时的任务。
单独的模式方法适用于使用相对少量数据库表的应用程序,每个租户大约 100 个表或更少。与单独的数据库方法相比,这种方法通常可以在每台服务器上容纳更多的租户,因此您可以以更低的成本提供应用程序,只要您的客户愿意将他们的数据与其他租户的数据放在一起。
阅读论文。
这将提高选择性能
如果您出于性能原因尝试进行这种拆分,那么您和您的团队肯定走上了错误的道路。通过识别它们并适当地修复它们来解决性能问题。阅读如何分析 SQL Server 性能。多租户并不便宜,您需要提前计划并回答一些简单的问题,例如“如何部署我的应用程序的下一个版本,其中包括数据库修改?” 以及“如何为一个特定项目恢复数据?”。您现在看到的问题表明存在应用程序调整问题(提示:您缺少索引)。
作为个人经验说明:我见过包含数百万个对象的数据库(“共享数据库,独立模式”方法自然会导致这种情况),而且它并不漂亮......我希望你所有的数据库管理现在 100% 脚本化/自动化,扩展 SSMS 树视图以选择 1M 对象中的 1 个是行不通的。