MongoDB介绍及下载与安装
引言
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
- 面向集合存储,易存储对象类型的数据。
- 模式自由。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
- 文件存储格式为BSON(一种JSON的扩展)
- 可通过网络访问
所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB
在32位模式运行时支持的最大文件尺寸为2GB。
MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
以上为随便摘的,其实就是非传统的非关系数据库,现在归到文档型数据库分类之中,注意32位操作系统支持的最大文件为2GB,所以做大文件海量储存的朋友要选择64位的系统安装。开始我们的下载安装之路吧。
一、下载
MongoDB的官网是:http://www.mongodb.org/
MongoDB最新版本下载在官网的DownLoad菜单下:http://www.mongodb.org/downloads
本人选择的是Windows 32-bit 1.8.1版本
MongoDB For .net 驱动开发包位于官网的Driver菜单下(含其它语言开发链接):https://github.com/mongodb/mongo-csharp-driver/downloads
本人操作系统为Windows7 专业版,选择MongoDB版本为Windows 32-bit 1.8.1,开发包为VS2008版本
开始我们的安装过程了
二、安装
1.解压mongodb-win32-i386-1.8.1.zip ,创建路径C:\Program Files\mongodb ,将解压后的Bin文件Copy to 此文件夹下
2.C:\Program Files\mongodb 下建立Data文件夹 C:\Program Files\mongodb\data ,然后分别建立db,log两个文件夹,至此mongodb下有以下文件夹
C:\Program Files\mongodb\bin
C:\Program Files\mongodb\data\db
C:\Program Files\mongodb\data\log
在log文件夹下创建一个日志文件MongoDB.log,即C:\Program Files\mongodb\data\log\MongoDB.log
完成以上工作后,你为奇怪为什么要建立这些文件夹(因为,Mongodb安装需要这些文件夹,默认安装是不用创建,但是文件都为安装到C:\data\下)
3.几种安装方式介绍
3.1 程序启动方式
运行cmd.exe 进入DOS命中界面
> cd C:\Program Files\mongodb\bin
> C:\Program Files\mongodb\bin>mongod -dbpath “C:\Program Files\mongodb\data\db”
执行此命令即将mongodb的数据库文件创建到C:\Program Files\mongodb\data\db 目录,不出意外的会看到命令最后一行sucess的成功提示
此时数据库就已启动,该界面为Mongo的启动程序,关闭后可直接双击bin下的mongod.exe (注意是d,这个是启动程序)
启动程序开启后,再运行mongo.exe 程序(注意没有d) ,界面如下
测试数据库操作
>help (查看相关信息)
>db.foo.insert({a:1}) (往foo表插入a,1字段值,foo表为默认表)
>db.foo.find() (查看foo表数据)
结果如下:
可以看到插入了3条记录分别人a,cctv,set 。
当mongod.exe被关闭时,mongo.exe 就无法连接到数据库了,因此每次想使用mongodb数据库都要开启mongod.exe程序,所以比较麻烦,接下来我们将
MongoDB安装为windows服务吧
3.2 windows service方式
运行cmd.exe
> cd C:\Program Files\mongodb\bin
> C:\Program Files\mongodb\bin>mongod –dbpath “C:\Program Files\mongodb\data\db” –logpath “C:\Program Files\mongodb\data\log\MongoDB.log” –install –serviceName “MongoDB”
这里MongoDB.log就是开始建立的日志文件,–serviceName “MongoDB” 服务名为MongoDB
运行命令成功为如下图:
引时服务已经安装成功,运行
>NET START MongoDB (开启服务)
>NET stop MongoDB (关闭服务)
>
> C:\Program Files\mongodb\bin>mongod –dbpath “C:\Program Files\mongodb\data\db” –logpath “C:\Program Files\mongodb\data\log\MongoDB.log” –remove –serviceName “MongoDB” (删除,注意不是–install了)
其它命令可查阅help命令或官网说明。
查看服务
运行bin文件夹下mongo.exe 客户端测试一下吧。测试同3.1相同 。
3.3 守护进程方式创
–fork 以守护进程方式运行MongoDB,创建服务器进程
>C:\Program Files\mongodb\bin>mongod –port 10220 –fork –dbpath “C:\Program Files\mongodb\data\db” –logpath “C:\Program Files\mongodb\data\log\MongoDB.log”
forked process : 44086
all output going to : MongoDB.log
到此几种安装就介绍完了。
4、停止MongoDB
最稳妥的方式,处理完当前所有操作并将缓存的数据保存到磁盘上才停止
>user admin
>db.shutdownServer();
当然我们也可以直接关闭进程,但这种方式会导致缓存中的数据未急时刷新保存到磁盘上而丢失。
MongoDB管理界面
MongoDB的工具还比较多,没有一个能够统一全部工具的,不过推荐使用RockMongo,这个工具确实速度很快,而且很顺手,支持中文
到RockMongo下载安装包: http://rockmongo.com/wiki/introduction?lang=zh_cn
如果Apache有根目录,移动到根目录下,否则自己建立一个/etc/apache2/conf.d/rockmongo.conf
,写入
Alias /rockmongo /var/www/rockmongo
<Directory /var/www/rockmongo>
Options FollowSymLinks
DirectoryIndex index.php
</Directory>
然后要安装php-mongo模块
apt-get install php5-mongo
修改php配置文件
echo "extension=mongo.so" >> /etc/php5/apache2/php.ini
然后访问http://localhost/rockmongo
即可,帐号密码都是admin
————————————————————————
MongoDB PHP操作类:
<?php /* require 'MongoDB.php'; $mongo = new QMongoDB('localhost:27017',true); //Insert $result =$mongo -> insert('yyy', array('A' => 789, 'B' => array('time'=>time(),'date'=>date('Y-m-d')))); //Update $where = array('name' => 'QQ223'); $dat = array('name' => 'MM233', 'sex' => 0); $result = $mongo -> update('yyy',$where, $dat); //Remove $result = $mongo->remove('yyy',array()); $result = $mongo->remove('yyy',array('A'=>123)); //Find //表名,条件 array('操作符'=>x),结果条件,字段 //$result = $mongo ->find('yyy',array('A'=>array('$gt'=>125)),array('limit' => 5,'skip'=>1,'sort'=>array('A'=>1)),array('A','B')); $result = $mongo ->find('yyy',array('A'=>123),array('limit' => 5,'skip'=>1,'sort'=>array('A'=>1)),array('A','B')); //FindOne $result = $mongo -> findOne('yyy', array('A'=>'123'), array()); */ class QMongoDB { private $mongo = null; private $db = null; private $error; public function getInstance($mongo_server) { if (self::$mongo == null) { self::$mongo = new self($mongo_server); } return self::$mongo; } /** * @param $mongo_server 连接字串 * 链接远程主机: 127.0.0.1; 链接指定端口主机: 127.0.0.1:27017; 带用户名密码: mongodb://sa:123@localhost; 链接多个服务器:localhost:27017,localhost:27018 * @param bool $connect * @param bool $replicaSet 持久连接 */ public function __construct($mongo_server = 'localhost', $connect = true, $replicaSet = false) { try { $this->mongo = new MongoClient($mongo_server, array('replicaSet' => $replicaSet)); return $this->mongo; } catch (MongoConnectionException $e) { $this->error = $e->getMessage(); return false; } } /** * 选择数据库 * @param $databse 数据库 */ public function selectDB($databse) { $this->db = $this->mongo->selectDB($databse); } /** * 创建索引,如果索引已经存在则返回 * @param $column 数据表 * @param $index 索引,array('id'=>1),在id字段建立升序索引 * @param array $index_param 其他条件,是否唯一索引等 * @return bool 返回值 */ public function ensureIndex($column, $index, $index_param = array()) { $db_name = $this->db; $index_param['safe'] = 1; try { $this->mongo->$db_name->$column->ensureIndex($index, $index_param); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 插入数据 * @param $column 数据表 * @param $record 记录 * @return bool 成功返回id失败false */ public function insert($column, $record) { $db_name = $this->db; try { $this->mongo->$db_name->$column->insert($record); return $record['_id']; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 更新数据 * @param $column 数据表 * @param $condition 条件 * @param $data 数据 * @param array $options 更新选择 upsert/multiple * @return bool 返回值 成功true, 失败false */ public function update($column, $condition, $data, $options = array()) { $db_name = $this->db; $options['safe'] = 1; if (!isset($options['multiple'])) { $options['multiple'] = 0; } try { $this->mongo->$db_name->$column->update($condition, $data, $options); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 移出记录 * @param $column 数据表 * @param $condition 条件 * @param array $options 删除选项 juntOne * @return bool 返回值 */ public function remove($column, $condition, $options = array()) { $db_name = $this->db; // $options['safe'] = 1; try { $this->mongo->$db_name->$column->remove($condition, $options); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 查询记录数 * @param $column 数据表 * @param array $condition 查询条件 * @return int */ public function count($column, $condition = array()) { $db_name = $this->db; return $this->mongo->$db_name->$column->count($condition); } /** * 查询记录 * @param $column 数据表 * @param array $condition 查询条件 array('字段'=>array('操作符'=>x)) 操作符= $gt,$lt,$gte,$lte; array('字段'=>x); * @param array $result_condition 结果筛选条件/limit=array('limit'=>x),skip=array('skip'=>x)分页筛选条件同limit一起使用 /sort=array('sort'=>array('字段'=>1升序/-1降序))/等 * @param array $fields 字段 array('fields1','fields2') * @return array|bool 返回结果集 */ public function find($column, $condition = array(), $result_condition = array(), $fields = array()) { $db_name = $this->db; foreach($condition as $key=>$value){ if($key == '_id'){ $condition['_id'] = new MongoId($value); } } $cursor = $this->mongo->$db_name->$column->find($condition, $fields); if (!empty($result_condition['limit'])) { $cursor->limit($result_condition['limit']); if (!empty($result_condition['skip'])) { $cursor->skip($result_condition['skip']); } } if (!empty($result_condition['sort'])) { $cursor->sort($result_condition['sort']); } $result = array(); //var_dump($cursor->hasNext()); try { while ($cursor->hasNext()) { $result[] = $cursor->getNext(); } } catch (MongoConnectionException $e) { $this->error = $e->getMessage(); return false; } catch (MongoCursorTimeoutException $e) { $this->error = $e->getMessage(); return false; } return $result; } public function getMongo(){ return $this -> mongo->getConnections(); } /** * 查询单条记录 * @param $column 数据表 * @param array $condition 条件 array() * @param array $fields 字段 array('fields1','fields2') * @return array|null 返回值 */ public function findOne($column, $condition = array(), $fields = array()) { $db_name = $this->db; foreach($condition as $key=>$value){ if($key == '_id'){ $condition['_id'] = new MongoId($value); } } return $this->mongo->$db_name->$column->findOne($condition, $fields); } /** * 返回错误信息 * @return string */ public function getError() { return $this->error; } }
下载: