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编辑  收藏  举报

导航