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

浙公网安备 33010602011771号