海运的博客

Percona和HandlerSocket

发布时间:July 19, 2014 // 分类:NoSQL // No Comments

rpm -ivh http://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.i386.rpm
rpm -ivh http://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
yum install Percona-Server-server-55

配置:

[mysqld]
plugin-load=handlersocket.so 
loose_handlersocket_port = 9998 
loose_handlersocket_port_wr = 9999
loose_handlersocket_threads = 16
loose_handlersocket_threads_wr = 1 
open_files_limit = 65535 

Tokyo Cabinet表格型数据结构

发布时间:January 8, 2014 // 分类:NoSQL // No Comments

Tokyo Cabinet支持Table数据结构,类似于SQL,可按条件查找索引,记录下:

#新建数据库,实际上类似于SQL表
tctmgr create user.tct
#key1为主健,name和passwd为字段
tctmgr put user.tct key1 "name" "u1" "passwd" "123"
#列出当前表数据
tctmgr list -pv user.tct
#按字段查找,类似于select * from where name = u1 limit 15;
tctmgr search -pv -m 15 user.tct name STREQ "u1" 
#建立索引
tctmgr setindex user.tct name

PHP接口:

<?php
   $tt = new TokyoTyrantTable("localhost", 1978);
   $query = $tt->getQuery();

   $query->addCond("name", TokyoTyrant::RDBQC_STREQ, "u1")->setLimit(5, 5);
   var_dump($query->search());
?>

NoSQL持久化存储之Kyoto Cabinet

发布时间:January 6, 2014 // 分类:NoSQL // No Comments

安装Kyoto Cabinet:

yum install gcc gcc-c++ zlib-devel bzip2-devel
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.76.tar.gz
tar zxvf kyotocabinet-1.2.76.tar.gz 
cd kyotocabinet-1.2.76
./configure --prefix=/usr/local/kyotocabinet-1.2.76
make && make install
echo "/usr/local/kyotocabinet-1.2.76/lib/" >> /etc/ld.so.conf.d/kyoto.conf 
ldconfig

安装Lua Kyoto Cabinet扩展:

yum install lua-devel
wget http://fallabs.com/kyotocabinet/luapkg/kyotocabinet-lua-1.28.tar.gz
tar zxvf kyotocabinet-lua-1.28.tar.gz 
cd kyotocabinet-lua-1.28
./configure --with-kc=/usr/local/kyotocabinet-1.2.76/
make && make install

安装Kyoto Tycoon:

wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.56.tar.gz
tar zxvf kyototycoon-0.9.56.tar.gz 
cd kyototycoon-0.9.56
./configure --prefix=/usr/local/kyototycoon-0.9.56 --with-kc=/usr/local/kyotocabinet-1.2.76/ --enable-lua
make && make install
mkdir /etc/ktserver/
cp example/*.lua /etc/ktserver/
echo "/usr/local/kyototycoon-0.9.56/lib/" >> /etc/ld.so.conf.d/kyoto.conf 
ldconfig

使用Kyoto Tycoon为前端管理LevelDB,先安装LevelD存储:然后安装Kyoto Tycoon插件支持LevelDB:

cd lab/leveldb/
export CPLUS_INCLUDE_PATH=/usr/local/kyotocabinet-1.2.76/include/
export LIBRARY_PATH=/usr/local/kyotocabinet-1.2.76/lib
make
cp ktplugdblevel.so /usr/local/kyototycoon-0.9.56/lib/

启动:

ktserver -th 4 -scr /etc/ktserver/ktscrex.lua -pldb /usr/local/kyototycoon-0.9.56/lib/ktplugdblevel.so \
/tmp/leveldb/#ktopts=p

使用HTTP协议管理:

curl "http://192.168.1.3:1978/rpc/set?key=japan&value=tokyo" 
curl "http://192.168.1.3:1978/rpc/get?key=japan" 
curl "http://192.168.1.3:1978/rpc/remove?key=japan" 

使用客户端管理:

ktremotemgr set -host 192.168.1.3 -port 1978 key value
ktremotemgr get -host 192.168.1.3 -port 1978 key
ktremotemgr list -host 192.168.1.3 -port 1978 -pv

使用Kyoto Tycoon管理LevelDB兼容于直接使用LevelDB PHP扩展设置的数据库,启动时添加参数:

#ktopts=p

使用Kyoto Tycoon Lua脚本,API:http://fallabs.com/kyototycoon/luadoc/modules/kyototycoon.html

ktremotemgr script -host 192.168.1.3 -port 1978 set key key1 value value1
ktremotemgr script -host 192.168.1.3 -port 1978 get key key1
curl "http://192.168.1.3:1978/rpc/play_script?name=set&_key=key1&_value=value1"
curl "http://192.168.1.3:1978/rpc/play_script?name=get&_key=key1"

NoSQL持久化存储之Tokyo Cabinet

发布时间:January 2, 2014 // 分类:NoSQL // No Comments

安装Tokyo Cabinet,后端存储:

yum install gcc zlib-devel bzip2-devel
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
tar zxvf tokyocabinet-1.4.48.tar.gz
cd tokyocabinet-1.4.48/
./configure --prefix=/usr/local/tokyocabinet-1.4.48/
make && make install

安装Tokyo Cabinet PHP扩展:

git clone https://github.com/rsky/php-tokyocabinet.git
cd php-tokyocabinet/
phpize 
export PKG_CONFIG_PATH=/usr/local/tokyocabinet-1.4.48/lib/pkgconfig/
./configure --enable-tokyocabinet 
make && make install
echo "extension=tokyocabinet.so" >> /etc/php.ini

使用:

<?php
   $bdb = new TCBDB();
   $bdb->open('tc.bdb', TCBDB::OWRITER | TCBDB::OCREAT);
   $bdb->put('key', 'value');
   echo $bdb->get('key'), "\n";
?>

安装Tokyo Cabinet Lua扩展:

yum install lua-devel
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/tokyocabinet-1.4.48/include/
wget http://fallabs.com/tokyocabinet/luapkg/tokyocabinet-lua-1.10.tar.gz
tar zxvf tokyocabinet-lua-1.10.tar.gz 
cd tokyocabinet-lua-1.10
./configure --prefix=/usr/local/tokyocabinet-lua-1.10 
make && make install

安装Tokyo Tyrant,网络前端:

wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
tar zxvf tokyotyrant-1.1.41.tar.gz 
cd tokyotyrant-1.1.41
./configure --prefix=/usr/local/tokyotyrant-1.1.41/ --enable-lua  \
--with-tc=/usr/local/tokyocabinet-1.4.48/
make && make install
cp -r ext/ /etc/ttserver
echo "/usr/local/tokyotyrant-1.1.41/lib/" >> /etc/ld.so.conf.d/tokyo.conf
echo "/usr/local/tokyocabinet-1.4.48/lib" >> /etc/ld.so.conf.d/tokyo.conf
ldconfig

启动Tokyo Tyrant:

ttserver -host 127.0.0.1 -port 1978 -thnum 8 -dmn -pid /tmp/ttserver.pid -log /tmp/ttserver.log -le \
-ulog /tmp/ -ulim 32m -sid 1 -rts /tmp/ttserver.rts -ext /etc/ttserver/queue.lua /tmp/database.tch

Tokyo Tyrant通过tcrdbext.c对Lua提供了API,可使用Lua脚本扩展Tokyo Tyrant服务端功能。
更多:http://fallabs.com/tokyotyrant/spex.html#luaext
安装Tokyo Tyrant PHP扩展:

git clone https://github.com/mkoppanen/php-tokyo_tyrant.git
cd php-tokyo_tyrant/
phpize
./configure --with-tokyo-tyrant=/usr/local/tokyotyrant-1.1.41/ \
--with-tokyo-cabinet-dir=/usr/local/tokyocabinet-1.4.48/
make && make install
echo 'extension=tokyo_tyrant.so' >> /etc/php.ini

测试:

<?php
   $tt = new TokyoTyrant("localhost", '1978');
   $tt->put("key", "value");
   echo $tt->get("key");

   for($i=1; $i<=100; $i++)
   {
      $tt->ext('enqueue','0', 'my_queue', $i );
   }
   print_r($tt->ext('dequeue', '0','my_queue',  10));
   print_r($tt->ext('dequeue', '0','my_queue',  10));
   print_r($tt->ext('dequeue', '0','my_queue',  10));
//上面ext方法的第2个参数0,为是否开启锁机制,还有下面两个值可选:
//一个相当于行锁,一个相当于表锁,一般第一个就够用了
//Tyrant::XOLCKREC for record locking
//Tyrant::XOLCKGLB for global locking
?>

使用客户端管理:

tcrmgr put -port 1978 127.0.0.1 key1 value1
tcrmgr ext -port 1978 127.0.0.1 enqueue myqueue value1
curl -X PUT http://192.168.1.3:1978/key1 -d "value1"
curl http://127.0.0.1:1978/key1

NoSQL持久化存储之LevelDB

发布时间:January 2, 2014 // 分类:NoSQL // No Comments

安装LevelDB:

cd /usr/local/src/
wget http://leveldb.googlecode.com/files/leveldb-1.15.0.tar.gz
tar zxvf leveldb-1.15.0.tar.gz 
cd leveldb-1.15.0
make
cp libleveldb.* /usr/local/lib/
cp -r include/leveldb /usr/local/include/

LevelDB提供了一个测试程序:

make db_bench
cp db_bench /usr/local/bin/
db_bench --num=100000000 --write_buffer_size=$((256*1024*1024))

安装PHP扩展,https://github.com/reeze/php-leveldb

git clone https://github.com/reeze/php-leveldb.git
cd php-leveldb/
phpize
./configure
make
make install
echo 'extension=leveldb.so' >> /etc/php.ini

测试下下写入2亿数据用时30分钟,然后读取单个key用时0.02秒左右。

<?php
   $start = microtime ( true ); 
   $db = new LevelDB("/tmp/leveldb-test2-db");
   for($i=1; $i<=200000000; $i++)
   {
      $key = sprintf('%012d', $i);
      $db->put("queue-$key", "value$i@gmail.com");
   }
   $end = microtime ( true ); 
   echo "脚本执行时间".($end - $start)."\n";  
   //$db->get('key');
?>

前端可使用:Kyoto Tycoon

分类
最新文章
最近回复
  • ccc: 可以提供易调用openssl常用函数吗?
  • 夜未央: 在centos7 下面 貌似转换不了。有人遇到过么????
  • brian: 博主你好,请教一个问题。我使用fprobe进行将交换机流量转换成netflow时是没有问题的,...
  • 吴昊: 学习了,感谢博主分享
  • linhua: 只需配置 服务端 的接收端口随机化就行了, 发送端口 因为 连接追踪(conntrack)的缘...
  • Realm: 博主你好,按照你的教程设置了IP转发及SNAT:echo 1 > /proc/sys/net/...
  • Roki: 大神, 为什么我在make clean 就出错了呢 ?你能帮我看看吗 。。。474495758...
  • Duuge: 遇到相同的问题,但未能解决,请求帮助。1、遇到的问题:/target-i386_i486_uC...
  • carlo: 大哥,我觉得你的技术好牛逼!能加你QQ吗
  • lebron: Unknown package 'lrzsz'.Collected errors:* opkg...
页面执行耗时:0.0467秒。-->