我正在设置一个在 Windows Azure 上运行的系统,我希望它有大量数据和高流量。为了处理它,我正在设计一个联合数据库。我有兴趣在需要时让应用程序本身 SPLIT(或 DROP)联合数据库。有 2 个原因应该触发这些操作发生:1) 数据库的大小已达到 Windows Azure 中允许的限制,2) 服务器中的流量太高,SPLIT 操作将提高性能,保持低响应时间(快速运行)。(逆运算基于类似的推理)。
我的问题是:如何以编程方式检测这两个条件?
您可以使用Sql Azure 动态管理视图以编程方式监控 Sql Azure 数据库。请注意,您将无法一次监控整个联合数据库,而是监控其中的每个成员。
使用动态管理视图检查与大小相关的条件 1) 应该是直截了当的。检测与流量/性能相关的条件编号 2) 有点困难,因为您首先需要确定有意义的确切指标及其阈值。
要记住的一件非常重要的事情是 SPLIT 和 DROP 操作的行为非常不同。SPLIT 是一种联机操作(它不涉及任何停机时间),通过该操作将分区成员划分为两个数据库。数据将在两者之间自动拆分。这种行为意味着拆分可能确实是从自动扩展过程中触发的。
然而 DROP 是完全不同的。删除联合成员时,Sql Azure 会将其键值范围移动到下级或上级相邻联合成员,但数据本身会被简单地删除。您可以在本文中获得更详细的描述(在其中搜索“Scaling down”)。基本上,您必须手动从删除的数据库中导出数据并将其手动合并到目标数据库中。从技术上讲,您也许可以通过 Sql Azure 迁移向导的命令行版本自动执行合并操作,但这样做是有风险的。在投入生产之前需要进行大量测试。
微软计划在联盟成员 drop 上实现自动合并,但这将在未来的版本中实现。就目前而言,我不推荐自动缩小规模。
更新
对于那些感兴趣的人,您可以在此处为联合 SQL Azure 数据库上的 MERGE 操作投票。