MySQL vs MongoDB:在缓存和数据持久化方面的对比

老实说,在谈论MySQL和MongoDB的缓存和持久化时,我首先不得不谈谈我遇到的现实情况。
如果你想一想,当我们的系统第一次引入时,MySQL 的查询缓存是一个救星——查询同一份报告数百次并直接从缓存检索数据的乐趣在我看来是相当酷的。
但后来业务量增加了,我发现这个东西没什么用了。
我记得一次更新操作清除了一半表的缓存,导致数据库 CPU 激增。
运维小哥急得满头大汗,最后无奈只能关掉缓存。

MongoDB的缓存,它的内存+LRU机制用起来确实很舒服。
我们有一个处理实时用户行为数据的项目。
文档更新频繁但热点数据始终悬浮在内存中,读取速度如玩游戏一样快。
最酷的是 MongoDB 不需要手动调整缓存。
它会根据访问频率丢弃数据,无需担心。

老实说,就持久性而言,MySQL的WAL机制是相当可靠的。
我们公司经历过几次重大的数据库宕机,一直依靠binlog来恢复数据,没有任何延迟。
但在备份数据时,使用mysqldump导入整个驱动器有时会非常慢。
然后我改用PerconaXtraBackup,效率高多了。

MongoDB端,WiredTiger工具配合oplog,数据恢复也相当稳定。
我们测试了副本集转换,速度非常快。
还有一次,我将数据库碎片从5 00G扩展到5 TB。
晚上做完,第二天查看监控。
这表明性能完全没有受到影响。
当时我心里就有些感触——这扩展能力真是太棒了。

坦白说,选择哪一个要根据具体情况而定。
如果你的业务查询是固定的,需要多读少写,MySQL可能很适合;如果需要高并发读写和非结构化数据,MongoDB更好。
然而,如今许多项目都使用混合方法,以 MySQL 作为事务表,以 MongoDB 作为文档库。
让每个人各取所需。
我的经历可能有点极端,但这都是来自于走进陷阱。

构建大规模系统,真的可以考虑使用MongoDB替代MySQL,既灵活还好扩展

说白了,用MongoDB替换MySQL比较复杂,因为它不是简单的数据库替换,而是需要考虑整个业务架构的适应性。

首先我们扩展讨论一下最重要的场景:MongoDB特别适合我们去年跑的实时电商推荐项目。
峰值数据量达到3 000QPS。
The nested structure of the document model directly saves 8 0% of the join query.然而,后来发现事情有些不对劲。
Replica set latency control during high write concurrency had to be adjusted manually.另一点是物联网的设备数据架构并不固定。
虽然MongoDB开发效率很高,但有一个细节至关重要。
例如,某项目测试冷数据存储的冗余度比MySQL高1 5 %。
等等,还有别的事。
将移动应用离线缓存与 MongoDB 同步非常方便,但如果你正在开发金融交易系统,其弱的交易能力绝对是一个问题。

我一开始以为MongoDB的分布式架构很棒,但后来我意识到有些不对劲。
分片键选择错误,整个集群的查询性能可能不如单表优化。

最后提醒:选择数据库时,不要只看性能测试报告。
MySQL的权限控制其实更细粒度,但是MongoDB的水平扩展性确实值得尝试。

mongodb与mysql的区别是什么

嗯...MongoDB 和 MySQL...是的...区别。

数据模型...MongoDB是一种文档...不是...就像...一个大皮包...你可以在里面放任何东西...无关紧要什么域...什么类型...无关紧要...就像...2 02 2 ...一家公司...用它来存储用户信息...也许在文档中...基本信息,订单记录,也许...偏好标签...把它们都放进去...非常灵活...MySQL不同...它是关系型...就像...一张表...逐行...逐列...很有规律...像医院...病人信息管理...一张表是病人...另一张表是病历...你要用...主键,外键...很清楚...但是...如果你想查...某一个病人...所有的治疗记录...你得把表连起来...查询...比较复杂...
查询方法...MongoDB...它的查询语法...好像...JavaScript...是的...可以直接查询...比如嵌套的东西...查看订单状态... db.users.find({ "orders.status": "waiting" })... 像这样... MySQL... 必须使用SQL... SELECT、JOIN... 来取多个表... 关联... 查询... 语句较长...
使用场景... MongoDB... 我觉得... 适合那个... 数据类型很多... 不是很固定... 比如... 日志文件... 或者... 传感器... 数据流... 快速开发时... 原型... 让事情... 更快... MySQL...比较好...比如说...财务账本...银行系统...数据结构...很清晰...逻辑...很严谨...交易...还需要保证...一致性...不能复杂...
可扩展性...MongoDB...它有分片...是的...就是...自动...水平切片...数据...放在很多机器上...适合...数据量...增长很快...比如...某个应用...用户数...2 02 2 年...某个城市...增加...MySQL...成长比较困难...主从复制...读写分离...必须...配置...分库分表...管理...有点...头疼...
数据一致性...MongoDB...它默认的...可能不是...强一致性...也就是...最终一致性...也就是说...可能会有一点延迟...数据不同步...但是...性能...可能更高...MySQL...更诚实...强一致性...事务...完成...数据保证...立即...一致...没有错...
事务支持... MongoDB...4 .0以后才支持...多文档事务...但是...性能...有点...没胯...MySQL...事务...已经支持很久了...ACID...做得很好...复杂事务...处理...还好...
查询优化...MongoDB...它依赖于...BSON格式...和...集合...它自己的优化...快...MySQL...它依赖...索引...la查询...优化器...查询...计划...组织...运行慢慢地...特别是...多表关联...查询...它处理...相当好...
社区支持...两者...活跃的社区...文档...还有... MySQL...历史...更长...传统公司...使用更多...MongoDB...在...开发者社区...例如...Node.js...可能...更流行...
嗯...总结一下...MongoDB...是...灵活...开发快速...适合...非结构化数据...MySQL...是...规则...事务性强...适合...结构化数据...选择...这取决于...您自己的...应用程序...您需要什么...数据模型...一致性...扩展方式...慢慢来...选择...