Azure CosmosDB (3) 选择适当的一致性级别
《Windows Azure Platform 系列文章目录》
绝大部分的商业分布式数据库,要求开发人员选择两个极端的数据库一致性:强一致性(Strong Consistency)和最终一致性(Eventual Consistency)
在笔者之前的文章中,我们介绍了Azure CosmosDB的五种一致性级别:
- Strong (强一致性)
- Bounded Staleness
- Session (会话一致性)
- Consistent prefix (一致性前缀)
- 最终一致性 (Eventual Consistency)
五种一致性级别在可用性(availability)和性能(Performance)方面进行了权衡,并有全面的SLA保障。
以下简单的注意事项将有助于我们在常见方案中选择合适的一致性场景。
SQL API:
如果我们的应用程序使用CosmosDB SQL API生成的,请注意以下几点:
1.在大部分的使用场景中,Session (会话一致性)是最佳,也是推荐的选项
2.如果应用程序需要强一致性,建议使用Bounded Staleness级别
3.如果需要提供比Session (会话一致性)提供更严格的写入毫秒延迟保证,建议使用Bounded Staleness级别
4.如果应用程序需要最终一致性(Eventual Consistency),建议使用Consistent prefix (一致性前缀)级别
5.如果需要的一致性级别不如Session (会话一致性)那么严格的话,建议使用Consistent prefix (一致性前缀)级别
6.如果需要最高的可用性和最低的延迟,请使用终一致性(Eventual Consistency)级别
7.如果需要更高的数据持久性而不想牺牲性能,可以在应用层创建自定义一致性级别
MongoDB API
MongoDB 3.4 与 Azure Cosmos DB 一致性级别之间的映射
| MongoDB 3.4 | Azure Cosmos DB (多区域) | Azure Cosmos DB (单区域) |
| Liner | Strong | Strong |
| Majority | Bounded Staleness | Strong |
| Local | Consistent prefix (一致性前缀) | Consistent prefix (一致性前缀) |
一致性保证:
1.当一致性级别设置为Bounded Staleness,CosmosDB保证客户端始终读取前一次的写入值,同时有一个过期窗口(Staleness Windows)
2.当一致性级别设置为Strong (强一致性),过期窗口(Staleness Windows)为0,保证客户端读取写入操作的最新的值
3.对于剩余的三个一致性级别,过去窗口在很大程度上取决于你的工作负载。比如,如果在数据库上没有执行任何写入操作,则Session (会话一致性),Consistent prefix (一致性前缀)和最终一致性 (Eventual Consistency)级别的读取操作,和Strong (强一致性)的读取操作,结果是一样的
Azure CosmosDB (3) 选择适当的一致性级别的更多相关文章
- Azure CosmosDB (2) CosmosDB中的数据一致性
<Windows Azure Platform 系列文章目录> 为了保证分布式数据库的高可用性和低延迟性,我们需要在可用性.延迟和吞吐量之间进行权衡. 绝大部分的商业分布式数据库,要求开发 ...
- Azure CosmosDB (4) 在一致性(Consistency)可用性(Availability)和性能(Performance)之间的权衡
<Windows Azure Platform 系列文章目录> 我个人感觉,这个概念和分布式系统中的CAP原则是类似的: CAP原则指的是在一个分布式系统中,Consistency(一致性 ...
- Azure CosmosDB (8) 性能指标Request Unit-RU
<Windows Azure Platform 系列文章目录> 本次将介绍Cosmos DB的性能指标RU (Request Unit). 总的来说,我们设置的Azure CosmosDB ...
- Azure CosmosDB (5) 高可用性
<Windows Azure Platform 系列文章目录> Azure Cosmos DB 透明地复制与您的Cosmos帐户关联的所有Azure区域中的数据. Cosmos DB 对数 ...
- Azure CosmosDB (7) 分区键Partition Key
<Windows Azure Platform 系列文章目录> Azure Cosmos DB使用分区键(Partition Key),来对数据进行水平缩放(Horizon Scale), ...
- Azure CosmosDB (6) 冲突类型和解决策略
<Windows Azure Platform 系列文章目录> 当我们为CosmosDB配置多个Azure Region写入,就需要考虑冲突类型和解决策略. 对于配置了多个写入区域的 Az ...
- Azure CosmosDB (1) 概述
<Windows Azure Platform 系列文章目录> Azure CosmosDB是一个全球分布式数据库服务(Global Distributed Database),提供低延迟 ...
- Azure CosmosDB (14) 使用Postman访问CosmosDB REST API
<Windows Azure Platform 系列文章目录> 今天研究了一下如何使用Postman访问Azure CosmosDB. CosmosDB API接口,可以参考:https: ...
- 落地Azure CosmosDb的一个项目分享
我们遇到了什么? 我们有这么一个业务场景,就是某供应商会去爬取某些数据,爬到后会发到一个FTP上,然后我们定时去获取这些数据 这个数据有大有小,小的30多M数据量百万级,大的数据量能到数百M上千万数据 ...
随机推荐
- js中Undefined 和 Null的区别
Undefined 和 Null Undefined 这个值表示变量不含有值. 可以通过将变量的值设置为 null 来清空变量. <!DOCTYPE html> <html> ...
- Petrozavodsk Winter Camp, Day 8, 2014, Mosaic
给你三个数字a,b,c,让你用1-m的数字凑出来 结论:有2个1和2个2肯定凑不出来,然后就搜索 #include <bits/stdc++.h> using namespace std; ...
- ABBYY Cup 3.0G3. Good Substrings
题意:定义一个串合法,在n个串中出现次数在li到ri中.问s的所有本质的子串有是多少合法的 题解:把所有串用分隔符分开建sam,记录一个该节点对应每个串的出现次数,topo排序后,当该节点s出现次数不 ...
- django2_开发web系统接口
1.单独创建.../sign/views_if.py文件,开发添加发布会接口 from django.http import JsonResponse from cmdb.models import ...
- dubbo 异步回调
dubbo 异步回调的使用 业务接口: public interface HelloService { String sayHello(); void sayHi(String name); } 回调 ...
- spring @bean 的理解
1.spring @bean 注解只能注解到方法上 2. 该方法必须返回一个实例对象 3.该过程相当于,通过一个方法去构造一个实例对象 ,然后交给spring管理 4.使用场景 如需要构造出一个特 ...
- Shell脚本的学习笔记一:变量
三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...
- Canvas名侦探柯南-canvas练习
var canvas=document.getElementById("canvas"); var ctx=canvas.getContext("2d"); / ...
- 写了一个Java的简单缓存模型
缓存操作接口 /** * 缓存操作接口 * * @author xiudong * * @param <T> */ public interface Cache<T> { /* ...
- How Region Split works in Hbase
A region is decided to be split when store file size goes above hbase.hregion.max.filesize or accord ...