MongoDB 谨献给说MongoDB 这不好那不好的“古董” -- 发展与演进,从3 到 7 的卓越变化

文摘   2024-07-05 06:00   法国  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2300人左右 1 + 2 + 3 + 4 +5+6) 新人分配到6群,准备建立7 群。*(1 2 3 4 5 均没有空位了,请不要在问了谢谢)

MongoDB 从上次“大字报”的事情后,具体参见我和MongoDB不打不相识的过往,得到了一些官方的“小作文”,这里感谢MongoDB 架构师黄东旭老师的帮助,给了我一份MongoDB 编年史与技术变化的路线图的东西,写的是真好。这里狗尾续貂,把PDF的文字迁移到公众号上,让更多的人了解MongoDB的版本发展和进步的历程。

其实上次MongoDB 大领导来的时候我也提出疑问,这MongoDB是真佛系,传统数据库在国内都打成热窑了,各种攻击MongoDB 安全,性能,以及如何替代MongoDB的文章层出不穷,咱们这不争不抢的绅士风格是不是该change一下,不过想一下其实也不用,国内大部分情况都是 RDBMS处理不了的任务 转移到MongoDB, 还没有说MongoDB -> RDBMS的案例,(网上盛传的案例都是国外翻译而来的,一个英国卫报,一个不知名的什么企业)  ,人家大领导一句话,我们更关注于自己的产品如何更好的服务大众,欢迎友商DISS,我只能感叹真是高风亮节了, 都说要搞人设,或许心平气和也是一种自信的象征

本篇让一些对MongoDB 有偏见的“知识落后”者来了解一下最新的MongoDB都有什么。千万别出现用明朝的剑斩杀新中国的官,这样有意思的事情,仅此而已。

喜欢吃瓜的,可以看下面两篇,我怎么和MongoDB 打起来的,以及后续

MongoDB 的一张“大字报”  服务客户,欢迎DISS

临时工说:炮轰阿里云MongoDB司令部 低质高价技术差 你是要疯!!!!

上来先驳斥一些“老顽固”的不思进取,说MongoDB 没有事务的问题。

1 MongoDB 4.0就支持多文档的事务了,支持多文档的 ACID 

2 MongoDB 4.2扩展了事务的支持,允许在分片集群中执行多个文档的事务,这类似于在mysql mycat中间件下的MYSQL分片支持跨库事务,问题是mysql在mycat中间件下,支持事务吗?

3 MongoDB 4.4 继续对事务进行改进,提高了分片上的事务可靠性和执行的效率。

然后咱们在驳斥一下说MonogDB 事务单一,不支持事务回滚

1 MongoDB支持事务回滚 

2 操作简单,和我们在RDBMS 中一致,开启事务通过startsession 启动一个会话在会话中启动事务,然后你可以在这个会话里面进行任何的操作 

3 如果事务需要回滚,使用 abortTransaction 回滚事务,如果要 commit 就使用commitTransaction 来提交事务。

RDBMS有的,MongoDB这也有,千万别大惊小怪。下面奉送一段javascript的事务代码(感谢GPT 4o)

const { MongoClient } = require('mongodb');

async function run() {
    const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true });

    try {
        await client.connect();
        const session = client.startSession();

        session.startTransaction();

        try {
            const usersCollection = client.db('mydatabase').collection('users');
            const ordersCollection = client.db('mydatabase').collection('orders');

            await usersCollection.insertOne({ name: 'Alice', age: 30 }, { session });
            await ordersCollection.insertOne({ item: 'Book', quantity: 1 }, { session });

            await session.commitTransaction();
            console.log('Transaction committed.');
        } catch (error) {
            await session.abortTransaction();
            console.error('Transaction aborted due to an error: ', error);
        } finally {
            session.endSession();
        }
    } finally {
        await client.close();
    }
}

run().catch(console.dir);

在驳斥了谬论后,咱们说说正题

首先要说明的是,目前正式的MongoDB的生产可用版本是 7.X,但我周围和我了解的群里的小伙伴们的MongoDB 还有的在 3.X , 4.X ,少有5.0或更高的版本,这里用简述的方式来进行MongoDB的功能简单罗列,让大家能清晰的看到MongoDB的发展路程。

MongoDB 3.0-3.2

这个版本的MongoDB 我没有用过,这个版本是MongoDB是在2015年开始推行的版本,其中这个版本的功能已经有了 $lookup 功能以及可以搭建小于50个副本的复制集合的功能的MongoDB的版本。这个版本中已经引入了引擎 wiredTiger ,与mmapv1数据库引擎同时在MongoDB的数据库中。这个版本的数据库已经支持了,分片,管道,默认的数据库引擎还是MMAPV1。

MongoDB 3.4

这个版本是我第一次使用MongoDB的版本,这个版本的MongoDB 引入了图形处理功能,通过$graphlookup 聚合来处理图形数据中链接关系,并且加入了读偏好的选项,这期间复制集的功能变得强悍,对于选举的机制进行了改进,并且准备将数据库的引擎从MMAPV1 迁移到 WiredTiger数据库引擎上,并添加了文档的验证功能,也就是我们传统数据库上的约束,提升了数据查询的能力和速度增加了数据加密和传输加密的功能。

MongoDB 3.6

这个版本是曾经长时间使用的一个版本,并且这个版本现在还有很多企业在用,这个版本中的一些特性非常有用,必然引入了会话的概念,允许在多个操作之间共享上下文,引入了$facet操作允许多维度的数据分析,增加了地理空间查询的能力,改进了聚合的框架,将分片的管理和性能进行了提升。同时还有如IP 白名单,因果一致性,对数组更新的速度的提升。

MongoDB 4.4

支持跨分片的事务,允许多个分片对多个文档,跨集合,跨分片的事务处理,确保事务的一致性,添加了更多的聚合操作如accumulator, $function 等对于聚合管道的灵活性有所加强,支持多字段索引提高查询能力,对于索引建立中如果有失败的情况,可以在失败后重新构造索引。对于写的的性能也有优化和提升,对时序的序列进行了优化。

MongoDB 5.0

客户可以选定使用的API,保证更新版本后的客户端的兼容性,减少版本更新后API更换的导致的DOWN机时间,提供了时序集合的支持,优化了时间戳数据的存储和查询,对于物联网的场景有强有力的支持,对于金融场景中日志的记录也有强有力的支持,并且5.0中解决了MongoDB分片中最大的一个问题,实时重新分片,更好的管理分片数据的平衡性,在索引上也进行了改进,对于通配符和复合索引有了更强的支持,提供了实时备份的功能,可以恢复到任意指定时间点,同时也给出了新的客户端的工具 mongoshell

所以在整体的版本中,5.0 是一个重大功能的更新点也是版本功能的一个重要的分割线。2022后MongoDB的版本更新速度,明显是加速了,后续2023 2024推出了 MongoDB 6.0 MongoDB 7.0

MongoDB 6.0

MongoDB 6.0 引入了新的查询引擎SBE(slot-based execution),这是MongoDB 6.0最大改进,通过新的查询引擎的加入,针对复杂查询和大数据集查询,新的引擎查询优势明显,并且优化了数据存储和检索的性能,进一步增强了时序数据支持,提高了时序数据的存储和查询性能,对于副本集初始化方式进行了提高.

MongoDB 7.0

MongoDB 7.0 持续更新在对原有的数据写入性能和查询优化性能,索引机制持续优化的情况下,扩展了对于新硬件的支持,如针对ARM环境下的架构硬件的支持,对于ARM环境下的硬件产品进行了更多的适配,同时优化了存储引擎对于NVMe SSD的优化,提升了数据的读写速度和整体的性能,同时针对云上的atlas 产品提供了serverless instance的服务,可以根据工作复杂动态扩展,并且在AWS,AZURE,GOOGLE CLOUD等多云环境下MongoDB 的数据管理和迁移的能力。

总体来说,前两天看了几篇国外2024分析数据库市场的文章,也在群里贴过(5群),NoSQL的市场是不大14-15%,可在不大这也是市场,竞争小压力小,70-80%的市场是 RDMBS可卷的有多厉害,圈内的都知道,截止目前NoSQL的市场MongoDB 说2 ,那个敢接1 ,RDBMS数据库产品中的NoSQL支持,只能是瘸子给赛跑运动员撑场面,你还没有那个资格。

MongoDB 还有其独特的用法,如GridFS 将MongoDB 作为分布式文件存储系统,哪个传统的RDBMS 可以拿来当分布式文件存储用,PG 的地理位图POSTGIS业界第一 ,MonogDB 也有自己的地理位图功能,能和POSTGIS 掰掰手腕不是别的数据库是MongoDB的地理位图功能 GeoJson, 时序数据处理MongoDB 也是专业的。 

时序数据的应用场景

  1. 物联网(IoT):传感器数据监控和分析。

  2. 金融市场:股票价格、交易量等金融数据分析。

  3. 服务器监控:日志数据分析,服务器性能监控。

  4. 环境监测:气象数据、污染物浓度监测。


相当于一个MongoDB可以支持除了二维表格以外的大部分需求,更专业,原生的分布式存储让数据更安全,在还在烦恼,怎么搭建高可用,怎么做负载均衡的时候,MongoDB天生的具有的能力,也没见拿着这个把柄耻笑RDBMS的 “弱鸡”,互相尊重才能更好的发展,展现自己的能力不只有互相诋毁这一种方法。



公众号与MongoDB有关的文章:

MongoDB 入门教学贴 单机的安装与设置 (内部培训贴)
MongoDB  聚合怎么写,更复杂的聚合案例
MongoDB 的一张“大字报”  服务客户,欢迎DISS
临时工访谈:NoSQL 大有前景,MongoDB DBA 被裁员后谋求新职位
临时工说:炮轰阿里云MongoDB司令部 低质高价技术差 你是要疯!!!!
MongoDB  挑战传统数据库聚合查询,干不死他们的
MongoDB mongoshake 迁移分片到复制集合
MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备


置顶文章

临时工说:数据库和周边做不好原因是产品经理的锅?读从OtterTune的倒下说起-有感
临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?
临时工访谈:问金融软件开发总监  哪些业务不用传统数据库
PostgreSQL  15 16 小版本更新信息小结 版本更新是不是挤牙膏
临时工访谈:临时工 写了6年多公众号赚了多少钱?
MySQL 8.0 小版本更新要点,那个小版本更稳定(8.0.24-8.0.37)
MySQL 8.0 版本更新 要点 列表 (8.0-8.0.23)
MYSQL 版本迁移带来 严重生产事故“的”分析


往期热门文章:

SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级

MYSQL 版本迁移带来 严重生产事故“的”分析

PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话

PostgreSQL 如何通过工具来分析PG 内存泄露

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:我很普通,但我也有生存的权利,大龄程序员 求职贴
临时工说: 快速识别 “海洋贝壳类” 数据库方法速递
临时工说:国产 数据库 销售人员  图鉴
临时工说:DBA 是不是阻碍国产数据库发展的毒瘤 ,是不是?从国产DB老专家的一条留言开始 (其实更好看的是文章下方的留言)

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定

MongoDB 不是软柿子,想替换就替换

PostgreSQL  熊灿灿一句话够学半个月 之 KILL -9

MongoDB  挑战传统数据库聚合查询,干不死他们的

临时工说:国内数据库企业存活   “三板斧”

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一  (阿里云组团PK笔者实录

临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底  为什么?

临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)

临时工说:搞数据库 光凭的是技术,那DBA的死多少次?

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?
临时工说:分析当前经济形势下 DBA 被裁员的根因
PostgreSQL PG_DUMP 工作失败了怎么回事及如何处理
MySQL 八怪(高老师)现场解决问题实录
PostgreSQL 为什么也不建议 RR隔离级别,MySQL别笑
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
临时工访谈:恶意裁员后,一个国产数据库企业程序员的心声
临时工说:上云后给 我一个 不裁 DBA的理由
PolarDB for PostgreSQL  有意思吗?有意思呀
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
临时工说:裁员裁到 DBA 咋办  临时工教你 套路1 2 3
PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
MONGODB  ---- Austindatabases  历年文章合集
MYSQL  --Austindatabases 历年文章合集
POSTGRESQL --Austindatabaes 历年文章整理
POLARDB  -- Ausitndatabases 历年的文章集合
PostgreSQL  查询语句开发写不好是必然,不是PG的锅
SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)
PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。


截止今天发布1174篇文章

AustinDatabases
关于数据库相关的知识分享
 最新文章