首页 > 代码库 > 优化ECStore mongodb大数据 读写效率
优化ECStore mongodb大数据 读写效率
转自同功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大数据 读写效率
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。