【问题标题】:Multitenancy and Partitaioning多租户和分区
【发布时间】:2010-07-23 03:57:04
【问题描述】:

你好,

我必须使我的应用程序符合 SAAS。为了实现多租户,我对数据进行了分区,每个分区将用于一个租户。并且此分区将动态完成。

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

我正在使用 SQL 2005

问候 DEE

【问题讨论】:

    标签: sql-server multi-tenant


    【解决方案1】:

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

    目前SQL Server中没有自动动态分区,PDC09上提到SQL Azure未来路线图,但我没有听说过SQL Server。

    您的替代选择是每个客户端一个数据库或 SQL 实例,这种方法的好处在于,如果需要,您可以给自己更多的机会进行横向扩展,如果您开始考虑更大的数据中心,您可以开始在服务器群等之间平衡 SQL 实例。如果您自动将所有数据保存在单个数据库中。

    其他需要考虑的事项:

    安全性:虽然您将数据保存在带有分区的单个数据库中,但您没有数据保护。由于代码中的任何一个错误,您都冒着将一个客户的数据暴露给另一个客户的风险。

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

    备份:你可以让每个分区占用一个单独的文件组并尝试管理情况。可以说开箱即用,每个客户端的备份都混合在一起。如果单个客户端要求回滚给定数据,您必须提前仔细计划如何在不影响系统其他用户的情况下执行该操作。

    【讨论】:

    • 谢谢 Andrew,我目前有近 100 张桌子,保守地说,如果我有“tenantId”表格,至少我需要添加超过 50 张桌子,所以我正在考虑一种方法(如果有的话) 除了添加租户 ID 或每个客户端使用一个数据库实例(我不会超过 10 个)。还有其他方法吗?
    • 另一种方法是查看您是否可以使用 Azure 平台,这可以使拥有多个数据库实例的成本降低很多。 (分区是企业独有的功能,不是廉价的许可证。)
    • 感谢安德鲁,感谢您的 cmets
    • 每个租户的数据库是典型的 ISP 托管方法。除了 Andrew 已经提到的(安全性、备份一致性、升级路径)之外,我还要添加许可。多租户服务通常需要特殊的 SQL Server 许可,您必须与 MS 协商。
    • 您正在接受什么 sql server 许可,我的印象是,如果我购买 sql server 许可,那么我可以根据需要创建任意数量的数据库..这不是真的吗?跨度>
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2022-07-14
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多