你当前正在访问 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 邮件档案以及建议将具体化视图标记为实验性的)。 具体而言:
- 具体化视图的实现是尚未进行广泛建模和模拟的分布式系统设计。 目前还没有关于其属性的正式证明。
- 没有任何方法可以确定具体化视图是否与其基表不同步。
- 当存在对基表的更改时,对具体化视图进行同步所花费的时间没有上限。
- 如果出现错误并且某个具体化视图变得不同步,则修复它的唯一方法就是删除该具体化视图并重新创建它。
Microsoft 无法就有关具体化视图的问题提供任何 SLA 或支持。
具体化视图的替代方法
与大多数 NoSQL 存储一样,Apache Cassandra 未设计为具有规范化的数据模型。 如果需要更新多个位置的数据,程序应在执行 BATCH 期间发送所有必要的语句。 与具体化视图相比,这有两个优点:
- BATCH 保证该批次中的所有语句都提交或都不提交。
- 所有语句具有相同的仲裁和提交语义。
如果工作负载确实需要规范化的数据模型,请考虑使用可缩放的关系存储,例如 Azure 的超大规模 PostgreSQL。
如何启用具体化视图
需要在 Cassandra 数据中心的 rawUserConfig
字段中设置 enable_materialized_views: true
。 为此,请使用以下 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