PHP with MongoDB

MongoDB的特点

MongoDB是一个可扩展的,高性能,开源,模式自由,面向文档的数据库.使用C++编写,MongoDB特点:

  • 面向文档存储(类JSON数据模式简单而强大)
  • 动态查询
  • 全索引支持,扩展到内部对象和内嵌数组
  • 查询记录分析
  • 快速,就地更新
  • 高效存储二进制大对象 (比如照片和视频)
  • 复制和故障切换支持
  • MapReduce 支持复杂聚合
  • 商业支持,培训和咨询

MongoDB 在键值存储(快速并有高扩展性) 和传统 RDBMS 系统(提供结构化模式和强大的查询)之间建立了一个桥梁.

MongoDB 安装

MongoDB 的官网提供了MAC OS 的二进制下载,解压即可使用,非常方便。用户无需在自己安装,由于32位的MongoDB 仅仅能够支持2G的存储,因此运营环境还是要使用64位的

1: 安装MonoDB

curl -O http://fastdl.mongodb.org/osx/mongodb-osx-i386-1.5.4.tgz

sudo tar mongodb-osx-i386-1.5.4.tgz

sudo mv mongodb-osx-i386-1.5.4 mongodb

2:安装PHP扩展

sudo pecl install mongo //使用PECL 安装扩展

sudo vi /usr/local/php/etc/php.ini // 修改php.ini文件

增加extension = “mongo.so”

启动MongoDB

创建数据文件存放的目录

mkdir -cp /data/db

/usr/local/mongodb/bin/mongod –dbpath=/data/db

PHP MongoDB 使用实例

<?php

$mongo = new Mongo(’localhost:27017′);

$db = $mongo->mydb;  // 选择一个数据库,如果没有则MongoDB会自动创建

$collection = $db->pblog; // 选择一个集合,如果没有则MongoDB会自动创建

$doc = array(”name” => “MongoDB”,

“type”   => “database”,

“count” => 1,

“info” => (object)array( “x” => 203,

“y” => 102),

“versions”  => array(”0.9.7″, “0.9.8″, “0.9.9″)

);

//$collection->insert( $doc );

for($i=0; $i < 100; $i++ ){

$collection->insert( array( “$i” => $i));

}

echo $collection->count();

$query = array( “71″ => 71);

$cursor = $collection->find($query);

while($cursor->hasNext()){

var_dump($cursor->getNext());

}

/*

$cursor = $collection->find();

foreach ($cursor as $id => $value){

echo “$id: “;

var_dump( $value );

}

*/

$obj = $collection->findOne();

var_dump($obj);

Gearman for mac os

Gearman(http://gearman.org/index.php),提供一个服务器端和多种语言的客户端接口,包括 C/Perl/Python/Ruby 等,在 client library 本身就支持一定程度的高可靠度。

Gearman系统用来把工作委派给其他机器,分布式的调用更适合做某项工作的机器,并发的做某项工作,在多个调用间做负载均衡,或用来在调用其它语言的函数。

对程序员来说,可以借助Gearman 建立分布式的任务处理集群。比如PHP Sharding

Gearman的安装也很简单

1: 安装libevent

wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz

tar zxvf libevent-1.4.12-stable.tar.gz

cd libevent-1.4.12-stable

./configure –prefix=/usr

make
sudo make install
2: 安装Gearman JobServer
wget http://launchpadlibrarian.net/43182593/gearmand-0.13.tar.gz
tar zxvf gearmand-0.13.tar.gz
cd gearmand-0.13
./configure
make
sudo make install
3: 安装Gearman PHP 扩展
wget http://pecl.php.net/get/gearman-0.7.0.tgz
cd gearman-0.7.0
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –with-gearman
make
sudo make install
4:修改php.ini
sudo vi /usr/local/php/etc/php.ini
添加:extension = gearman.so
5:启动Gearmand
/usr/local/sbin/gearmand -d
注意: 是gearmand而不是gearman

又拍网架构中的分库设计

周兆兆同学分享的又拍网的架构写的非常详细和具体,非常值得推荐,文中采用的架构和我们当初做IM系统的时候采用的架构体系基本完全一致,不同的是我们使用的是JAVA,需要进行水平分库的数据为用户的个人个人资料以及好友关系等数据。强烈建议大家仔细研究
_____________________________________________________________________________________________________________

关于作者:
周兆兆(Zola,不是你熟知的那个),又拍网架构师。6年IT从业经验,不太专注于某项技术,对很多技术都感兴趣。
来源:http://www.infoq.com/cn/articles/yupoo-partition-database

招聘PHP开发工程师,请推荐或帮忙转发

PHPer:
岗位要求
计算机或数学相关专业毕业
精通:LAMP(Linux+Apache+Mysql+PHP)、JavaScript,尤其是MYSQL数据库设计;
熟悉Nginx ,jQuery ,Xcache ,Memcached ,ImageMagick,Varnish ,Lucene 。
了解:网站标准理念、CSS+DIV布局;
具备良好的编程风格,思维活跃;
了解JAVA技术,
有 XHTML+CSS+Javascript 前端能力者更佳
工作内容
电子商务、社区门户网站等的设计和开发维护工作
互联网前端技术的研究工作
如果您有意愿并希望得到挑战 请讲个人简历发送到我的邮箱abuer.cn#gmail.com(请将#替换为@)
工作地点:北京海淀清华科技园赛尔大厦

注:该岗位为中级职位,高级PHPER请手下留情,学生勿扰!

兵熊熊一个,将熊熊一窝

最近热播《三国》,曹操有句话说了多次,也挺有意思,比如曹操说如果能得到关羽,胜得十万精兵。当然曹操对不少人过这句话,包括文人。如果说这句话比较扯淡,那也算是。你拿着刀跟十万精兵干一仗试试,就这十万人站在这里伸着了脖子让你砍,也能把你给累死。但周瑜赤壁火烧联营,干掉曹操80万雄兵。难道周瑜不是抵上十万精兵是什么?
于是反过来说,一个团队的好坏更多的取决于团队的领袖,而不是团队的基层成员。国外的典故也有说,一个狮子领导的羊群能干掉一个小肥羊领导的狮群说的也就是这道理。
曾经有一个兄弟跟他的Boss抱怨,你给我分得都是些什么人呀,不是刚毕业的新员工就是工作才一两年的,这怎么可能把事情做好。我当时就为了这哥们一个问题,这些员工是不是好吃懒做,死皮赖脸之徒。哥们说那应该不是。Boss说:“那就好办了,这帮人都是受过高等教育的人,即使智商不是超人那也最起码是中等偏上,而他们又肯努力学习和工作。他们现在唯一缺乏的是技能和经验,而这两样都是可以通过工作获得,问题是他们如何能够在短时间能获得到足够多的技能和经验以便满足工作的需要,而现在的问题就变成选择培训员工的方法”。
“培训?这要花费我多少时间?“
Boss说”显然,作为一个不是老板的管理者(即使是老板)要认识到人力资源增值的重要性, 并且人力资源增值的重要性要大于企业增值的重要性,如果你无法认识到这一点去培训你的员工,那么你的老板也可以不能认识到这一点去培训你,那么这样的团队就无法成为一个学习型的进步的团队,而这无论是对公司还是员工都是一个不好的结果。尤其是对于一个员工来说,包括我们自己,都很难说一直在一个公司一直服务下去,如果在进入另外一家公司前,我们的员工无法实现价值的提升,那么无论是员工还是作为管理者乃至作为企业的我们都是失败的,我们团队尤其是管理者都应该把培养员工作为日常工作中的一个重要组成部分“