> 数据库 > MongoDB >

linux下安装mongodb非关系型数据库

MongoDB简介
MongoDB是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发,官方网站地址是:http://www.mongodb.org/

NoSql,全称是 Not Only Sql,指的是非关系型的数据库。
下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用。通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

特点:
高性能、易部署、易使用,存储数据非常方便。
主要功能特性有:
面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性
支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
文件存储格式为BSON(一种JSON的扩展)。
可通过网络访问。

功能:
面向集合的存储:适合存储对象及JSON形式的数据。
动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

适用场合:
网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。

系统环境:centos6.5_x64
安装:
下载mongodb(支持windows、linux、mac、Solaris):
linux64位下载:http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# wget -c http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz
[root@localhost ~]# tar zxvf mongodb-linux-x86_64-2.6.1.tgz
[root@localhost ~]# cp -R mongodb-linux-x86_64-2.6.1 /usr/local/mongodb/ #mongodb不需要编译,解压后是可执行文件。
[root@localhost ~]# mkdir /usr/local/mongodb/data #创建数据存放路径
[root@localhost ~]# mkdir /usr/local/mongodb/logs #日志存放路径
[root@localhost ~]# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --logappend &
[root@localhost ~]# lsof -i:27017
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  26578 root    8u  IPv4  76661      0t0  TCP *:27017 (LISTEN)
[root@localhost ~]# echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --logappend &" >> /etc/rc.local #开机启动

至此mongodb安装完成。

安装php的mongodb扩展模块:
在php源码包中是没有mongodb扩展的,需要单独从github下载:
各版本下载地址:https://github.com/mongodb/mongo-php-driver/releases
最新linux版本:mongo-php-driver-1.5.2.tar.gz
如果php是yum安装,那么需要安装php-devel包中的phpize命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# yum install -y php-devel
[root@localhost ~]# tar zxvf mongo-php-driver-1.5.2.tar.gz
[root@localhost ~]# cd mongo-php-driver-1.5.2
[root@localhost mongo-php-driver-1.5.2]# phpize #生成预配置环境
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@localhost mongo-php-driver-1.5.2]# ./configure
[root@localhost mongo-php-driver-1.5.2]# make && make install
Installing shared extensions:     /usr/lib64/php/modules/
 
编辑php.ini配置文件,加载php模块路径:
[root@localhost ~]# vi /etc/php.ini
extension_dir = /usr/lib64/php/modules/  #指定php模块路径
编辑/etc/php.d/json.ini:
[root@localhost ~]# vi /etc/php.d/json.ini
extension=mongo.so #添加加载模块

至于为什么要编辑/etc/php.d/json.ini ?是因为之前是yum装的php,重启web服务后,默认先去读/etc/php.ini,再去/etc/php.d/下读配置文件。导致json.so模块加载顺序落后于mongo.so模块。但是mongo.so需要json.so的支持,由于顺序颠倒导致php无法正确加载mongo.so模块。如果是源码编译的php,一般不会出现这种情况。接着重启web服务。service httpd restart

[root@localhost ~]# php -m | grep mongo  #查看模块已加载
mongo

通过phpinfo就可以看到模块信息了。

json.so落后于mongo.so模块加载时的报错信息:
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/mongo.so’ – /usr/lib64/php/modules/mongo.so: undefined symbol: php_json_encode in Unknown on line 0



(责任编辑:IT)