快速阅读: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 条评论
登录 后参与评论

相关文章

扫码关注云+社区