MongoDB闪亮登场 自我介绍
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB最大的特点就是无Schema限制,灵活度很高。数据格式是BSON,BSON是一种类似JSON的二进制形式的存储格式,简称Binary JSON 它和JSON一样,支持内嵌的文档对象和数组对象。
跟关系型数据库概念对比 Mysql MongoDBDatabase(数据库) Database(数据库)
Table(表) Collection(集合)
Row(行) Document(文档)
Column(列) Field(字段)
数据格式
MongoDB 将数据存储为一个文档,BSON格式。由key 和 value组成。
{ "_id" : ObjectId("5e141148473cce6a9ef349c7"), "title" : "批量更新", "url" : "http://cxytiandi.com/blog/detail/8", "author" : "yinjihuan", "tags" : [ "java", "mongodb", "spring" ], "visit_count" : NumberLong(10), "add_time" : ISODate("2019-02-11T07:10:32.936+0000") } 使用场景大数据量存储场景
MongoDB自带副本集和分片,天生就适用于大数量场景,无需开发人员通过中间件去分库分表,非常方便。
操作日志存储
很多时候,我们需要存储一些操作日志,可能只需要存储比如最近一个月的,一般的做法是定期去清理,在MongoDB中有固定集合的概念,我们在创建集合的时候可以指定大小,当数据量超过大小的时候会自动移除掉老数据。
爬虫数据存储
爬下来的数据有网页,也有Json格式的数据,一般都会按照表的格式去存储,如果我们用了MongoDB就可以将抓下来的Json数据直接存入集合中,无格式限制。
社交数据存储
在社交场景中使用 MongoDB 存储存储用户地址位置信息,通过地理位置索引实现附近的人,附近的地点等。
电商商品存储
不同的商品有不同的属性,常见的做法是抽出公共的属性表,然后和SPU进行关联,如果用MongoDB的话那么SPU中直接就可以内嵌属性。
自我陶醉MongoDB的功能点很多,但是大部分场景下我们只用了最简单的CRUD操作。下面隆重的介绍下MongoDB的功能点,就像你去相亲一样,不好好介绍自己的优点又怎能让你对面的菇凉心动呢?
CRUDCRUD也就是增删改查,这是数据库最基本的功能,查询还支持全文检索,GEO地理位置查询等。
db.collection.insertOne()
单个文档插入到集合中
db.collection.insertMany()
多个文档插入到集合中
db.collection.insert()
单个或者多个文件插入到集合中
db.collection.find( )
查询数据
db.inventory.updateOne()
更新单条
db.inventory.updateMany()
更新多条
db.inventory.deleteOne( )
删除单条文档
db.inventory.deleteMany()
删除多条文档
Aggregation聚合操作用于数据统计方面,比如Mysql中会有count,sum,group by等功能,在MongoDB中相对应的就是Aggregation聚合操作。
聚合下面有两种方式来实现我们需要对数据进行统计的需求,一个是aggregate,一个是MapReduce。
下图展示了aggregate的执行原理:
聚合内置了很多函数,使用好了这些函数我们就可以统计出我们想要的数据。
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
下图展示了MapReduce的执行原理:
总共4条数据,query指定了查询条件,只处理status=A的数据。
map阶段对数据进行分组聚合,也就是形成了第三部分的效果,根据cust_id去重统计。
reduce中的key也就是cust_id, values也就是汇总的amount集合。然后进行sum操作,最终的结果通过out输出到一个集合中。
Transactions