PHP yii 從mysql改成mongodb過程XD
一開始想說用yii人家寫好的mongodb套件
http://www.yiiframework.com/extension/mongoyii/
弄弄好之後 run run看
還不錯說~~~
撈資料跟寫入資料寫法都跟原本yii的寫法差不多
酷酷der
而且新增Model只要簡單建立一個class並繼承他的寫好的class即可
方便便der
可是後來我發現一個很大的問題..........
就是...........慢到靠杯0rz|||||||||||
真的慢到爆......
我猜應該是裡面哪邊沒寫好.....我猜der
所以情非得已之下只好...用他原生的MongoClient等等寫法去寫
雖然速度真的很快
但就是不方便寫0rz
為了開發上的方便
我自己寫了幾個function 為了方便開發寫的
我把function弄成像yii的Model寫法
yii原本寫法可能是User::model()->find($criteria)
我自己寫的是User()->find($c);
其實User()這個function就像那個Model
function User() {
return $GLOBALS['mongoClient'] -> selectCollection('xxxxxx', 'user');
}
這是我自己想出來der
一方面很像yii原本的寫法 一方面加快開發速度0rz
然後簡單寫了update跟findByID的function
主要因為MongoDB在update跟findOne的時候需要包個MongoId物件....每次都這樣寫會煩死
所以我把這兩個麻煩的function寫成通用 方便我開發用的function
function update($collection, $data) {
$_id = (string)$data['_id'];
unset($data['_id']);
$newdata = array('$set' => $data);
return $collection -> update(array("_id" => new MongoId($_id)), $newdata);
}
function findByID($collection, $_id) {
return $collection -> findOne(array('_id' => new MongoId($_id)));
}
其實在yii我覺得寫在Controller的一個function感覺比較好說
但是實在懶得每次都在$this->xxxxx(blabalblabllba)
所以我把她寫成function~XD
改裝過程學到很多東西0rz
像是enum都寫成1,2,3,4,5,789
mysql是可以設定enum......小方便
不過mongodb這邊聽朋友說應該寫1234然後程式要記錄這些type的id是啥啥啥
也學到很多他的查詢寫法
最酷的是他的查詢與法就像在寫程式
即使是寫多重條件搜尋也只要條件成立把她塞進一個array即可
if (isset($search['brandID']) && !empty($search['brandID'])) {
$c['brandID'] = intval($search['brandID']);
}
$items = Sell() -> find($c) -> skip($skip) -> limit($itemPerPage);
超方便0rz
雖然yii本身的ctiteria概念有種東西叫addCondition
然後很不習慣的是他的PK是一長串~~~雖然這樣似乎也比較好0rz
改裝過程大致就是
先寫程式作資料轉換到mongoDB
然後再寫一些方便自己開發好用的function~~雖然其實是一邊寫一邊思考才變出這幾個function的XD
然後在一邊run網站 一邊到每隻程式進去改寫法
總之是個不簡單的工程0rz
不過有了這經驗
下次遇到啥網站有這種需求的
我一定可以改更快A0A
沒有留言:
發佈留言