MongoDB的安装以及PHP扩展
mkdir -p /data/db/
mkdir -p /data/logs/
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
tar -zxvf mongodb-linux-x86_64-1.6.5.tgz
./bin/mongod --dbpath=/data/db/ --logpath=/data/logs/mongod.log --logappend --port=27017 --fork --rest
General options:
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips bound by default
-v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录
--quiet quieter output 静默模式
--logpath arg file to send all output to instead of stdout 指定日志存放目录
--logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
--fork fork server process 以创建子进程的方式运行
--cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
--noauth run without security 无认证模式运行
--auth run with security 认证模式运行
--objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查
--quota enable db quota management 开始数据库配额的管理
--quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option 调试诊断选项
--nohints ignore query hints 忽略查询命中率
--nohttpinterface disable http interface 关闭http接口,默认是28017
--noscripting disable scripting engine 关闭脚本引擎
--noprealloc disable data file preallocation 关闭数据库文件大小预分配
--smallfiles use a smaller default file size 使用较小的默认文件大小
--nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo print some diagnostic system information 打印系统诊断信息
--upgrade upgrade db if needed 如果需要就更新数据库
--repair run repair on all dbs 修复所有的数据库
--notablescan do not allow table scans 不运行表扫描
--syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s
Replication options:
--master master mode 主复制模式
--slave slave mode 从复制模式
--source arg when slave: specify master as 当为从时,指定主的地址和端口
--only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale 自动同步从的数据
--oplogSize arg size limit (in MB) for op log 指定操作日志的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
Sharding options:
--configsvr declare this is a config db of a cluster 指定shard中的配置服务器
--shardsvr declare this is a shard db of a cluster 指定shard服务器
测试mongoDB
#使用自带客户端连接mongoDB
./bin/mongo
新建集合集
> db.createCollection("user");
{ "ok" : 1 }
> show collections
system.indexes
user
插入数据:
> db.user.insert({uid:1,username:"Falcon.C",age:25});
> db.user.insert({uid:2,username:"aabc",age:24});
查询数据:
> db.user.find();
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
{ "_id" : ObjectId("4bfcaa6c315398de2d288bbe"), "uid" : 2, "username" : "aabc", "age" : 24 }
查询数据的方式很丰富,有类似于SQL的条件查询,如:我想查询UID为1的用户的数据:
> db.user.find({uid:1});
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
mongoDB还支持丰富的查询还有limit ,sort ,findOne,distinct等
更新数据
> db.user.find();
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 26 }
{ "_id" : ObjectId("4bfcaa6c315398de2d288bbe"), "uid" : 2, "username" : "aabc", "age" : 24 }
出了以上的2种用法,更新的条件还有$unset、$push 、$pushAll 、$pop 、$pull 、$pullAll
首先下载最新的php mongodb扩展源码,源码可以在http://pecl.php.net/package/mongo下载到
tar zxvf mongodb-mongo-php-driver-1.1.1-17-g889492c.tar
cd mongodb-mongodb-php-driver-1.1.1-17-g889492c
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
PHP扩展API下载 最后记得修改php.ini,添加 extension = "mongo.so"
用PHP操作Mongondb
详细见PHP的官方文档,这里我用5个进程测试,同时运行100w条数据,建唯一索引,数据完全没有出错,速度不错
<?php
$m = new Mongo('localhost:27017');
$m->listDBs(); //列出所有可用的库
$collection = $m->selectDB('comedy')->selectCollection('bar');
//添加一个元素
$person = array("name" => "uu");
$collection->insert($person);
//返回$collection集合中第一个文档
$joe = $collection->findOne();
var_dump($joe);
//添加另一个元素
$obj = array( "name" => "33");
$collection->insert($obj);
//返回$collection集合中文档的数量
$collection -> count();
$cursor = $collection->find();
foreach ($cursor as $obj) {
echo $obj["name"] . "\n";
}
$m->dropDB("comedy"); //删除一个库
$m->close();
常用函数
<?php
$query = array( "i" => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
$coll->ensureIndex( array( "i" => 1 ) ); // 为i “这一列”加索引 降序排列
$coll->ensureIndex( array( "i" => -1, "j" => 1 ) ); // 为i “这一列”加索引 降序排列 j升序
//查询时,每个Object插入时都会自动生成一个独特的_id,它相当于主键,用于查询非常方便
$person = array("name" => "joe");
$people->insert($person);
$joe = $people->findOne(array("_id" => $person['_id']));
posted on 2011-11-24 15:04 kudosharry 阅读(464) 评论(0) 编辑 收藏 举报