一、什么是mongodb
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 措辞编写。旨在为 WEB 运用供应可扩展的高性能数据存储办理方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它支持的数据构造非常疏松,是类似json的bson格式,因此可以存储比较繁芜的数据类型。Mongo最大的特点是它支持的查询措辞非常强大,其语法有点类似于面向工具的查询措辞,险些可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
这里提一嘴,为什么普遍都采取数据库存储数据?
1.数据库是有构造的,数据与数据之间可以建立各种关系,类似网状拓扑图
2.数据库能够供应各种接口,让数据的处理(增编削查操作)变得快捷大略
3.给各种措辞(PHP、jsp、.net…)供应了完善的接口
二、特点
它的特点是高性能、易支配、易利用,存储数据非常方便。紧张功能特性有:
1.面向凑集存储,易存储工具类型的数据。
2.模式自由。
3.支持动态查询。
4.支持完备索引,包含内部工具。
5.支持查询。
6.支持复制和故障规复。
7.利用高效的二进制数据存储,包括大型工具(如视频等)。
8.自动处理碎片,以支持云打算层次的扩展性。
9.支持RUBY,PYTHON,JAVA,C ,PHP,C#等多种措辞。
10.文件存储格式为BSON(一种JSON的扩展)。
11.可通过网络访问。
三、优点
mongodb的上风便是文档存储:
1. 业务常常变动,须要时时的添加字段,那么mongodb比较适宜,关系型数据库添加字段的繁芜度也还好
2. 嵌套文档,业务数据比较繁芜,适宜嵌套文档式存储,那么mongodb非常得当,这个关系型数据库比较难搞,虽然MySQL和pg也有文档存储,但MySQL的不成熟,pg毕竟现在生产中利用还是偏少
3. upsert支持,查询速率也不慢
4. 高可用的副本集支持
5. 查询语法非常丰富,嵌套文档查询功能非常强大,不是重度用户可能不能理解
下面说说一个详细的利用事例:
如果项目的一条数据在10kb旁边,利用关系型数据库那么须要将这条数据拆分成大概几百条旁边,建造多个表,设计较繁芜。这种数据大概在一百万条旁边,想想拆分后在十几亿的数据量就恐怖。打平后的数据什么DB也都可以拿下,只是一百万变十几亿比较胆怯而已。
如果采取MySQL存储,每次查询须要利用外键查询多个表,从这些表中拉取数据,性能肯定要低落很多,比不上只在一个表查询,而且只拉取少两个数量级的数据。查询也还好,业务许可可以对结果做缓存,放到redis里去。
但是重点来了,需求要增量更新部分数据,这时候须要更新多个表,根本没法做到原子性(把稳事务不是原子操作),当然也可以利用cas等技能补偿,达到终极同等性。但利用mongodb存储只须要update一条数据,对相应的嵌套文档中内容更新,可以做到原子性,是不是很方便?
详细说说该项目的难点,查询无法利用缓存,可能会很吃惊,但是业务决定了确实做不了,而且增量更新的量达到上万的QPS,如果不能担保原子性想想多么恐怖!
以是mongodb在这里帮了大忙,关系型数据库办理不了这个难题。
四、缺陷
缺陷也比较明显
1. 查询优化器和MySQL没法比
2. 不支持reload,只能冷重启,初始化配置的时候比较麻烦
3. 没有事务,不敢存储第一手数据,多用来做备份数据的存储
以上便是本期的所有内容了,大数据开拓中会用到各种各样的数据库,但是数据库在特定的场景下适用性不同,以是我们要根据详细情形选择得当的数据库适用。
希望大家点个关注,及时收取最新文章推送,想理解更多敬请咨询加米谷大数据。
有问题的欢迎在评论区留言,如有侵权请奉告。