標籤:des style blog http io ar color os sp
轉自同功BBS
拆表存取kv
<?php/*經過拆變最佳化的ECStore mongodb 類base/lib/kvstore/mongodb.php*/class base_kvstore_mongodb extends base_kvstore_abstract implements base_interface_kvstore_base { static private $_mongodb = null; function __construct($prefix) { $prefix = is_string($prefix) ? preg_replace("(\/|\\|\-|-|-|\_|_)",‘.‘, $prefix):md5(var_export($prefix ,true)); $this->prefix = $prefix; if(!isset(self::$_mongodb)){ $server = defined(‘MONGODB_SERVER_CONFIG‘)?MONGODB_SERVER_CONFIG:"mongodb://localhost:27017"; $option = defined(‘MONGODB_OPTION_CONFIG‘)?eval(MONGODB_OPEION_CONFIG):array("connect" => TRUE); self::$_mongodb = new Mongo($server,$option); } $this->mongodb = self::$_mongodb->selectCollection(‘ecos‘,$this->prefix); }//End Function public function fetch($key, &$value, $timeout_version=null) { $store = $this->mongodb->findOne(array(‘key‘=>$this->create_key($key))); if(!is_null($store) && $timeout_version < $store[‘dateline‘]){ if($store[‘ttl‘] > 0 && ($store[‘dateline‘]+$store[‘ttl‘]) < time()){ return false; } $value = $store[‘value‘]; return true; } return false; }//End Function public function store($key, $value, $ttl=0) { $store[‘value‘] = $value; $store[‘dateline‘] = time(); $store[‘ttl‘] = $ttl; $store[‘key‘] = $this->create_key($key); $store[‘prefix‘] = $this->prefix; $res = $this->mongodb->update(array(‘key‘=>$store[‘key‘]), $store, array("upsert" => true)); return $res; }//End Function public function delete($key) { return $this->mongodb->remove(array(‘key‘=>$this->create_key($key))); }//End Function public function recovery($record) { $key = $record[‘key‘]; $store[‘key‘] = $this->create_key($key); $store[‘value‘] = $record[‘value‘]; $store[‘dateline‘] = $record[‘dateline‘]; $store[‘ttl‘] = $record[‘ttl‘]; $res = $this->mongodb->update(array(‘key‘=>$store[‘key‘]), $store, array("upsert" => true)); return $res; }//End Function}//End Class
保證各關鍵表索引情況
每當mongodb 資料量激增,讀寫頻繁,鎖表嚴重,基本就是索引未加,或未經過拆表方案。
/*mongo 命令列操作*/use ecosshow collectionsdb.printCollectionStats()db.default.ensureIndex({key:1})db.b2c.cart.ensureIndex({key:1})db.tbdefine.ensureIndex({ke:1})db.cache.content.nodes.ensureIndex({key:1})db.b2c.goods.ensureIndex({key:1})
最佳化ECStore mongodb大資料 讀寫效率