mongodb java 开源_浅谈mongodb的使用场景及优缺点

NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路。

MongoDB:

它是一个内存数据库,数据都是放在内存里面的。

对数据的操作大部分都在内存中,但 MongoDB 并不是单纯的内存数据库。

MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 的存储特点

在传统的关系型数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。

由此可见,相比较 MySQL,MongoDB 以一种直观文档的方式来完成数据的存储。它很像 JavaScript 中定义的 JSON 格式,不过数据在存储的时候 MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON。

MongoDB 的应用场景

在另一方面,对开发者来说,如果是因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的这一鲜明特性就脱颖而出了。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。

不过 MongoDB 对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB 还是并不适合此类型的应用。

非关系型数据库(NoSQL ),属于文档型数据库。先解释一下文档的数据库,即可以存放 xml、json、bson 类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

存储方式:虚拟内存+持久化。

持久化方式:

MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。

然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

至于 mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。

主要特点:

MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易。

你可以在 MongoDB 记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

你可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。

如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。

MongoDB 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。

MongoDB 使用 update() 命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。

MongoDB 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。

Map 和 Reduce。Map 函数调用 emit(key,value) 遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。

Map 函数和 Reduce 函数是使用 JavaScript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作。

GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件。

MongoDB 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#、 等多种语言。

1. 它里面自带了一个名叫 GirdFS 的分布式文件系统,这就为 MongoDB 的部署提供了很大便利。而像 MySQL 这种比较早的数据库,虽然市面上有很多不同的分表部署的方案,但这种终究不如 MongoDB 直接官方支持来得便捷实在。

2. 另外,MongoDB 内部还自建了对 map-reduce运算框架的支持,虽然这种支持从功能上看还算是比较简单的,相当于MySQL里 GroupBy 功能的扩展版,不过也为数据的统计带来了方便。

3. MongoDB 在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的 I/O 效率比磁盘高多了。

MongoDB 以 BSON 结构(二进制)进行存储,对海量数据存储有着很明显的优势。

监控

MongoDB提供了网络和系统监控工具Munin,它作为一个插件应用于MongoDB中。

Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中。

基于图形界面的开源工具 Cacti, 用于查看CPU负载, 网络带宽利用率,它也提供了一个应用于监控 MongoDB 的插件。

查询语句:是独特的 MongoDB 的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,No SQL 数据库中最为接近关系型数据库,比较完善的 DB 之一,适用人群不断在增长。

MongoDB 优点:

1.性能优越:快速!在适量级的内存的 MongoDB 的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快,

2.高扩展:第三方支持丰富(这是与其他的 No SQL 相比,MongoDB 也具有的优势)

3.自身的 Failover 机制!

4.弱一致性(最终一致),更能保证用户的访问速度

5.文档结构的存储方式,能够更便捷的获取数据: json 的存储格式

6.支持大容量的存储,内置 GridFS

7.内置 Sharding

MongoDB 缺点:

主要是无事物机制!

1.MongoDB 不支持事务操作(最主要的缺点)

2. MongoDB 占用空间过大

3.MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。

MongoDB 的适用场景总结:

数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些情况下用 MongoDB。

MongoDB 占用的空间很大,因为它属于典型空间换时间原则的类型。所以要定期把数据库做修复,定期重新做索引,这样对提升MongoDB 的稳定性和效率有很大帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值