MongoDB最开始是不支持事务的,在MongoDB中,对单个文档的操作是原子性操作。所以再设计的时候可以使用嵌入的文档和数组来描述数据之间的关系,这样就不用跨多个文档和集合进行操作,也就通过了单文档原子性消除了许多实际用例对多文档事务的需要。
任何事物都是有限制的,某些场景还是不能完全通过内嵌的方式来描述数据的关系,还是会存在多个集合,对于使用MongoDB的用户来说,如果能支持事务就很方便了。
不负众望,MongoDB 4.0 版本的发布,为我们带来了原生的事务操作。
Indexes索引不用我多说了,作用大家都知道。单索引,组合索引,全文索引,Hash索引等。
db.collection.createIndex({user_id: 1, add_time: 1}, {background: true})创建索引特别要注意的是将background设置为true,在建索引的过程会阻塞其它数据库操作,background可指定以后台方式创建索引,默认为false。这可是血的教训呀,切记切记。
SecurityMongoDB中的安全需要重视,目前启动不知道有没有强制的限制,以前启动的时候可以不指定认证的方式,也就是不需要密码即可访问,然后很多人都直接用的默认端口,暴露在公网上,给不法分子有机可乘,出现了数据被删,需要用比特币来找回数据的案例比比皆是。
还是要开启安全认证,内置了很多角色,不同的角色可操作的内容不一样,控制的比较细。
Replication副本集是一组相同数据集的MongoDB实例,同时在多个节点存储数据,提高了可用性。主节点负责写入,从节点负责读取,提高整体性能。
副本集由下面的组件构成:
Primary:主节点接收所有的写操作。
Secondaries:从节点会从主节点进行数据的复制,维护跟主节点相同的数据。用于查询操作。
Arbiter:仲裁节点本身不存储数据,只参与选举。
Sharding分片是MongoDB绝对的亮点,将数据水平拆分到多个节点。MongoDB的分片是全自动的,我们只需要配置好分片的规则,它就能自动维护数据并存储到不同节点。MongoDB使用分片来支持大数据量的存储和高吞吐量的操作。
下图是Mongodb的分片集群架构图:
MongoDB分片集群由以下组件够成:
Shard:每个shard的数据都是独立完整的一份。并且可以作为副本集部署。
mongos:mongos是查询路由器,在客户端和服务端中间的一层,请求会直接到mongos,由mongos路由到具体的Shard。
Config Servers:存储集群所有节点、分片数据路由信息。
GridFSGridFS是MongoDB的一个子模块,主要用于在MongoDB中存储文件,相当于MongoDB内置的一个分布式文件系统。
本质上还是讲文件的数据分块存储在集合中,默认的文件集合分为fs.files和fs.chunks。
fs.files是存储文件的基本信息,比如文件名,大小,上传时间,md5等。fs.chunks是存储文件真正数据的地方,一个文件会被分割成多个chunk块进行存储,一般为256k/个。
如果你的项目中用到了MongoDB,那么你可以使用GridFS来构建一个文件系统,这样就不用去购买第三方的存储服务了。
GridFS的好处是你不用单独去搭建一个文件系统,直接使用Mongodb自带的即可,备份,分片都依赖MongoDB,维护起来也方便。
知识点总结下图是我自己总结的一些知识点,作为一个后端开发来说,能掌握下面的内容就已经不错了,毕竟我们又不是要去抢DBA的饭碗,如果大家业余时间要学习的话可以按照下面的点进行学习,几年前我录制了一套视频,在我的网站上,大部分内容都覆盖到了。
工作必用 MongoDB跟Mysql的语法对比 Spring Boot中集成MongoDB加入MongoDB的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>配置MongoDB的信息:
spring.data.mongodb.database=test spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 // 用户名,密码省略.......直接注入MongoTemplate就可以操作MongoDB:
@Autowired private MongoTemplate mongoTemplate; 使用示列