NoSQL
为什么使用NoSql?
1.现实
1. 大量的数据。
2. 数据呈现出半结构化或者结构化状态。
3. 储存数据的磁盘提取速度增长远比不上数据量的增长,储存和分析数据问题越来越大(90年磁盘速度是4.4M/s,现在已经可以达到几百M/s)。
面对第三个问题,我们可以使用多个磁盘储存数据,使用时可以并行得提取。
这样也带来了一些新的问题:
1. 多个磁盘如果一个损坏,那么就将导致数据不完整。如果一个磁盘在一年里损坏的几率为0.01(假设),那么当只有一个磁盘时,损坏几率只有0.01,完整几率为0.99,如果有10个磁盘,那么一年内完整的几率为(0.99)**10 = 0.904。所以就需要使用多个磁盘作为备份。
RAID(这也是磁盘列阵的解决方式)
2. 数据分析需要从多个磁盘读取数据,那么就需要进行数据的整合。MapReduce
2.RDBMS的解决方式
面对大量的数据,RDBMS可以进行分表
1. 水平分表,将大表按照列分表
分表的方式有:Range, Hash, Key, List and Composite
CREATE TABLE TBL_STUDENT
( ID int default NULL,
NAME varchar(30) default NULL,
BIRTHDAY date default NULL
) engine=myisam
PARTITION BY RANGE (year(BIRTHDAY)) (PARTITION p0 VALUES LESS THAN (1995),
PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE );
2.竖直分表
相比较水平分表而言,更加复杂,但是效果也更加明显。
但是,如果在多个大表之间join,将会导致极大的数据处理量,非常不适合处理。
因此开始大量使用NoSQL。
更多关于NoSQL
Mongodb的基本概念
MongoDB (“hu mongo us”)是使用C++ 写的文档类型的开源数据库。
Mongodb特性:
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问
基本概念:
1. 文档(document)是MongoDB的最基本单元。
例如:
{
"name" : "John Doe",
"address" : {
"street" : "123 Park Street",
"city" : "Anytown",
"state" : "NY"
}
}
文档的约束条件:
1. “_” 开头的键不能作为系统内部保留值。
2. 键不能包含 null(\0),”.”,不能以 ($)开头 。
文档在数据库中使用BSON格式储存:
BSON是一个轻量级的二进制数据格式。MongoDB能够使用BSON,并将BSON作为数据的存储存放在磁盘中。
当Client端要将写入文档,使用查询等等操作时,需要将文档编码为BSON格式,然后再发送给Server端。同样,Server端的返回结果也是编码为BSON格式再放回给Client端的。
使用BSON格式出于以下3种目的:
效率
BSON是为效率而设计的,它只需要使用很少的空间。即使在最坏的情况下,BSON格式也比JSON格式再最好的情况下存储效率高。
传输性
在某些情况下,BSON会牺牲额外的空间让数据的传输更加方便。比如,字符串的传输的前缀会标识字符串的长度,而不是在字符串的末尾打上结束的标记。这样的传输形式有利于MongoDB修改传输的数据。
性能
最后,BSON格式的编码和解码都是非常快速的。它使用了C风格的数据表现形式,这样在各种语言中都可以高效地使用。