快速阅读:MongoDB 3.6 新特性

Jesse是MongoDB的一名开发工程师,他在博文中详细讲述了MongoDB 3.6的一些新特性,博文内容小结如下,详细请参考原文

1 协议压缩(Wire Protocol Compression)

    在3.6中Client和Server之间的通信协议增加了压缩功能,使得MongoDB可以在带宽受限的主机上工作的很好,例如远程的云服务器主机。

2 OP_MSG消息格式

在3.6之前,MongoDB的通信协议扩展性很差,并且存在性能问题。在3.6中,Mathias Stearn 重新设计了一套通信协议,在新的协议中Client和Server均使用同一的OP_MSG消息格式,OP_MSG消息具有很好的扩展性,配合新协议的压缩功能,可以极大地提升网络传输效率。 只要升级Driver便可以享受 Wire Protocol Compression 和 OP_MSG 带来的性能提升,而不需要改动现有代码。

3 自动写重试(Retryable Writes)

试想一下,如果客户端执行了一次写操作,但是在读取响应时发生了网络错误,在这种情况下客户端应该如何处理错误呢?

collection.update_one({'_id': 1}, {'$inc': {'x': 1}}) 

由于$inc操作不是幂等的,如果盲目重试则会导致数据出错。3.6 为我们带来了好消息,在这种情况下驱动会自动重试。服务器端会为每个操作分配一个operation id,并且缓存每个操作的处理结果。在重试时,如果操作已完成,则会直接返回缓存的处理结果。

4 因果一致性(Causal Consistency)

在3.6以前,如果我们先向 primary 节点插入一条数据,然后立即向一个 secondaries 节点查询该条数据,很可能操作会失败,因为 primary 节点的数据变化可能尚未同步至 secondaries 节点。在3.6中,提出了 Session 的概念,客户端可以预先创建一个Session,在该Session中执行的所有操作将会按照顺序执行。

5 Change Streams

在3.6以前,如果我们想跟踪数据库的实时变化,只能 tail oplog。oplog 是系统操作日志,所以tail的代价比较大。在3.6中,我们可以利用 Change Streams 跟踪一个collection的实时变化。利用 Change Streams,我们可以非常方便地实现一个发布订阅模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术

解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题

最近自己在公司项目修改一些代码以后,出现如题的错误,后来各种Google等,最终找到了解决办法。

651
来自专栏Java编程技术

Spring之WebFlux

在spring5.0前,web技术栈都是阻塞式的,虽然servlet3.0引入了非阻塞API的使用,但是这种异步是不彻底的,因为比如filter、servlet...

1121
来自专栏Linux运维学习之路

zabbix自动发现与自动注册及SNMP监控

自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户...

6818
来自专栏Java架构沉思录

再谈分布式ID生成方案

昨天沉思君分享了一篇关于分布式ID生成方案的文章《分布式ID常见解决方案》,文中介绍了几种常见的分布式ID生成方案,并讨论了其优缺点。刚好最近沉思君在看李艳鹏老...

1254
来自专栏PHP技术大全

WEB安全Permeate漏洞靶场挖掘实践

最近在逛码云时候发现permeat靶场系统,感觉界面和业务场景设计的还不错.所以过来分享一下.

3653
来自专栏JadePeng的技术博客

ELK日志套件安装与使用

1、ELK介绍 ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器。其中Logs...

2944
来自专栏张戈的专栏

解决Nginx Helper插件一键清理缓存功能导致网站打不开问题

5 月份,张戈博客分享了一篇《Nginx 开启 fastcgi_cache 缓存加速,支持 html 伪静态页面》的文章。文中也提到了 WordPress 有一...

3909
来自专栏Vamei实验室

Python应用01 原始Python服务器

之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作。而我的想法是,掌握一个类似于框架...

23510
来自专栏容器云生态

使用系统内置script和scriptreplay命令来记录操作记录

想要记录整个操作流程,需要使用到两个工具,script和scriptreplay,实验环境是CentOS6.6,默认都是安装的! script命令用来记录整个历...

2387
来自专栏程序员互动联盟

【答疑解惑第三十九讲】进程与线程

疑惑一 什么是进程? 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region...

3153

扫码关注云+社区