mongodb的简介与适用场景

2020-09-21 17:31:37 浏览数 (1)

先谈谈Nosql

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。 对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个取舍平衡。

  • C: Consistency 一致性 对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如:银行转账 如果经过一段时间后要求能访问到更新后的数据,则是最终一致性,弱一致性。如:在线字典,例子个数 通常靠锁保证,影响系统的并发度
  • A: Availability 可用性 对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。无论请求是否出错。 当向数据库写入时,mongodb默认不等待响应消息。使用getLastError命令来确保操作已经正确执行。
  • P:Partition Tolerance分区容错性 分区容错性和扩展性紧密相关。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求。

mongodb简介

  • 分布式文档存储数据库
  • 面向集合(文档)的类JSON格式存储方式,对面向对象编程语言友好
  • 读写高性能(相对于RDBMS),高并发下的数据存储
  • 扩展性好,通过增加机器实现性能扩展。如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • 存储数据无模式,适合半结构化及非结构化数据存储,数据格式经常发生变
  • 最接近RDBMS的NoSql数据库,介于键值对nosql和关系型数据库之间
  • 支持mapreduce数据批量处理与聚合
  • 支持大文件存储,GridFS提供了一种将大型文件存储在MongoDB的文件规范
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C ,PHP,C#等多种语言。

官方网站

https://www.mongodb.org/

mongodb的局限性与不足

  • 在32位系统上,不支持大于2.5G的数据。
  • 单个文档大小限制为 4 M/16 M(1.8版本后升为16M)
  • 不支持join操作和事务机制,辩证角度看这也是优点。CAP原理。
  • 对内存要求比较大,至少要保证热数据(索引,数据及系统其它开销)都能装进内存
  • 用户权限方面比较弱,这一点MongoDB官方推荐的是将机器部署在安全的内网环境中,尽量不要用权限。
  • 占用大量的磁盘空间。空间预分配,删除记录不释放空间,定期整理记录。
  • 从维护工具,人才,实践经验较关系数据库都很缺乏

应用场景

  • 数据模型简单,无复杂关联关系的大数据存储与检索。
  • 用户需求频繁变化,数据无固定模式。
  • 网站数据(弱一致性):Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
  • 大尺寸,低价值的数据:如日志数据,用户行为数据,历史数据
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询

不适用的场景如下

  • 要求高度事务性的系统,如银行转账。强业务数据状态相互影响,频繁变换,如:企业OA。
  • 传统的商业智能应用。针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
  • 复杂的跨文档(表)级联查询。在查询条件复杂的情况下,相对于RDBMS并无明显优势,甚至没有优势或处于劣势。

总之,具备以下几点请考虑使用mongodb

  1. 你期待系统面对很高的写负载需要有更好的表现,如大规模并发日志收集系统
  2. 你的数据将爆发式增长,对可扩展性提出要求。
  3. 你的数据模型较为简单,查询条件简单。
  4. 你的数据结构较为松散
  5. 对性能要求较高,数据一致性要求较低

0 人点赞