- 浏览: 188799 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
grzrt:
zkf55915 写道哥们怎么用啊
好久不用了,就是看帮助资 ...
淘宝MetaQ开源消息队列安装 -
zkf55915:
哥们怎么用啊
淘宝MetaQ开源消息队列安装 -
grzrt:
jinnianshilongnian 写道整这个了?
没有 看 ...
linux内核中链表的实现 -
jinnianshilongnian:
整这个了?
linux内核中链表的实现
一. 安装
前注:没使用最新版本,因为最新版本似乎存在环境依赖的bug,编译N多错误,很难通过。
(1)安装kyotocabinet
mkdir -p /data0/software/
cd /data0/software/
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.43.tar.gz
tar xvzf kyotocabinet-1.2.43.tar.gz
cd kyotocabinet-1.2.43
./configure --prefix=/usr/local/webserver/kyotocabinet
make
make install
cd ../
(2)安装kyototycoon
cd /data0/software/
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.33.tar.gz
tar xvzf kyototycoon-0.9.33.tar.gz
cd kyototycoon-0.9.33
./configure --prefix=/usr/local/webserver/kyototycoon
--with-kc=/usr/local/webserver/kyotocabinet/
make
make install
cd ../
二.使用kchashtest生成一亿条测试数据
(生成的测试数据key为8位数字,value为3位数字)
kchashtest order -bnum 150000000 -msiz 11g -set /data0/tycoon/casket1.kch 100000000
kchashtest较影响性能的几个参数:
-bnum 指定哈希表的桶数量。官方推荐是记录数的两倍或者更高。
-msize 指定内存映射区域大小。
-dfunit 设定一个值,当碎片数超过这个值系统就进行碎片整理。
-dmn 以daemon方式启动。
-th num : 指定线程数
生成测试数据后以ktserver模式启动(ktserver参数意义见文章尾)
ktserver -host 192.168.8.46 -port 1978 -tout 10 -log /data0/tycoon/ca.log -ls -dmn -pid /data0/tycoon/ktserver.pid /data0/tycoon/casket1.kch#opts=1#bnum=150000000#msiz=11g#dfunit=8
ktsever较影响性能的几个参数:
-bnum 指定哈希表的桶数量。官方推荐是记录数的两倍或者更高。
-msize 指定内存映射区域大小。
-dfunit 设定一个值,当碎片数超过这个值系统就进行碎片整理。
-dmn 以daemon方式启动。
-th num : 指定线程数
三. 日常维护及使用
关闭ktserver
kill -TERM `cat /data0/tycoon/ktserver.pid `
Ktserver切割日志
mv -f /data0/tycoon/ktserver.log /data0/tycoon/ktserver.log.`date '+%Y%M%d%H%M%S'`
kill -HUP `cat /data0/tycoon/ktserver.pid`
应用
使用http 客户端
由于每个数据库操作都经由http 调用,你可以使用任何http 客户端,诸如curl 命令来操作
数据库。
例:
添加数据
curl "http://192.168.8.46:1978/rpc/set?key=japan&value=tokyo"
读取数据
curl "http://192.168.8.46:1978/rpc/get?key=japan"
删除数据
curl "http://192.168.8.46:1978/rpc/remove?key=japan"
除了上述RPC风格外还支持RESTfull风格
例:
添加数据
echo -n tokyo | curl -X PUT -T - "http://192.168.8.46:1978/japan"
读取数据
curl "http://192.168.8.46:1978/japan"
tokyo
删除数据
curl -X DELETE "http://192.168.8.46:1978/japan"
四. 主从模式的配置及功能性测试
注意事项
1.主库必须记录更新日志。
2.主库必须指定唯一的id 号。
-sid num : 指定服务器server id 号(当使用主辅模式时,每台ktserver 需要不同
的ID 号)
3.从库也必须记录更新日志,当主库宕机时,从库就变成主库。
4.从库必须指定唯一的server id 号
5.从库必须指定主库的端口号和地址。
6.从库必须指定复制时间戳文件。
下面的一个主从实例,主库端口192.168.8.46:1978,从库端口192.168.8.41:1978
首先创建一个主库实例
ktserver -dmn -host 192.168.8.46 -port 1978 -ulog /data0/tycoon/0001-ulog -sid 1 -rts /data0/tycoon/001.rts /data0/tycoon/casket1.kch#opts=1#bnum=150000000#msiz=11g#dfunit=8
(ulog 和数据库文件casket1.kch 都需要指定目录,否则将在当前目录生成,目录需要事先创建好。)
再创建一个从库实例
ktserver -dmn -host 192.168.8.45 -port 1978 -ulog /data0/tycoon/0001-ulog -sid 2 -mhost 192.168.8.46 -mport 1978 -rts /data0/tycoon/001.rts
/data0/tycoon/casket1.kch#opts=1#bnum=150000000#msiz=1g#dfunit=8
测试
向主库中添加数据
curl "http://192.168.8.46:1978/rpc/set?key=japan&value=tokyo"
读取主库
curl "http://192.168.8.46:1978/japan"
Tokyo
读取从库
curl "http://192.168.8.45:1978/japan"
tokyo
删除主库数据
curl -X DELETE "http://192.168.8.46:1978/japan"
再次读取从库
curl "http://192.168.8.45:1978/japan"
没有数据了。成功。
五. 双主模式的配置
Kyoto Tycoon 支持双主模式以提高高可用。
例:创建两个主库实例,分别叫A 和B。
首先创建A
ktserver -dmn -host 192.168.8.46 -port 1978 -ulog /data0/tycoon/0001-ulog -sid 1 -mhost 192.168.8.45 -mport 1978 -rts /data0/tycoon/001.rts /data0/tycoon/casket1.kch#opts=1#bnum=150000000#msiz=11g#dfunit=8
然后创建B
ktserver -dmn -host 192.168.8.46 -port 1978 -ulog /data0/tycoon/0001-ulog -sid 2 -mhost 192.168.8.46 -mport 1978 -rts /data0/tycoon/001.rts /data0/tycoon/casket1.kch#opts=1#bnum=150000000#msiz=11g#dfunit=8
添加数据
向A 中添加数据
curl "http://192.168.8.46:1978/rpc/set?key=one&value=first"
curl "http://192.168.8.46:1978/rpc/set?key=two&value=second"
向B 中添加数据
curl "http://192.168.8.45:1978/rpc/set?key=three&value=third"
curl "http://192.168.8.45:1978/rpc/set?key=four&value=fourth"
添加数据也可以使用ktremotemgr 实用程序
ktremotemgr set -host 192.168.8.46 -port 1978 one first
ktremotemgr set -host 192.168.8.46 -port 1978 two second
ktremotemgr set -host 192.168.8.45 -port 1978 three third
ktremotemgr set -host 192.168.8.45 -port 1978 four fourth
查看数据
$ ktremotemgr list -host 192.168.8.46 -port 1978 -pv
one first
two second
three third
four fourth
$ ktremotemgr list -host 192.168.8.45 -port 1978 -pv
one first
two second
three third
four fourth
六.并发访问测试和远程访问速度测试
1.并发访问测试。
并发测试工具使用webbench,最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。具体安装参见:
http://blog.s135.com/post/288/
测试流程:
如下,由于一个节点模拟三万并发会造成客户端僵死,所以先使用一台客户端模拟1万个并发去测试一个kt节点,发现kt节点无任何错误和异常。
[root@xoyo-test-43]#webbench -c 10000 -t 10 http://192.168.8.46:1978/rpc/get?key=00000001
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.8.46:1978/rpc/get?key=00000001
10000 clients, running 10 sec.
Speed=1117350 pages/min, 3538104 bytes/sec.
Requests: 186225 susceed, 0 failed.
然后使用四台客户端每台模拟一万个并发去测试一个kt节点,发现kt节点扔无错误,但kt节点进程占用资源开始飙高。
得出结论,一个kt节点可应对四万以上并发连接。
2.网络远程访问速度测试
使用kt自带的ktremotetest进程远程读写测试:
[root@xoyo-45 tycoon]# ktremotetest bulk -set -host 192.168.8.46 -port 1978 100000
opening the database:
time: 0.000
memory: 208896
time: 19.875
closing the database:
time: 0.000
ok
[root@xoyo-45 tycoon]# ktremotetest bulk -get -host 192.168.8.46 -port 1978 100000
opening the database:
time: 0.000
memory: 208896
time: 17.707
closing the database:
time: 0.000
ok
经多次测试,得出结论,同局域网断其他主机访问kt节点读写都为每秒5000条记录左右。本机访问,每秒为1万条左右。
附录一kstserver启动参数
-host name : 指定需要绑定的服务器域名或IP 地址。默认绑定这台服务器上的所有IP
地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-th num : 指定线程数。默认为8 个线程。
-log file: 输出日志信息到指定文件(这里指定文件名)。
-li : 日志记录级别---notice。
-ls : 日志记录级别---system。
-le : 日志记录级别---error。
-lz : 不记录日志.
-ulog dir : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uasi num : 指定数据同步到磁盘的时间间隔,该选项默认是关闭的。
-sid num : 指定服务器ID 号(当使用主辅模式时,每台ktserver 需要不同的ID 号)
-ord : opens the database as a reader.
-oat : opens the database with the auto transaction option.
-oas : opens the database with the auto synchronization option.
-onl : opens the database with the no locking option.
-otl : opens the database with the try locking option.
-onr : opens the database with the no auto repair option.
-asi num : 指定自动同步间隔,默认关闭。
-ash : 当自动同步的时候也同步到屋里磁盘上
-bgs dir : specifies the path of the background snapshot directory. By default, it is disabled.
-bgsi num : specifies the interval of background snapshotting. By default, it is 180.
-bgsc str : 指定快照的压缩格式。支持的格式有"zlib","lzo",lzma"
-dmn : 以守护进程方式运行。
-pid file: 输出进程ID 到指定文件(这里指定文件名)。
-cmd dir : 指定外部指令的搜寻路径,默认是当前路径。
-scr file : 指定脚本文件
-mhost str: 指定主辅同步模式下,主服务器的域名或IP 地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts file: 指定用来存放同步时间戳的文件名。
-riv num : 指定每次同步操作的毫秒时间间隔,默认是0.04 毫秒。
-plsv file : specifies the shared library file of a pluggable server.
-plex str : specifies the configuration expression of a pluggable server.
-pldb file : 指定插件库的动态链接库文件。
附录二常用ktremotemgr参数
1.打印当前数据库状态信息
ktremotemgr report [-host str] [-port num] [-tout num]
2.插入数据
ktremotemgr set [-host str] [-port num] [-tout num] [-db str] [-add|-rep|-app|-inci|-incd] [-sx]
[-xt num] key value
3.删除数据
ktremotemgr remove [-host str] [-port num] [-tout num] [-db str] [-sx] key
4.查询数据
ktremotemgr get [-host str] [-port num] [-tout num] [-db str] [-sx] [-px] [-pt] [-pz] key
5.列出所有key
ktremotemgr list [-host str] [-port num] [-tout num] [-db str] [-des] [-max num] [-sx] [-pv]
[-px] [-pt] [key]
6.根据key 删除多条记录
ktremotemgr removebulk [-host str] [-port num] [-tout num] [-bin] [-db str] [-sx] key1 key2
key3 ...
7.根据key 取出多条记录
ktremotemgr getbulk [-host str] [-port num] [-tout num] [-bin] [-db str] [-sx] [-px] key1 key2
key3 ...
8.批量添加key、value
ktremotemgr setbulk [-host str] [-port num] [-tout num] [-bin] [-db str] [-sx] [-xt num] key
value ...
9.模拟一个客户端复制并打印更新记录
ktremotemgr slave [-host str] [-port num] [-tout num] [-ts num] [-sid num] [-ux] [-uw] [-uf]
[-ur]
10.删除数据库中的所有记录
ktremotemgr clear [-host str] [-port num] [-tout num] [-db str]
11.设定复制配置
ktremotemgr tunerepl [-host str] [-port num] [-tout num] [-mport str] [-ts num] [-iv num]
[mhost]
选项说明
-host str: 指定主机名或IP
-port num: 指定端口号
-tout num: 指定超时时间.
-bin: 使用二进制协议.
-mport num: 指定主库端口号.
-ts num: 指定已经读取日志的最大时间戳。“now”意为当前时间戳。
-iv num: 指定每次同步操作的毫秒时间间隔。
-db str: 指定数据库名称
-st: 打印详细信息。
-hard: 启动设备的物理同步
-cmd str: specifies an outer command for postprocessing.
-add: 运行添加操作
-app: 追加操作
-rep: 替代操作
-inci: 使整数自增
-incd: 使实数自增
-sx: 将输入数据转换成16进制字符串
-xt num: 指定截止时间
-px: 将输出数据转换成16进制字符串
-pt: 打印截止时间
-pz: does not append line feed at the end of the output.
-des: visits records in descending order.
-max num: specifies the maximum number of shown records.
-pv: 打印value 值.
-step num: 指定步骤的数字.
-sid num: 指定server ID .
-ux: fetches update logs of the specified server ID number only.
-uw: 等待更新.
-uf: 打印每次更新日志的状态.
-ur:移除老的更新日志文件.
附录三安装遇到的错误及使用中可能遇到的问题
1.kc和kt都不使用最新版本,因为最新版本似乎存在环境依赖的bug,编译N多错误,很难通过。
2.安装中可能遇到以下错误
[root@xoyo-test-43 kyototycoon-0.9.35]# ./configure
checking Kyoto Cabinet by pkg-config... no
configure: error: required version of Kyoto Cabinet was not detected
原因:版本不匹配
我测试匹配的版本如下
kyotocabinet-1.2.43.tar.gz
kyototycoon-0.9.33.tar.gz
注意事项:如果安装kyotocabinet 使用--prefix 参数指定安装目录了,再安装kyototycoon 时
就需要加参数--with-kc
例如:
[root@test kyototycoon-0.9.33]# ./configure --with-kc=/usr/local/webserver/kyotocabinet/
3.生成数据时,是一个非常耗费内存的过程,如果灌入上亿条记录,需要12G内存以上为好,不然会非常慢,甚至可能需要耗费几天的时间。而且,按目前的观察,即使现在某一台生成kch数据,再拷贝到其他节点,再启动kt进程的时候似乎还要重新加载一次数据,这个过程也是非常慢的。
发表评论
-
Eclipse 相同变量的高亮 及颜色
2013-02-18 17:26 1664在Eclipse/MyEclipse中如果不小心把变量的高 ... -
copy项目是容易出现的错误--webAppRootKey错误
2012-12-05 21:18 733Tomcat 发布多个项目时抛的webAppRootKey错误 ... -
redis主从的配置和使用
2012-11-23 14:24 1039redis主从的配置和使 ... -
Linux修改MySql默认存储引擎为InnoDB
2012-09-13 18:25 1581一、关闭相关应用 二、停止mysql bin/m ... -
MySQL数据库的初始化mysql_install_db
2012-09-13 14:13 4684一、mysql_install_db说明 当MySQL的 ... -
四层和七层负载均衡的区别介绍
2012-09-12 11:46 879简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口 ... -
Linux下高并发Tcp需要突破的限制
2012-09-06 13:47 7831、修改用户进程可打开文件数限制 在Linux平台上, ... -
LInux Tcp 延迟确认问题
2012-09-06 10:17 1400案例一:同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发 ... -
Nagle算法 TCP_NODELAY和TCP_CORK
2012-09-06 08:43 1222Nagle算法 根据创建者John Nagle命 ... -
Oracle之自治事务
2012-09-04 11:32 1003昨天处理项目中的一个 ... -
socket中accept()函数的理解
2012-09-01 22:41 6847如果客户端有连接请 ... -
mysql 主从复制1201错误
2012-08-19 15:59 949工作日志之-MySQL slave Replication E ... -
Redis学习手册(主从复制)
2012-08-19 11:39 824一、Redis的Replication: 这里首先需要说 ... -
Redis学习手册(持久化)
2012-08-19 11:39 783一、Redis提供了哪些持久化机制: 1). RDB持久 ... -
Redis学习手册(虚拟内存)
2012-08-19 11:38 730一、简介: 和大多NoS ... -
socket中的TIME_WAIT状态
2012-08-16 11:47 773TCP要保证在所有可能的 ... -
bloom filter 的Java 版
2012-07-26 21:50 889属于转贴:http://www.cnblo ... -
人生吐槽
2012-07-18 15:36 678自从09年毕业到现在正好三年, -
Handlersocket的安装
2012-05-25 21:13 856一、下载mysql,我选择的是mysql-5.5.15源码安装 ... -
linux2.6内核epoll用法举例说明
2012-05-24 19:41 996epoll用到的所有函数都是在头文件sys/epoll.h中 ...
相关推荐
Kyoto Tycoon是的服务器组件, 是开发的快速,高效的键值存储。 记录可以使用哈希表或B +树存储在磁盘或内存中。 正在安装 建议通过安装: npm install kyoto-client 当然,您还需要一个正在运行的Kyoto Tycoon...
### Kyoto Tycoon命令行实用程序详解 #### 一、引言 Kyoto Tycoon是一款高性能、高可用性的键值数据库管理系统,适用于各种大规模数据存储需求。其强大的功能和灵活的配置选项使其成为许多大型项目中的首选数据库...
kyotocabinet-python Windows安装包 (for Python 3.8, 64bit)
《Kyoto Cabinet源码实践(Java版)》 Kyoto Cabinet是一款轻量级、高性能的键值对存储数据库,尤其适合于本地数据存储。在Java环境中使用Kyoto Cabinet,我们可以通过JDBC驱动或者直接调用其提供的Java API来操作...
《Kyoto Cabinet:一款高效的Key-Value数据库》 Kyoto Cabinet是一款开源的、非关系型的、基于磁盘的Key-Value数据库系统,由日本京都大学的Yukihiko Hara开发。它以其高效性、可靠性以及易于使用而受到广泛的赞誉...
Tokyotyrant是Tokyocabinet的网络服务器版本,允许远程访问Tokyocabinet数据库。按照类似上述步骤下载、解压、配置、编译和安装Tokyotyrant: ``` # 下载并解压Tokyotyrant源代码 tar xvf tokyotyrant-1.1.54....
"KYOTO SONG"是一个可能与字体设计相关的主题,标题简短但暗示了这可能是一款字体的名称,或者是一首与京都文化和艺术有关的歌曲。然而,由于信息有限,我们将主要围绕“字体”这一标签来展开讨论。 字体是计算机...
如果"Join-Kyoto"与此有关,那么它可能是一个工具或框架,用于在Kyoto Cabinet数据库上执行复杂的查询,包括数据联接。 由于我们只有一个主要的文件名"join-kyoto-main",这可能是项目的主文件或入口点,比如在...
计数数据库快速键值存储库(用Java编写),除JSON序列化对象外,该存储库还经过优化以处理原始类型(整数/长整数/双精度数/浮点数)。用例如果您需要从Java程序非常有效地写入和读取数十亿个计数,则想使用count-db...
开源项目-kyoto-shift-keeper.zip,Keeper - A Cryptocurrency tracker (my first attempt at a command-line status tool!)
在PyPI官网上,你可以找到各种功能丰富的库,从数据处理到网络编程,应有尽有。 "kyoto-reader-1.3.3.zip"是PyPI上发布的一个Python库,名为"kyoto-reader",版本号为1.3.3。该库可能专注于某个特定的功能或领域,...
标题“osaka-kyoto.zip”表明这是一个包含与大阪和京都相关的数据的压缩文件,而描述中的同样信息“osaka-kyoto.zip”没有提供额外的细节。标签“CAD图 全球各大洲 主要城市”揭示了压缩包内可能包含的是计算机辅助...
《Kyoto Cabinet:深入探索C++实现的Key-Value数据库》 Kyoto Cabinet,简称KC,是由Fukuhara Kenji开发的一款轻量级、高性能的键值对存储系统。在0.9.56这个版本中,我们有机会深入了解这款用C++编写的数据库引擎...
能够从Java轻松访问kyoto-cabinet很棒,但是缺少我们在现代Java开发环境中期望的某些功能。 lastcommons-kyoto通过将默认绑定包装在大多数Java开发人员应该更熟悉的API中来解决此问题。 依存关系 该包装器使用...
项目文件名为"Kyoto-master",这通常意味着它是项目的主分支,通常用于存放项目的源代码和资源文件。在开源软件开发中,master分支被视为开发的主要分支,包含最新的稳定版本。因此,解压这个"Kyoto-master"压缩包,...
【标题】"kyoto-art-news-rss-mirror:京都艺术新闻RSS镜像源代码解析" 在标题中提到的"kyoto-art-news-rss-mirror"是一个项目,它专注于京都的艺术新闻,通过RSS(Really Simple Syndication)技术进行数据抓取和...
文章中提到的几种典型的NoSQL产品,如Oracle BerkeleyDB、Kyoto Cabinet、Voldemort和Redis等,它们分别代表了NoSQL技术的不同类别和特点。Oracle BerkeleyDB是一个嵌入式的键值存储系统;Kyoto Cabinet是一个轻量级...
Kyoto Cabinet (libkyotocabinet-dev) 存储结构 data |--/bucket |--/image 用法 分块 对输入文件(Segment 和 Chunk)执行分块并输出元数据文件 ./chunking <input file> <output chunking metafi
安装OSTRICH需要安装ZLib,Kyoto Cabinet和CMake(仅编译)。$ npm install跑步运行时,您必须将路径传递到OSTRICH存储。$ npm start data/mystore.ostrich/ Web GUI现在将在。 (可选)可以添加第二个前缀文件参数...
kyoto-art_news4discord 概要 で公开しているのRSSの最新情报をDiscordに配信するものです。一応Discordとは言ってはいますがSlack互换のJsonで记述を行っているのでWebhookなどの设定を変更すればSlackに流すこと...