我正在设置一个在Windows Azure上运行的系统,我期望大量的数据和高流量。为了处理它,我正在设计一个Federated数据库。我有兴趣在需要时让应用程序本身具有SPLIT(或DROP)联合数据库。应该触发这些操作的原因有两个:1)数据库的大小达到了Windows Azure中允许的限制,以及2)服务器中的流量太高,SPLIT操作将提高性能,保持较低的响应时间(快速运行)。 (逆操作基于类似的推理)。
我的问题是:如何以编程方式检测这两个条件?
答案 0 :(得分:1)
您可以使用Sql Azure Dynamic Management Views以编程方式监视Sql Azure数据库。请注意,您将无法一次监视整个联合数据库,而是监视其各个成员。
使用动态管理视图检查条件1),与大小相关的那个应该是直截了当的。检测条件数2),与流量/性能相关的条件有点困难,因为您首先需要确定有意义的精确度量及其阈值。
要记住的一件非常重要的事情是SPLIT和DROP操作的表现非常不同。 SPLIT是一种在线操作(它不涉及任何停机时间),通过该操作将分区成员划分为两个数据库。数据将自动在两者之间分配。此行为意味着可能确实会从自动缩放过程触发拆分。
然而,DROP却截然不同。删除联合成员时,Sql Azure会将其键值范围移动到较低或较高邻居联合成员,但数据本身只是被删除。您可以在this文章中找到更详细的说明(在其中搜索“缩小”)。基本上,您必须手动从已删除的数据库中导出数据并手动将其合并到目标数据库中。从技术上讲,您可以通过命令行版本的Sql Azure迁移向导自动执行合并操作,但这样做很危险。在投入生产之前需要进行大量测试。Microsoft计划在联盟成员丢弃上实施自动合并,但这将在未来版本中实现。就目前而言,我不推荐自动缩小规模。
<强>更新强>
对于那些感兴趣的人,您可以在联合SQL Azure数据库here上投票支持MERGE操作。