Mongodb学习(一)

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风格的数据表现形式,这样在各种语言中都可以高效地使用。
  1. 集合(collection)是文档的集合,可以视为没有schema的table,在mongodb3.2之后,可以限定一个collection有确定的文档结构。参考
  2. 每一个文档有一个唯一的主键 _id ,如果一个对象没有设定主键,那么mongo会自动产生一个12位的ObjectID(这是一个类型),ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。打印出来的这个长长的ObjectId是实际存储数据的两倍长。默认ID生成策略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值