手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

一周回顾

因為本次一周回顧與PHP相關較多,所以就扔在PHP分類裏了

1、yii DB cache,我這個Cache是指在查詢的時候,指定一個Dependceny,可以提高查詢效率,當沒有更新的數據時,就不會查詢數據庫了。在數據量低於10W的庫時,效率很高。但是數據庫的數據超過100萬時,再加上查詢的條件又是帶了id IN (xxx,xxx,xxx)。結果效率並不是特別高。
    準備換個方法做緩存

2、本周將以前的API進行了處理。原來為了趕速度,只要是接口就按照ifelse往下寫了。現在發現效率不高,所以又準備重新寫。但為了防止以前的接口不兼容。於是乎這次重寫除了提高效率,還得兼容舊數據。苦。。。所幸都解決了。
    正是以前想的,如果你代碼都沒有寫出來,你根本 就沒有機會去優化它,不是嗎?你想的再多,再精妙,如果寫不出。你拿什麼來優化?

其他沒有什麼大事。不過就一些小事。紀錄一下而已

hprose使用中的一個問題

什麼是hprose?這個我不想多說了,只想說它之前的版本叫phprpc,這是它的更新版,功能更強大。
官方地址是http://www.hprose.com。
以前用用都還行,結果就昨天在使用的時候發現,調用同樣的接口時,服務器返回502錯誤。但有時候確實是正常的。
仔細查看了一下,好象是返回的數據過大,於是我使用serialize將數組序列化後,用strlen查看了一下長度,發現長度在99999左右(這個數字當然是不對的,但大小差不多),最多也就99K嘍。但正因為這樣會出錯。於是我一點一點試
我在遠程的函數裏str_repeat("0",1111),一直嘗試,發現當數字在7000多時,就返回502了。因為是采用了php-fpm方式,所以我在本地的apache服務器上做了個測試,發現大約是在9000多字節。鬱悶。
問了一下andot,他說可能是服務器的設置也問題,也可能正好是一個BUG。但短時間內沒有時間測試了。

鬱悶

 

-----

时隔多日,这个BUG已经在一年前就解决了。只是我没有更新。andot居然来回复了一下,我想,我还是更新掉本文吧。

Tags: hprose, phprpc, serialize

yiiredis不足之处

Yiiredis是Yii的一个插件。用来方便我们对redis进行操作。封装了一些常用的list,hash之类的操作,对于Cache也做了一个封装,但在方便之余,问题也还是不少。比如说,我们要对数据sort,取出平均值,取出最大值之类的。默认的方法就不能用了。虽然yiiredis的类用了Array的interface,但利用php的操作,总归不如redis自身的操作。

一些参考资料上就写的比较详细:

典型的比如那些在线游戏的排行榜,比如一个Facebook的游戏,根据得分你通常想要:

-列出前100名高分选手

-列出某用户当前的全球排名

这些操作对于Redis来说小菜一碟,即使你有几百万个用户,每分钟都会有几百万个新的得分。

模式是这样的,每次获得新得分时,我们用这样的代码

  1. ZADD leaderboard <score> <username> 

你可能用userID来取代username,这取决于你是怎么设计的。

得到前100名高分用户很简单:ZREVRANGE leaderboard 0 99。

用户的全球排名也相似,只需要:ZRANK leaderboard <username>。

看上去也比较方便,不过我没有仔细看究竟是因为phpredis的实现有问题还是yiiredis的问题。等晚上睡不着的时候看看伦家的源码先

 

Tags: yiiredis

项目管理流程图

这是一个流程图,来自于禅道,http://www.zentao.net/help-read-79236.html
可以在自己的项目中做借鉴啊

在禅道项目管理软件中,核心的角色有产品经理、项目经理、研发团队和测试团队四种角色。如果您现在的团队是采用敏捷开发的话,那么可以对应到 product owner, scrum master和team(dev and tester)。这几种角色之间紧紧围绕产品的需求展开协作,取得成果。禅道核心的管理流程全图如下所示:
大小: 368.29 K
尺寸: 500 x 354
浏览: 3885 次
点击打开新窗口浏览全图
其实以前公司有流程图,但这一张图相对会比较完善一点

Tags: 项目管理, 禅道

SQL to Mongo Mapping Chart

mysql 与 mongo之间是怎么替换的?
官方有一个表格:

SQL Statement Mongo Query Language Statement
CREATE TABLE USERS (a Number, b Number) Implicit or use MongoDB::createCollection().
INSERT INTO USERS VALUES(1,1) $db->users->insert(array("a" => 1, "b" => 1));
SELECT a,b FROM users $db->users->find(array(), array("a" => 1, "b" => 1));
SELECT * FROM users WHERE age=33 $db->users->find(array("age" => 33));
SELECT a,b FROM users WHERE age=33 $db->users->find(array("age" => 33), array("a" => 1, "b" => 1));
SELECT a,b FROM users WHERE age=33 ORDER BY name $db->users->find(array("age" => 33), array("a" => 1, "b" => 1))->sort(array("name" => 1));
SELECT * FROM users WHERE age>33 $db->users->find(array("age" => array('$gt' => 33)));
SELECT * FROM users WHERE age<33 $db->users->find(array("age" => array('$lt' => 33)));
SELECT * FROM users WHERE name LIKE "%Joe%" $db->users->find(array("name" => new MongoRegex("/Joe/")));
SELECT * FROM users WHERE name LIKE "Joe%" $db->users->find(array("name" => new MongoRegex("/^Joe/")));
SELECT * FROM users WHERE age>33 AND age<=40 $db->users->find(array("age" => array('$gt' => 33, '$lte' => 40)));
SELECT * FROM users ORDER BY name DESC $db->users->find()->sort(array("name" => -1));
CREATE INDEX myindexname ON users(name) $db->users->ensureIndex(array("name" => 1));
CREATE INDEX myindexname ON users(name,ts DESC) $db->users->ensureIndex(array("name" => 1, "ts" => -1));
SELECT * FROM users WHERE a=1 and b='q' $db->users->find(array("a" => 1, "b" => "q"));
SELECT * FROM users LIMIT 10 SKIP 20 $db->users->find()->limit(10)->skip(20);
SELECT * FROM users WHERE a=1 or b=2 $db->users->find(array('$or' => array(array("a" => 1), array("b" => 2))));
SELECT * FROM users LIMIT 1 $db->users->find()->limit(1);
EXPLAIN SELECT * FROM users WHERE z=3 $db->users->find(array("z" => 3))->explain()
SELECT DISTINCT last_name FROM users $db->command(array("distinct" => "users", "key" => "last_name"));
SELECT COUNT(*y) FROM users $db->users->count();
SELECT COUNT(*y) FROM users where AGE > 30 $db->users->find(array("age" => array('$gt' => 30)))->count();
SELECT COUNT(AGE) from users $db->users->find(array("age" => array('$exists' => true)))->count();
UPDATE users SET a=1 WHERE b='q' $db->users->update(array("b" => "q"), array('$set' => array("a" => 1)));
UPDATE users SET a=a+2 WHERE b='q' $db->users->update(array("b" => "q"), array('$inc' => array("a" => 2)));
DELETE FROM users WHERE z="abc" $db->users->remove(array("z" => "abc"));


不过,硬要说的话,这个还不全,http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart,这里有更全的。
在上面的页面还能够讲这个mapping chart导出成pdf。
比如,这个:docs-8716963-090117-10.pdf

Tags: mongo