MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。 本篇内容主要包括:MongoDB 概述、MongoDB 的体系结构、关于 BSON
MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。
MongoDB 常常被归类为 NoSQL 数据库系统,也是当前 NoSQL 数据库中比较热门的一种。
MongoDB 文档类似于 Json 对象。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。字段值可以包含其他文档,数组及文档数组。
使用文档的优点是:
Ps:MongoDB 将文档存储在集合中。集合类似于关系数据库中的表。
MongoDB 作为非关系性文档数据库有着以下几个主要特点:
MongoDB的一个实例,由多个数据库(Database)组成;一个数据库,由多个集合(Collection)组成;一个集合,又由多个文档(Document)组成!
以关系型数据库为对比对象,来讲一下上面这些概念的意思:
MongoDB | 关系型数据库 |
---|---|
Database | Database |
Collection | Table |
Document | Record/Row |
Filed | Column |
Embedded Documents | Table join |
MongoDB的默认数据目录是 /data/db
,它负责存储所有的 MongoDB 的数据文件。在 MongoDB 内部,每个数据库包含一个 *.ns 文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。
MongoDB 内部有预分配空间的机制,每个预分配的文件都用 0 进行填充,由于有了这个机制,MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在在 *.ns 文件中。
MongoDB 作为一款流动的文档数据库,采用 Bson 格式来支持文档模型。
Bson是 由 10gen 开发的一个数据格式,目前主要用于 MongoDB 中,是 MongoDB 的数据存储格式。Bson 基于 Json 格式,选择 Json 进行改造的原因主要是 Json 的通用性及 Json 的 schemaless 的特性。
Bson 全称是 Binary Json,和 Json 很像,但是是采用二次格式进入存储,它和 Json 一样,支持内嵌的文档对象和数组对象,但是 Bson 有 Json 没有的一些数据类型,如 Date 和 BinData 类型。
# 一个 Document 的 Bson 表示
{
title:"MongoDB",
last_editor:"192.168.1.122",
last_modified:new Date("27/06/2011"),
body:"MongoDB introduction",
categories:["Database","NoSQL","Bson"],
revieved:false
}
# 一个嵌套的例子:
{
name:"lemo",
age:"12",
address:{
city:"suzhou",
country:"china",
code:215000
} ,
scores:[
{"name":"english","grade:3.0},
{"name":"chinese","grade:2.0}
]
}
Bson 相对 Json 有以下优势:
{“field”:7}
,在 Json 的存储上 7 只使用了一个字节,而如果用 Bson,那就是至少 4 个字节(32位)目前在 10gen 的努力下,BSO N已经有了针对多种语言的编码解码包。并且都是 Apache 2 license 下开源的。并且还在随着 MongoDB 进一步地发展。