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.分片。多个主节点,多个从节点,每一个主节点负责一部分数据。(提升读与写的性能)

posted @   ChrisLeon  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2021-05-25 使用命令行将wsl方式创建的Docker迁移
2021-05-25 Redis初探-事务、持久化、哨兵
点击右上角即可分享
微信分享提示
主题色彩