深入浅出MongoDB(三):MongoDB的体系结构
逻辑结构关系对比
我们用一张表格来对关系型数据库和MongoDB进行对比
MongoDB | 关系型数据库 |
文档对象(document) | 行(row) |
集合(collection) | 表(table) |
数据库(database) | 数据库(database) |
数据存储结构
MySQL的数据存储结构:
MySQL的每个数据库存放在一个与数据库同名的文件夹中,MySQL如果使用MyISAM存储引擎,数据库文件类型就包括frm、MYD、MYI.
MongoDB的数据存储结构:
MongoDB的默认数据目录是/data/db,它负责存储所有的MongoDB的数据文件,在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。所以如果系统中有一个叫做mydb的数据库,那么构成mydb这个数据库的文件就会由mydb.ns,mydb.0,mydb.1等等组成。
MongoDB数据类型
MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象),不能完全满足复杂业务的需要,因此,BSON还提供了日期、32位数字、64位数字等类型,以下对MongoDB数据类型进行简要说明:
类型 | 描述 |
null | 用于表示空值或者不存在的字段 {“x”,null} |
布尔 | ‘true’和’false’ {“x”,true} |
32位整数 | Shell中这个类型不可用,MongoDB在控制台使用JS引擎进行输入,而JS仅支持64位浮点数,所以32位整数将会被自动转义 |
64位整数 | Shell中这个类型不可用, 64位整数与32位整数一样,在MongoDB控制台使用时,会转义成64位浮点数 |
64位浮点数 | Shell中的数字都是这种类型,下面是浮点数 {“x”:3.14}、{“x”:3} |
字符串 | UTF-8字符串都可表示为字符串类型的数据 {“x”:”foobar”} |
符号 | Shell不支持这种类型,将自动转义成字符串 |
对象ID | 对象id是文档的12字节的唯一ID,时间戳|机器|PID|计数器 {“x”:ObjectId()} |
日期 | 日期类型存储的是从标准纪元开始的毫秒数 {“x”:new Date()} |
正则表达式 | 文档中可以包含正则表达式,其正则表达式采用JS语法来表示 {“x”:/foobar/i} |
代码 | 文档中可以包含js代码 {“x”:function(){…}} |
二进制数据 | 二进制数据可以由任意字节的串组成,不过Shell无法使用 |
最大值 | BSON包括一个特殊类型,表示可能的最大值 Shell无法使用 |
最小值 | BSON包括一个特殊类型,表示可能的最小值 Shell无法使用 |
未定义 | 文档中也可以使用未定义类型 {“x”:undefined} |
数组 | 值的集合或者列表可以表示成数组 {“x”:[“a”,”b”,”c”]} |
内嵌文档 | 文档可以包含别的文档 {“x”:{“foo”:”bar”}} |
本文链接:http://www.656463.com/portal.php?mod=view&aid=77,转载请注明出处
下一节:MongoDB的常用命令