sql - SQL Azure 中分片时如何触发 SPLIT 和 DROP

标签 sql azure sharding federated

我正在设置一个在 Windows Azure 上运行的系统,我预计该系统会产生大量数据和高流量。为了处理它,我正在设计一个联合数据库。我感兴趣的是在需要时让应用程序本身拆分(或删除)联合数据库。有 2 个原因会触发这些操作发生:1)数据库的大小已达到 Windows Azure 中允许的限制,2)服务器中的流量太大,SPLIT 操作将提高性能,保持较低的响应时间(运行速度快)。 (逆运算基于类似的推理)。

我的问题是:如何以编程方式检测这两个条件?

最佳答案

您可以使用Sql Azure Dynamic Management Views以编程方式监视 Sql Azure 数据库。请注意,您将无法立即监控整个联合数据库,而是无法监控其每个单独的成员。

使用动态管理 View 检查条件 1)(与大小相关的条件)应该是直接的。检测条件 2)(与流量/性能相关的条件)有点困难,因为您首先需要确定有意义的确切指标及其阈值。

需要记住的一件非常重要的事情是 SPLIT 和 DROP 操作的行为非常不同。 SPLIT 是一种在线操作(不涉及任何停机时间),通过该操作将分区成员分为两个数据库。数据将自动在两者之间分配。此行为意味着拆分确实可能是由自动扩展过程触发的。

然而,DROP 却截然不同。删除联合成员时,Sql Azure 会将其键值范围移动到下级或上级邻居联合成员,但数据本身将被删除。您可以在this中获得更详细的描述文章(在其中搜索“缩小规模”)。基本上,您必须手动从删除的数据库中导出数据并将其手动合并到目标数据库中。从技术上讲,您也许可以通过命令行版本的 Sql Azure 迁移向导来自动执行合并操作,但这是有风险的。在投入生产之前需要进行大量测试。

Microsoft 计划对联盟成员 drop 实现自动合并,但这将在未来的版本中实现。目前,我不建议自动缩小规模。

更新

对于那些感兴趣的人,您可以投票支持联合 SQL Azure 数据库上的 MERGE 操作 here .

关于sql - SQL Azure 中分片时如何触发 SPLIT 和 DROP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899558/

相关文章:

azure - 是否有相当于 "az rest"的 PowerShell?

sql-server - 使用本地发布者/分发者和 Azure 订阅的 SQL Server 事务复制

c# - 使用 Azure AD 客户端凭据授予流程的 Azure Devops Access

java - 跨多个节点自动分片 Java Map

mysql 分片案例研究链接或论文

SQL:如何从oracle中的时间戳字段获取当前日期的数据?

php - Mysqli 准备无法在另一个准备好的语句中工作

mysql - 如何正确按月份对sql查询结果排序?

mongodb - Sharding后MongoDB查询报错

sql - 如何在 SQL (PostgresQL) 中将两列相减