简简单了解一下MongoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
特点
- 面向文档
MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组,使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,可以保存任何类型的数据对象。 - 高性能
- 数据快,Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进 . 经常使用的数据存在内存,访问次数少的数据存在硬盘
- 在指定属性、内部对象上创建索引以提高查询的速度
- 高可用
副本集,分片的设计实现高可用,从而减少停工时间,而保持其服务的高度可用性 .
- 支持复制和数据恢复。MongoDB 支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失
- 使用Sharding功能将数据水平分割到各个节点上,达到负载均衡的目的.
自动处理分片,以支持云计算层次的扩展。MongoDB 支持集群自动切分数据,对数据进行分片可以使集群存储更 多的数据,实现更大的负载,也能保证存储的负载均衡。
- 易扩展
数据量从小到大,需要扩展,根据实际情况,我们要对数据库进行扩展,有如下两种思路:
- 纵向: 纵向扩展就是使用计算能力更强的机器。提升计算机的配置,但是配置高价格也随之上升,当上升到一定的程度就无法提升了。(物理极限)
- 横向: 横向扩展就是通过分区将数据分散到更多机器上,这就是所谓的mongodb分布式。 增加存储空间或提高性能,搭建mongodb集群即可,但是集群就存在一个管理问题。
- 丰富的查询语言
- Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功
- 提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务。
应用场景
- 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
- 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
- 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库 .
短板
- MongoDB不支持事务 高度事务性的系统:例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
- 占用空间过大,维护工具不够成熟,(3.0版本后支持压缩)