MongoDB ----基于分布式文件存储的数据库

参考: http://www.cnblogs.com/huangxincheng/category/355399.html

http://www.cnblogs.com/daizhj/category/260889.html

MongDB 是一个高性能,开源,无模式的文档型 NosQL 数据库。

主要功能特性:

1. 文件存储格式 BSON(一种 json 的扩展) 
2. 模式自由 
数据格式不受限了表的结构 
3. 支持动态查询 
4. 支持完全索引 
5. 支持复制(其主从复制)和故障恢复 
6. 使用高效的二进制数据存储,包括大型对象 
7. 自动处理碎片,以支持云计算层次的扩展。 
8. 支持 Java、Ruby、Python、C++、PHP 等多种语言 
9. 内部支持 Javascript

MongoDB 的优势

1. 查询速度快 
2. 高并发。可以达到 2 万个并发。 
3. 高容量。支持 10TB 意思的数据量 
MongoDB 使用场景 
1. 网站数据 
2. 缓存 
3. 大尺寸、低价值的数据 
4. 高伸缩的场景 
5. 用于对象以及 Json 数据存储

MongoDB 限制

1. 在 32 位操作系统上,不支持大于 2.5G 的数据 
2. 单个文件大小限制 16M 
3. 高度事务的系统 
4. 传统商业智能应用

MongoDB 与其他数据库区别

这里写图片描述

MongoDB 安装

在这里,主要讲解的是 win 下安装,关于 Linux 下安装,随后会添加上。 
下载网址:官方网站(https://www.mongodb.org/downloads/#production) 
在这里使用的是 win32

数据模型

一个 MongoDB 实例可以包含一组数据库,一个 DataBase 可以包含一组 Collection(集合),一个集合可以包含一组 Document(文档)。一个 Document 包含一组 field(字段),每一个字段都是一个 key/value pair。

key: 必须为字符串类型。

value: 可以包含如下类型。

● 基本类型,例如,string,int,float,timestamp,binary 等类型。

● 一个 document。

● 数组类型。

折叠编辑本段适用场景

MongoDB 的主要目标是在键 / 值存储方式 (提供了高性能和高度伸缩性) 和传统的 RDBMS 系统 (具有丰富的功能) 之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,Mongo 适用于以下场景。

● 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

● 缓存: 由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由 Mongo 搭建的持久化缓存层可以避免下层的数据源过载。

● 大尺寸、低价值的数据: 使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。

● 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对 MapReduce 引擎的内置支持。

● 用于对象及 JSON 数据的存储:Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询。

MongoDB 的使用也会有一些限制,例如,它不适合于以下几个地方。

● 高度事务性的系统: 例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。

● 传统的商业智能应用: 针对特定问题的 BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

● 需要 SQL 的问题。

 

创建数据目录

MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等)。

在本教程中,我们已经在 C 盘安装了 mongodb,现在让我们创建一个 data 的目录然后在 data 目录里创建 db 目录。

c:\>cd c:\

c:>mkdir data

c:>cd data

c:\data>mkdir db

c:\data>cd db

c:\data\db>

你也可以通过 window 的资源管理器中创建这些目录,而不一定通过命令行。

 


命令行下运行 MongoDB 服务器

为了从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。

C:\mongodb\bin\mongod --dbpath c:\data\db

如果执行成功,会输出如下信息:

2015-09-25T15:54:09.212+0800 I CONTROL  Hotfix KB2731284 or later update is not
installed, will zero-out data files
2015-09-25T15:54:09.229+0800 I JOURNAL  [initandlisten] journal dir=c:\data\db\j
ournal
2015-09-25T15:54:09.237+0800 I JOURNAL  [initandlisten] recover : no journal fil
es present, no recovery needed
2015-09-25T15:54:09.290+0800 I JOURNAL  [durability] Durability thread started
2015-09-25T15:54:09.294+0800 I CONTROL  [initandlisten] MongoDB starting : pid=2
488 port=27017 dbpath=c:\data\db 64-bit host=WIN-1VONBJOCE88
2015-09-25T15:54:09.296+0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/W
indows Server 2008 R2
2015-09-25T15:54:09.298+0800 I CONTROL  [initandlisten] db version v3.0.6
……

连接 MongoDB

我们可以在命令窗口中运行 mongo.exe 命令即可连接上 MongoDB,执行如下命令:

C:\mongodb\bin\mongo.exe

配置 MongoDB 服务

管理员模式打开命令行窗口

创建目录,执行下面的语句来创建数据库和日志文件的目录

mkdir c:\data\db
mkdir c:\data\log

创建配置文件

创建一个配置文件。该文件必须设置 systemLog.path 参数,包括一些附加的配置选项更好。

例如,创建一个配置文件位于 C:\mongodb\mongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具体配置内容如下:

systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db

安装 MongoDB 服务

通过执行 mongod.exe,使用 --install 选项来安装服务,使用 --config 选项来指定之前创建的配置文件。

C:\mongodb\bin\mongod.exe --config "C:\mongodb\mongod.cfg" --install

要使用备用 dbpath,可以在配置文件(例如:C:\mongodb\mongod.cfg)或命令行中通过 --dbpath 选项指定。

如果需要,您可以安装 mongod.exe 或 mongos.exe 的多个实例的服务。只需要通过使用 --serviceName 和 --serviceDisplayName 指定不同的实例名。只有当存在足够的系统资源和系统的设计需要这么做。

启动 MongoDB 服务

net start MongoDB

关闭 MongoDB 服务

net stop MongoDB

移除 MongoDB 服务

C:\mongodb\bin\mongod.exe --remove

命令行下运行 MongoDB 服务器 和 配置 MongoDB 服务 任选一个方式启动就可以。

任选一个操作就好


MongoDB 后台管理 Shell

如果你需要进入 MongoDB 后台管理,你需要先打开 mongodb 装目录的下的 bin 目录,然后执行 mongo.exe 文件,MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell, 用来对 MongoDB 进行操作和管理的交互式环境。

当你进入 mongoDB 后台后,它默认会链接到 test 文档(数据库):

> mongo
MongoDB shell version: 3.0.6
connecting to: test
……

由于它是一个 JavaScript shell,您可以运行一些简单的算术运算:

> 2 + 2
4
>

db 命令用于查看当前操作的文档(数据库):

> db
test
>

插入一些简单的记录并查找它:

> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }
>

第一个命令将数字 10 插入到 runoob 集合的 x 字段中。