简介
MongoDB**是一种面向文档的数据库管理系统,由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
与关系型数据库
SQL术语/概念 Mongo DB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primarykey primarykey 主键,MongoDB自动将_id字段设置为主键
优点
文档结构的存储方式,能够更便捷的获取数据
内置GridFS,支持大容量的存储:GridFS是一个出色的分布式文件系统,可以支持海量的数据存储。 内置了GridFS了MongoDB,能够满足对大数据集的快速范围查询。
海量数据下,性能优越:在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。 mysql实际无法胜任大数据量下任意字段的查询,而mongodb的查询性能实在让我惊讶。写入性能同样很令人满意。
动态查询
全索引支持,扩展到内部对象和内嵌数组:索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
查询记录分析
快速,就地更新
高效存储二进制大对象 (比如照片和视频)
复制(复制集)和支持自动故障恢复
内置 Auto- Sharding 自动分片支持云级扩展性,分片简单
MapReduce 支持复杂聚合:主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
商业支持,培训和咨询
缺点
不支持事务操作:事务要求严格的系统(如果银行系统)肯定不能用它。
MongoDB没有如MySQL那样成熟的维护工具
无法进行关联表查询,不适用于关系多的数据
复杂聚合操作通过mapreduce创建,速度慢
模式自由,自由灵活的文件存储格式带来的数据错
MongoDB 在你删除记录后不会在文件系统回收空间。除非你删掉数据库。但是空间没有被浪费
数据类型
String 字符串。 存储数据常用的数据类型。在Mongo DB中, UTF-8编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为32位或64位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与BS ON(二进制的JSON) 元素的最低值和最高值相对比。
Arrays 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用UNIX时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建Date对象, 传入年月日信息。
ObjectID 对象ID。用于创建文档的ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储JavaScript代码。
Regularexpression 正则表达式类型。用于存储正则表达式。
No SQL的优点/缺点
优点:
·-高可扩展性
·-分布式计算
·-低成本
·-架构的灵活性,半结构化数据
·-没有复杂的关系
缺点:
·-没有标准化
·-有限的查询功能(到目前为止)
·-最终一致是不直观的程序
关系型数据库遵循ACID
1、A(Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事
操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元
两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元
2、C(Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然
a+b=10,否则事务失败。
3、I(Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事
另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自
是看不到新增加的100元的。
4、D(Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢
No Sql 数据库分类
类型 部分代表 特点
列存储 Hbase、Cassandra、Hypertable 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据, 方便做数据压缩针对某一列或者某几列的查询有非常大的I0优势。
文档存储 Mongo DB、Couch DB 文档存储一般用类似json的格式存储, 存储是文档型的。这样也就有有机会对某些字段 实现关系数据库的某些功能。
key-value存储 MemcacheDB、Redis 可以通过key快速查询到其value。 一般来说不管value的格式, 照单全收。(Redis包含了其他功能)
图存储 Neo4J、Flock DB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
对象存储 db4o、Versant 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库 BerkeleyDB XML、Base X 高效的存储XML数据,并支持XML的内部查询语法,
分布式计算的优点
可靠性(容错):
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。
可扩展性:
在分布式计算系统可以根据需要增加更多的机器。
资源共享:
共享数据是必不可少的应用,如银行,预订系统。
灵活性:
由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。
更快的速度:
分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。
开放系统:
由于它是开放的系统,本地或者远程都可以访问到该服务。
更高的性能:
相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
分布式计算的缺点
故障排除::
故障排除和诊断问题。
软件:
更少的软件支持是分布式计算系统的主要缺点。
网络:
网络基础设施的问题,包括:传输问题,高负载,信息丢失等。
安全性:
开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。