NoSQL 数据库
- 配置表存储账户
- NoSQL非关系型数据库
- NoSQL主要分为四大类:
- 非关系型数据库的特点:
- SQL vs NoSQL
- 选择合适的CosmosDB APls
- Azure Cosmos DB
- Azure Cosmos数据库的API
- 支持ACID 事务
- 不同的 API 使用不同的数据格式进行存储和有线协议。
- 表API
- Azure表存储
- Azure表API vs表存储
- Azure Cosmos DB数据库与账户
- 配置CosmosDB只读复制Replicas
配置表存储账户
NoSQL非关系型数据库
NoSQL(最初指"“非SQL (non SQL) "、“非关系(non relational)“或"不仅是SQL(Not Only SQL)”)
NoSQL是一个通用术语,用于指不遵循传统RDBMS模型的任何数据存储——具体来说,数据是非关系型的,它不使用SQL作为主要查询语言。它是用于指试图解决 可伸缩性 和 可用性 问题而不是 原子性 或一致性 问题的数据库。
NoSQL可以用描述任何一种数据文件,不具备传统关系型数据库的范式,NoSQL是非关系型设计的Database,主要针对当前互联网时代的复杂数据
NoSQL的必要性:
- 数以百万计的用户·低成本的存储
- 增加处理能力
- 捕获(和需要)数百万个事件的能力。缓存在一定程度上解决了这个问题,但也带来了其他复杂性·实时响应
- 需要向外扩展,而不是向上扩展(增加无限数量的低成本机器vS用更强大的机器代替)
NoSQL主要分为四大类:
- key-value存储数据库。该类数据库使用哈希表,在哈希表中包含特定的key和与其对应的指向特定数据的指针。常用的有Redis。
- 列存储数据库。该类数据库主要用来应对分布式存储的海量数据,一个键指向了多个列。常用的有HBase.
- 文档型数据库。该类数据库将结构化、半结构化的文档以特定格式存储,如json格式。一个文档相当于关系型数据库中的一条记录,也是处理信息的基本单位。常用的有MongoDB。
- 图形数据库。该类数据库使用图形理论来存储实体之间的关系信息,最主要的组成部分是:结点集、连接节点的关系。常用的有Neo4j。
非关系型数据库的特点:
- 数据模型比较简单。
- 对数据库性能的要求比较高。
- 不需要高度的数据一致性。
SQL vs NoSQL
https://docs.microsoft.com/zh-cn/azure/cosmos-db/relational-nosql
选择合适的CosmosDB APls
Azure Cosmos DB
Azure Cosmos DB是Microsoft提供的全球分布式多模型数据库服务。只需单击一个按钮,即可通过Cosmos DB跨任意数量的全球 Azure区域弹性且独立地缩放吞吐量和存储。你可以弹性缩放吞吐量和存储,并通过以下常用API利用个位数毫秒级的快速数据访问:SQL、MongoDB、Cassandra、表或 Gremlin。Cosmos DB为吞吐量、延迟、可用性和一致性保证提供综合服务级别协议(SLA),这是其他数据库服务无法提供的。
Azure Cosmos数据库的API
Cosmos DB提供多种API来处理存储在Cosmos数据库中的数据。默认情况下,可以使用SQL(Core 核心API)来查询Cosmos数据库。Cosmos DB还实现用于Cassandra、MongoDB、Gremlin和Azure表存储的API。可以将常用NoSQL(例如,MongoDB、Cassandra、Gremlin)的客户端驱动程序(和工具)直接指向Cosmos数据库。Cosmos DB支持常用NoSQL API的网络协议,因此可用其实现以下目标:
- 轻松将应用程序迁移到Cosmos DB,同时保留应用程序逻辑的重要部分。
- 使应用程序保持可移植性,并继续保持云供应商的不可知性。
- 为常用的 NoSQL API获取行业领先的、有资金保障的SLA 完全托管云服务。
- 根据需求弹性缩放数据库的预配吞吐量和存储,并且只需为所需的吞吐量和存储付费。这可以大幅节省成本。
支持ACID 事务
SQL API 支持以 JavaScript 存储过程和触发器表示的跨文档事务。事务的范围限定为每个容器中的单个分区,并使用 ACID 语义作为"全部或全无"执行,与其他并发执行的代码和用户请求隔离。如果在 JavaScript 应用程序代码的服务器端执行中引发异常,则会回滚整个事务。
不同的 API 使用不同的数据格式进行存储和有线协议。
官方文档:https://docs.microsoft.com/en-us/azure/cosmos-db/faq
- Core SQL 使用 JSON
- MongoDB 使用 BSON
- Table 使用 EDM
- Cassandra 使用 CQL
- Gremlin 使用 JSON 格式。
除了 Gremlin 和 SQL API 之外,每个 API 都是独立运行的,它们是可互操作的。
表API
Azure Cosmos DB表API 适用于为Azure表存储编写且需要以下高级功能的应用程序:
- 统包式全局分发。
- 全球范围内专用的吞吐量。
- 99%的情况下低至个位数的毫秒级延迟。·保证高可用性。
- 自动编制辅助索引。
为Azure表存储编写的应用程序无需更改代码便可使用表API迁移到Azure Cosmos DB,并可充分利用高级功能。表API包含可用于.NET、Java、Python和 Node.js的客户端 SDK。
Azure表存储
可存储大量结构化数据。该服务是一个NoSQL数据存储,接受来自Azure 云内部和外部的通过验证的呼叫。
Azure表最适合存储结构化非关系型数据。表存储的常见用途包括:
- 存储TB量级的结构化数据,能够为Web 规模应用程序提供服务
- 存储无需复杂联接、外键或存储过程,并且可以对其进行非规范化以实现快速访问的数据集·使用聚集索引快速查询数据
- 使用OData协议和LINQ查询以及WCF数据服务.NET 库访问数据
- 可以使用表存储来存储和查询大型结构化非关系型数据集,并且表会随着需求的增加而扩展。
Azure Cosmos DB表API是表存储的高级产品,可提供吞吐量优化表、全局分发和自动辅助索引。
可以使用Azure Cosmos DB表API或 Azure表存储将结构化的NoSQL数据存储在云中,以便通过无架构设计提供键/属性存储。由于Azure Cosmos DB表API和表存储是无架构的,因此随着应用程序需求的发展,可以轻松调整数据。可以使用Azure
Cosmos DB表API或表存储来存储灵活的数据集,例如Web应用程序的用户数据、通讯簿、设备信息,或者服务需要的其他类型的元数据。
Azure表API vs表存储
想要使用Azure Cosmos DB表API创建表的Azure表存储用户应注意以下这些行为差异:
- Azure Cosmos DB表API使用保留容量模型来保障性能,但这意味着,一旦创建了表,就必须立即支付容量费用,即使容量未被使用。使用Azure表存储时,只需为使用的容量付费。这也说明了,表API在99%的时间里为何能够提供10毫秒的读取延迟和15毫秒的写入延迟 SLA,而Aure表存储提供10秒延迟SLA。因此,使用表API表(即使是不带任何请求的空表)时,要达到Azure Cosmos DB所提供的SLA,必须支付费用来确保提供所需的容量来处理对这些表发出的所有请求。
- 表API返回的查询结果未按分区键/行键顺序排序,因为它们在Azure表存储中。·行键最多可以包含255个字节。
- 批最多可以包含2MB。
- 目前不支持CORS。
- Azure表存储中的表名不区分大小写,但出现在Azure Cosmos DB表API中。
https://docs.microsoft.com/zh-cn/azure/cosmos-db/table-api-faq
Azure Cosmos DB数据库与账户
- Microsoft建议对给定帐户中的所有数据访问使用相同的API。
- 每个订阅为SQL、Gremlin API和表帐户提供一个吞吐量配置容器。
- MongoDB帐户的每个订阅最多三个吞吐量配置集合。
- Azure Cosmos容器上提供的吞吐量专门为该容器保留。容器始终接收已设置的吞吐量。
创建多个账户遵循
一个账户使用一种API,单区域写入和多区域写入可以使用同一账户,也可以分开
配置CosmosDB只读复制Replicas
自动故障转移,写入区域有问题时会根据优先级自动切换成读取区域
多区域写入,费用会多一倍