MongoDB概念
概念#
是一种nosql。介于关系型数据库与非关系型数据库之间的一种数据库。
使用场景#
- 日志收集
- 传感器
- 网络爬虫
如何选择#
中小型企业的10亿+算是最大的数据量,不超过则使用MongoDB。超过则是BP, 使用: HBASE。
和mysql对比#
Mysql | MongoDB |
---|---|
table(表) | collection(集合) |
row(行) | document(文档) |
没有列名一致的限制。 |
- 想要严格的操作mongo,创建一个map。net代码写的类要和map里面对字段类型要一致,如果多了一个字段,或者少一个字段,或者类型不对,则不会写入成功。。
- 和mysql区别,mongodb它不能做两个集合连查。。可以通过数据冗余的办法,实现连查的效果。如果一个文档(json)16M会报错。。如果超过,把数据存在多个文档,然后根据一个关联字段去关联就行。。比较特殊--一般的业务完全够用。。。
NoSql 是什么#
写入速度快,因为刷盘机制:写数据的时候,先不要把数据之间存放在硬盘,随机写,耗性能,这就涉及到异步刷盘:先把数据写入到内存,然后根据刷盘机制把数据存放到硬盘。所以有可能造成数据丢失。
拓展1:需要把mysql的数据迁移mongodb里面去,但是需要考虑缓冲区到log之间的时间、log到disk的时间。
拓展2:mysql和mongodb压测对比
1.如果for循环查询,mongodb性能要比mysql要快
2.批量操作。发现mongodb要比mysql要慢?
解决方案。先把刷盘时间改大,把缓冲区空间改大。。
mongo缺点#
- 多表关联:仅支持left outer join
- sql语句支持:查询为主,部分支持
- 不支持多表原子事务,不支持多文档原子事务
- 16MB文档大小限制,不支持中文排序,服务端Javascript性能欠佳
事务#
4版本之后,支持了事务,支持事务之前,必须要搭建集群,如果不是集群,则也不会支持事务。
use test
db.createCollection("userinfo")
s=db.getMongo().startSession()
s.startTransaction()
s.getDatabase("test").userinfo.insert({name:"a"})
> [Error] Transaction numbers are only allowed on a replica set member or mongos
at line 5, column 1
> 时间: 0.011s
## 表示mongodb单机版不能支持我们事务。。
集群方式#
1.副本集。读写分离(提升读的性能),主节点负责写,从节点负责读,通过数据冗余,实现读写分离。
2.分片。多个主节点,多个从节点,每一个主节点负责一部分数据。(提升读与写的性能)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2021-05-25 使用命令行将wsl方式创建的Docker迁移
2021-05-25 Redis初探-事务、持久化、哨兵