【ecstore深思录】细谈其引入的KV机制(key-value)

来源:互联网 发布:惯性导航算法 四元 编辑:程序博客网 时间:2024/05/20 10:23

一、kv是个什么鬼:

    kv存储机制(key-value-store)是商派研发的ecos框架解决大数据存储的一种优化方式。对memcached、systemfile/flare等进行封装把不常变动的一些数据存储在kvstore中。    举个例子:原来你想存一个字段入库,但是为了一个字段建一张表再插入、取出数据    是不是太麻烦,太铺张浪费了。有了KV,    我直接存字段到框架自身建好的表或者缓存中,    需要的时候直接凭借key拿出value就好,是不是方便多了,这就是它的奇妙之处。

二、在商派的ecstore中改如何配置

    kvstroe默认的存储是filesystem,如果要改成为memcache 或者memcached    则在config.php 文件中有要开启下面的配置(单个memcache服务)
# kvstore后台存储类# define('KVSTORE_STORAGE', 'base_kvstore_filesystem');# define('KVSTORE_STORAGE', 'base_kvstore_mysql');define('KVSTORE_STORAGE', 'base_kvstore_memcache');# define('KVSTORE_STORAGE', 'base_kvstore_dba');# define('KVSTORE_STORAGE', 'base_kvstore_tokyotyrant');# kvstore memcache服务器配置# socket  'unix:///tmp/memcached.sock'# server  '127.0.0.1:11211'# multi   'unix:///tmp/memcached.sock,127.0.0.1:11211,127.0.0.1:11212'define('KVSTORE_MEMCACHE_CONFIG', '127.0.0.1:11211'); 

# 多台kvstore memcache 的服务器配置只需要在ip后加“,”号

define('KVSTORE_MEMCACHE_CONFIG', 'unix:///tmp/memcached.sock,127.0.0.1:11211,127.0.0.1:11212'); 

三、KVstore的使用流程:

    1、先选择数据存储方式:非持久存储和持久存储    2、调用过程:数据先从kv中取,没有从mysql中取,取出来放进kv中

四、kvstore封装好常用的接口:

static function config_prsistent($flag):设置是否持久化static function instance($prefix) 实例化kvstorepublic function increment($key,$offset=1):自增public function decrement($key,$offset=1):自减public function fetch($key,$value,$offset,$timeout_version=null):返回bool值和$_fetch_accoun调用次数,获取key值得内容public function store($key,$value,$ttl=1):设置key对应的value,和返回次数public function delete($key,$ttl=1):删除key对应的value,这里不是物理删除,只改变ttl对应的值来虚拟删除public  function persitent($key,$value,$ttl=1):将数据永久的存在sdb_base_kvstore中,持久化存储public function recoverry($record):回复对应的valuestatic public function delete_expire_data():根据过期时间再次对kvstore表进行删除
 注意:只有memcached支持inccrement和deincrement;mysql不支持方法recovery

五、实际应用场景演示:

一直认为,没有实际应用的理论都是扯淡,纸上谈兵谁不会,那小编在此给大家展示下实际应用的demodemo1、文章浏览次数(热度)的统计:(ecstore中可以采用两种方式存和取kv值)

这里写图片描述

方式一、利用ecstore框架自身封装好的setConf(存值)和getconf(取值)函数

    ##首先根据文章id取文章取浏览次数,有则加1存入;无则存入首次访问    $view_count=app::get('b2c')->getConf('view_count_').$_POST['acticle_id'];    if($view_count){        app::get('b2c')->setConf('view_count_'.$_POST['article_id'],$view_count+1);    }else{        app::get('b2c)->setConf('view_count_'.$_POST['article_id'],1);    }

`方式二、利用ecstore框架底层的的store(存值)和fetch(取值)函数

    $key='view_count_'.$_POST['article_id'];    $view_count=base_kvstore::instance('b2c')->fetch($key,$content);    if($view_count){        base_kvstore::instance('b2c')->store($key,int($content)+1);    }else{        base_kvstore::instance('b2c')->store($key,1);    }
参考资料:    《shopex:key-value》转载请标明出处:     http://blog.csdn.net/a5485899/article/details/54092535    本文出自:【蔡梦龙的博客】(http://blog.csdn.net/a5485899/) 
1 0
原创粉丝点击