你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Managed Instance for Apache Cassandra 中的具体化视图

适用于 Apache Cassandra 的 Azure 托管实例是针对纯开源 Apache Cassandra 群集的完全托管服务。 该服务还允许重写配置,具体取决于每个工作负载的特定需求。 此功能可根据需要实现最大的灵活性和控制。 本文讨论如何启用具体化视图。

具体化视图支持

具体化视图默认处于禁用状态,但可以在群集上启用它们。 不过,我们不建议 Azure Managed Instance for Apache Cassandra 的用户使用具体化视图。 他们是实验性的。 具体而言:

  • 具体化视图的实现是一种分布式系统设计,未进行广泛建模和模拟。 没有关于其属性的正式证明。
  • 没有任何方法可以确定具体化视图是否与其基表不同步。
  • 当存在对基表的更改时,对具体化视图进行同步所花费的时间没有上限。
  • 如果出现错误且具体化视图不同步,则解决问题的唯一方法是删除具体化视图并重新创建它。

有关详细信息,请参阅标记了实验性 Apache Mail Archives 的具体化视图关于采取此做法的提议

Microsoft 无法就有关具体化视图的问题提供任何 SLA 或支持。

具体化视图的替代方法

与大多数 NoSQL 存储一样,Apache Cassandra 不设计为具有规范化数据模型。 如果需要在多个位置更新数据,请将所有必要的语句作为 BATCH 的一部分发送。 此方法与物化视图相比有两个优势:

  • BATCH 保证该批次中的所有语句都提交或都不提交。
  • 所有语句具有相同的仲裁和提交语义。

如果工作负荷真正需要规范化数据模型,请考虑一个可缩放的关系存储,例如 Azure Cosmos DB for PostgreSQL

如何启用具体化视图

需要在 Cassandra 数据中心的 enable_materialized_views: true 字段中设置 rawUserConfig。 为此,请使用以下 Azure CLI 命令更新群集中的每个数据中心:

FRAGMENT="enable_materialized_views: true"
ENCODED_FRAGMENT=$(echo "$FRAGMENT" | base64 -w 0)
# or
# ENCODED_FRAGMENT="ZW5hYmxlX21hdGVyaWFsaXplZF92aWV3czogdHJ1ZQo="
resourceGroupName='MyResourceGroup'
clusterName='cassandra-hybrid-cluster'
dataCenterName='dc1'
az managed-cassandra datacenter update \
  --resource-group $resourceGroupName \
  --cluster-name $clusterName \
  --data-center-name $dataCenterName \
  --base64-encoded-cassandra-yaml-fragment $ENCODED_FRAGMENT

后续步骤