Azure Cosmos DB — A 到 Z

Cosmos DB 功能

在这里,我重点介绍一些功能,这些功能将帮助您确定它是否适合您的用例。

  • 全球分布式: Cosmos DB 可以跨区域部署。假设您目前仅在澳大利亚东部运行;这可以很容易地复制到其他地区,如澳大利亚中部或美国中部等。这是一个多主设置。
  • 高度可扩展: 数据库的读写能力可以基于RU(读单元)轻松管理。本教程稍后将介绍 RU。如果您想为某些活动(例如闪购)扩大规模,这将很有帮助。
  • 低延迟: Azure Cosmos DB 保证同一 Azure 区域内第 99 个百分点的端到端读取延迟低于 10 毫秒,索引写入延迟低于 15 毫秒
  • 多模型: Cosmos DB 是一个多模型数据库,这意味着它可以用于在键值对、基于文档、Germlin 和基于列族的数据库中存储数据。有多种模型可以利用。
  • Cassandra API 和 MongoDB API:如果您已经在使用 Cassandra 或 MongoDB,那么您可以迁移到 Cosmos DB,而无需对代码进行太多更改。可以使用宽列格式。
  • SQL API:如果您熟悉 SQL 查询或者从头开始,则可以使用 SQL API。它是使用 Cosmos 的最原生版本。
  • 存储表:将数据存储为键和值对。此解决方案使用标准 Azure 表 API,它遵循与 Azure 表存储相同的架构和设计。
  • Gremlin API:该模型用于创建图形数据库来保存关系。这是一个基于 Apache TinkerPop 的开源 API。
  • 高可用:数据可以跨地域复制。在单个区域内,SLA 为 99.99%,而对于多区域设置,SLA 为 99.999%。在底层,数据跨分区分布,在每个区域内该分区都会被复制。
  • 一致性:根据 CAP 定理,系统只能具有 3 者中的 2 者:一致性、可用性和分区容错性。开发人员需要了解其中的权衡。Cosmos DB 提供多种一致性选项。

一致性级别

  • 强一致性:用户永远不会看到未提交或部分写入。读取保证返回项目的最新提交版本。最高的一致性和低吞吐量,并且随着扩展,写入延迟将进一步恶化。
  • 有界陈旧性:此级别允许操作或时间滞后,而不是 100% 一致性。这是一种 MySQL 脏读。例如,您可以将数据库配置为允许 5 秒的延迟。这是最终的,但你可以控制这种可能性。一致性仍然很高,但吞吐量较低。
  • 会话一致性:默认一致性。这是受会话限制的;它可以被认为在该会话内是高度一致的,并且该会话之外的任何内容可能会或可能不会滞后。这提供了良好的性能和良好的吞吐量。
  • 一致前缀:读取与特定时间一致,但不一定与当前时间戳一致。它与有限陈旧性类似,因为您既无法控制也不知道延迟(如果有)。通常您可以看到几秒钟的延迟。良好的性能和出色的可用性。
  • 最终一致性:无法保证需要多长时间才能达到一致。此外,不保证更新按顺序进行。这也是性能最高、成本最低和可用性最高的级别。

自动索引

它解释了如何对该容器内的数据建立索引。默认情况下是为每个项目的每个属性建立索引。这可以通过指定所需的索引来定制。

索引的概念与任何其他数据库非常相似:它增强读取性能并对写入性能产生负面影响。请务必谨慎并确定适合您的应用程序的正确索引。更多的索引还意味着更多的数据,然后意味着更多的 RU,这反过来又意味着性能降低和成本增加。您可以通过在包含路径和排除路径中定义属性来在索引中包含或排除属性。

包含根路径以有选择地排除不需要索引的路径。这是推荐的方法,因为它允许 Azure Cosmos DB 主动为可能添加到模型中的任何新属性建立索引。排除根路径以选择性地包含需要索引的路径。

索引模式

  • 一致性:索引在您创建、更新或删除项目时同步更新。
  • None:当不需要辅助索引时,容器上的索引被禁用。

索引类型

  • Hash: 支持高效的相等查询。
  • Range: 支持高效的等式查询、范围查询、order by查询。
  • 空间: 支持高效的空间(内部和距离)查询。数据类型可以是点、多边形或线串。

分区键
 


在幕后,Cosmos DB 使用分布式数据算法来提高数据库的 RU/性能,每个容器根据分区键分为逻辑分区。哈希算法用于将数据划分并分布到多个容器中。此外,这些逻辑容器与多个物理容器(托管在多个服务器上)映射。

逻辑分区在物理分区上的放置由 Cosmos DB 处理,以有效满足容器的可扩展性和性能需求。随着 RU 需求的增加,物理分区的数量(更多服务器)也会增加。

作为最佳实践,您必须选择具有广泛值和访问模式且均匀分布在逻辑分区上的分区键。例如,如果您从多所学校收集一些数据,但 75% 的数据仅从一所学校收集,那么创建学校作为分区键并不是一个好主意。

吞吐量

成本很大程度上取决于您配置的吞吐量。请记住,这不是您消耗的任何东西,而是您所提供的任何东西。吞吐量进一步表示为 RU(读取单元);这定义了每个容器或数据库的读写能力。它抽象了执行数据库操作所需的系统资源,例如 CPU、IOPS 和内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wouderw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值