Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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_Multi Tenant - Fatal编程技术网

Sql server 多租户与分割

Sql server 多租户与分割,sql-server,multi-tenant,Sql Server,Multi Tenant,你好 我必须使我的应用程序与SAAS兼容。为了实现多租户,我需要对数据进行分区,每个分区将针对一个租户。这种划分将动态进行 有人做过这样的事吗? 你认为更好的方法是什么 我正在使用SQL2005 问候 DEE每个分区方案有1000个分区的限制,并且您只能在单个字段上进行分区,因此,如果您打算多租户超过1000个实例,您将不得不跨越更多的障碍。您可以通过在多个分区表之上使用分区视图来扩展该限制,但这会增加管理开销。您可以使用DMV并创建自己的自动化系统,该系统为每个客户机/租户生成新分区并管理问题

你好

我必须使我的应用程序与SAAS兼容。为了实现多租户,我需要对数据进行分区,每个分区将针对一个租户。这种划分将动态进行

有人做过这样的事吗? 你认为更好的方法是什么

我正在使用SQL2005

问候
DEE

每个分区方案有1000个分区的限制,并且您只能在单个字段上进行分区,因此,如果您打算多租户超过1000个实例,您将不得不跨越更多的障碍。您可以通过在多个分区表之上使用分区视图来扩展该限制,但这会增加管理开销。您可以使用DMV并创建自己的自动化系统,该系统为每个客户机/租户生成新分区并管理问题,但它将针对您的应用程序,而不是通用的

目前,SQL Server中没有自动动态分区,在PDC09中提到了它与SQL Azure未来路线图的关系,但我没有听说它适用于SQL Server

您的备选方案是每台客户机一个数据库或SQL实例,这种方法的好处在于,如果需要,您可以提供更多的扩展机会,并且如果您开始考虑更大的数据中心,如果自动将所有数据保存在单个数据库中,则可以开始跨服务器场等平衡SQL实例

其他需要考虑的事项:

安全性:虽然您将数据存储在一个带有分区的数据库中,但您没有数据保护。如果代码中有任何一个bug,就有可能将一个客户机的数据暴露给另一个客户机

升级:如果所有客户端都访问同一个数据库,那么升级将是全有或全无的方法-您将无法轻松地将一些用户迁移到新版本,而将其他用户保持原样


备份:您可以让每个分区占用一个单独的文件组,然后尝试管理这种情况。可以说,每个客户机的备份都是混合在一起的。如果单个客户端要求回滚到给定数据,您必须事先仔细计划如何执行,而不影响系统的其他用户。

每个分区方案限制1000个分区,您只能在单个字段上分区,因此,如果您打算将多租户扩展到1000多个实例,那么您将不得不经历更多的困难。您可以通过在多个分区表之上使用分区视图来扩展该限制,但这会增加管理开销。您可以使用DMV并创建自己的自动化系统,该系统为每个客户机/租户生成新分区并管理问题,但它将针对您的应用程序,而不是通用的

目前,SQL Server中没有自动动态分区,在PDC09中提到了它与SQL Azure未来路线图的关系,但我没有听说它适用于SQL Server

您的备选方案是每台客户机一个数据库或SQL实例,这种方法的好处在于,如果需要,您可以提供更多的扩展机会,并且如果您开始考虑更大的数据中心,如果自动将所有数据保存在单个数据库中,则可以开始跨服务器场等平衡SQL实例

其他需要考虑的事项:

安全性:虽然您将数据存储在一个带有分区的数据库中,但您没有数据保护。如果代码中有任何一个bug,就有可能将一个客户机的数据暴露给另一个客户机

升级:如果所有客户端都访问同一个数据库,那么升级将是全有或全无的方法-您将无法轻松地将一些用户迁移到新版本,而将其他用户保持原样


备份:您可以让每个分区占用一个单独的文件组,然后尝试管理这种情况。可以说,每个客户机的备份都是混合在一起的。如果单个客户端要求回滚到给定数据,您必须事先仔细计划如何执行,而不影响系统的其他用户。

感谢Andrew,我目前有近100个表,保守地说,如果我有“tenantId”到表,至少我需要添加50多个表,因此,我正在考虑一种方法(如果有的话),而不是添加租户ID或为每个客户机使用一个DB实例(我不会有超过10个)。还有其他方法吗?另一种方法是看看是否可以使用Azure平台,这可以使拥有多个数据库实例的成本降低很多。(分区是企业特有的功能,不是便宜的许可证。)感谢Andrew,感谢您的评论每个租户的数据库是典型的ISP托管aproach。除了Andrew已经提到的(安全性、备份一致性、升级路径)之外,我还添加了许可。多租户服务通常需要特殊的SQL Server许可,您必须与MS协商。您正在进行的SQL Server许可,我的印象是,如果我购买SQL Server许可,那么我可以创建任意数量的数据库。这不是真的吗?谢谢Andrew,我目前有近100个表,保守地说,如果我在表中添加了“tenantId”,那么至少我需要添加50多个表,因此我正在考虑一种方法(如果有的话),而不是添加租户ID或为每个客户机使用一个DB实例(我不会有超过10个)。还有其他方法吗?另一种方法是看看是否可以使用Azure平台,这可以使拥有多个数据库实例的成本降低很多。(分区是企业特有的功能,不是便宜的许可证。)感谢Andrew,感谢您的评论每个租户的数据库是典型的ISP托管aproach。除了Andrew已经说过的(安全),