恕我直言,牛逼哄哄的MongoDB你可能只会30%

MongoDB闪亮登场 自我介绍

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB最大的特点就是无Schema限制,灵活度很高。数据格式是BSON,BSON是一种类似JSON的二进制形式的存储格式,简称Binary JSON 它和JSON一样,支持内嵌的文档对象和数组对象。

跟关系型数据库概念对比 Mysql MongoDB
Database(数据库)   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的功能点,就像你去相亲一样,不好好介绍自己的优点又怎能让你对面的菇凉心动呢?

CRUD

CRUD也就是增删改查,这是数据库最基本的功能,查询还支持全文检索,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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfdg.html