1. MongoDB概览

1. MongoDB概览

image-20220724220841351

1. 什么是NoSQL

​ NoSQL:Not Only SQL ,本质也是一种数据库的技术,相对于传统数据库技术,它不会遵循一些约束,比如:sql标准、ACID属性表结构等。

优点

  • 满足对数据库的高并发读写
  • 对海量数据的高效存储和访问
  • 对数据库高扩展性和高可用性
  • 灵活的数据结构,满足数据结构不固定的场景

缺点

  • 一般不支持事务
  • 实现复杂SQL查询比较复杂
  • 运维人员数据维护门槛较高
  • 目前不是主流的数据库技术

分类

序号类型应用场景典型产品
1Key-value存储缓存,处理高并发数据访问Redis memcached
2列式数据库分布式文件系统Cassandra Hbase
3文档型数据库Web应用,并发能力较强,表结构可变mongoDB
4图结构数据库社交网络,推荐系统,关注构建图谱infoGrid Neo4J

文档本质(即bson)

​ 文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这是与关系数据库最不同的点。

列式存储

行式存储和列式存储主要是在物理存储的选择上面,这里主要是选择从实体的完整性角度进行存储,还是从实体特征维度进行存储,行式存储就是以实体为单位进行存储,在物理存储上,一个实体(的特征属性)紧挨着另外一个实体;列式存储就是从实体特征维度进行存储,通常是以列为物理存储单元,这种存储模式也决定了查询的模式也是基于列取查询;所以,当我们想要按照实体去查询列式存储的数据,一般都是需要并行查询,所以列式存储天生的是分布式数据库的架构。

​ **在OLTP场景,更多的基于实体的维护和查询,但是在OLAP场景,则是更多地从实体特征角度进行数据处理(统计),所以在OLAP的场景下,如果还是使用行式存储,会导致大量的无谓的遍历,**比如想要对某个列进行所有数据的统计,因为是行式存储,需要遍历所有的实体的所有的属性;如果列式存储,则只需要按照列进行查询即可,因为列式存储是以列一个物理存储单元,所以遍历只要遍历相应列的物理存储文件即可。

​ 那么从这个角度上面来讲,HBase其实是行列存储的一个综合体从宏观角度是按照列簇为单位进行存储,从微观角度,每一个列簇的单元是由key,value的键值对组成(可能是很多个键值对,因为一个列簇可以包含很多列),但是values其实是行式存储,另外HBase并不建议采用多个列簇,列簇不要超过2个,所以列式存储的优势并没有完全发挥出来,但是基于HBase的技术架构,只能这样处理,如果是纯粹的列式存储对于HBase的性能会有大影响。

采用列式存储还有一个好处就是可以方便的进行编码和压缩,因为一列中的值大概率是有大量重复的,可以对于这些重复的值进行编码以及压缩,节省存储空间。

行式存储: …(a1a2a3)(b1b2)(c1c5)…

列式存储: …(a1b1c1)…(a2b2)…(a3)…(c5)…

为什么HBase建议列簇不要超过2个?

1. memstore只要一个满了就会刷,未满的列簇会形成大量的小文件,增加查询成本;以及会潜在增加compact的次数(文件数量、文件大小都会导致compact);
  2. 文件的Split也有类似问题,只要一个列簇文件大小达到了split,就会将这个region下所有的列簇的进行分割。

2. MongoDB基本概念

image-20220724222656669

image-20220724222803449

3. MongoDB使用场景

​ 并没有某个业务场景必须要使用 MongoDB才能解决,但使用 MongoDB 通常能让你以更低的成本解决问题(包括学习、开发、运维等成本)

​ MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例:

  • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
  • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
  • 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
  • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等

4. 什么场景不能用MongoDB

  • 高度事务性系统:例如银行、财务等系统。MongoDB对事物的支持较弱;
  • 传统的商业智能应用:特定问题的数据分析,多数据实体关联,涉及到复杂的、高度优化的查询方式;
  • 使用sql方便的时候;数据结构相对固定,使用sql进行查询统计更加便利的时候;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月玲珑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值