Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 建议使用哪种多租户方法_Sql Server_Database Design_Multi Tenant - Fatal编程技术网

Sql server 建议使用哪种多租户方法

Sql server 建议使用哪种多租户方法,sql-server,database-design,multi-tenant,Sql Server,Database Design,Multi Tenant,根据《多租户数据架构》(Multi-Tenant Data Architecture)的文章,有3种实现多租户的方法 独立数据库 共享数据库,独立模式 共享数据库,共享模式 我有以下资料: 用户应该能够备份和恢复其数据 租户人数:约3人 每个租户可能属于不同的域URL 有一些供所有租户使用的公用表格 每个租户中的表数:10个首字母 我想知道哪种方法更适合我 我认为选项2是最好的,但您仍然对要求1存在问题。备份和还原不适用于每个架构。您需要使用导入数据或任何自定义工具来处理此问题。公共表将有单独的

根据《多租户数据架构》(Multi-Tenant Data Architecture)的文章,有3种实现多租户的方法

独立数据库

共享数据库,独立模式

共享数据库,共享模式

我有以下资料:

用户应该能够备份和恢复其数据

租户人数:约3人

每个租户可能属于不同的域URL

有一些供所有租户使用的公用表格

每个租户中的表数:10个首字母


我想知道哪种方法更适合我

我认为选项2是最好的,但您仍然对要求1存在问题。备份和还原不适用于每个架构。您需要使用导入数据或任何自定义工具来处理此问题。公共表将有单独的模式


在选项1中,您需要处理需求4,公共表将在所有数据库之间复制。

在所有5个条件中,最重要的条件是条件4,即某些表在所有租户中都是公共的。如果某些表是通用的,则排除单独的数据库,即选项1

您可以继续使用选项2,共享数据库和单独的模式,但在您的情况下,租户的数量远远少于3。在这种情况下,增加维护单独模式的开销是应该避免的开销。因此,在评估选项3之前,我们也可以跳过选项2

选项3-具有共享模式的共享数据库将是最有效的选项。它避免了维护单独模式的开销,并允许租户之间使用公共表。在共享模式中,通常跨表使用租户标识符。Hibernate已经支持这样的租户标识符,以防您使用Java-J2EE实现。 唯一的问题可能是性能,因为将所有三个租户的数据放在同一个表中会导致较低的数据库访问\搜索性能,您必须通过反规范化和索引来应对


我建议继续使用选项3。

对于我们来说,我们已经开发了一个人力资源ERP,大约有40%的客户和1000%的用户使用它;多租户使用的方法是第三种


此外,使用的技术分离表之一是heritance。

我的系统中也有同样的问题。我们有一个广告网络系统,随着时间的推移,这个系统变得相当庞大,所以我考虑迁移到每个发布者的多租户体系结构

选项3与此无关,因为一些发布者对附加列/过程有特殊要求,我们不支持分区。选项2不相关,因为客户之间存在并发和负载问题。为了达到高性能,我们计划扩展到1000个发布服务器,20个小部件和高并发性,我们唯一的解决方案是选项1-独立数据库

我们已经迁移到这种模式,我们有10个数据库正在运行,有一个用于配置和广告的共享数据库。从性能上看,这非常棒。从高可用性来看,这也是非常好的,因为每个发布者的流量不会影响其他所有发布者的流量。添加新的publisher对我们来说是一个简单的步骤,因为我们有自己的模板环境。我们唯一的问题是维护


最近我一直在读关于,它看起来非常容易管理,因为您可以有一个gate数据库来执行所有维护工作,包括升级和顶级查询。它支持公共共享数据库,与我们之前的相同,我现在也在尝试了解如何使用。

根据您的要求,我认为2将很好,因为您没有第4点中提到的太多租户,所有数据库都有一些公共表。我将如何实现这一点?在获取或插入/更新数据时,您将知道需要从哪些表中获取哪些数据,因此您可以使用适当的表公共表或租户表检查此项,谢谢您的回复。如果我选择选项1,我将如何更新所有子数据库?我也认为我将选择选项3。但是对于公共表我应该怎么做呢?对于选项3,公共表将在所有租户客户端之间共享。