[ 2008-8-7 08:53 | by 张宴 ]
[文章作者:张宴 本文版本:v1.3 最后修改:2009.07.06 转载请注明原文链接:http://blog.s135.com/read.php/362/]
红色为hbing110补充
Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。
官网:http://1978th.net/tokyocabinet/
--------------------------------------------------------------------------------
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。
Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的Memcachedb性质一样。
相比Memcachedb而言,Tokyo Tyrant具有以下优势:
1、故障转移:Tokyo Tyrant支持双机互为主辅模式,主辅库均可读写,而Memcachedb目前支持类似MySQL主辅库同步的方式实现读写分离,支持“主服务器可读写、辅助服务器只读”模式。
这里使用 $memcache->addServer 而不是 $memcache->connect 去连接 Tokyo Tyrant 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。
引用 memcached 官方网站和 PHP 手册中的两段话:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.
http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.
--------------------------------------------------------------------------------
2、日志文件体积小:Tokyo Tyrant用于主辅同步的日志文件比较小,大约是数据库文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易将磁盘写满。
--------------------------------------------------------------------------------
3、超大数据量下表现出色:
但是,Tokyo Tyrant 也有缺点:在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位CPU、操作系统上安装运行。
--------------------------------------------------------------------------------
一、安装
1、首先编译安装tokyocabinet数据库
wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.28.tar.gz
tar zxvf tokyocabinet-1.4.28.tar.gz
cd tokyocabinet-1.4.28/
./configure
make
make install
root
cd ../
2、然后编译安装tokyotyrant
wget http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.29.tar.gz
tar zxvf tokyotyrant-1.1.29.tar.gz
cd tokyotyrant-1.1.29/
./configure
make
make install
root
cd ../
--------------------------------------------------------------------------------
二、配置
1、创建tokyotyrant数据文件存放目录
mkdir -p /ttserver/
2、启动tokyotyrant的主进程(ttserver)
(1)、单机模式
root用户去执行,之前做了很多次一直不成功,也没有报错,后来才发现只有root权限的执行才有用。
ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch
(2)、双机互为主辅模式
服务器192.168.1.91:
ulimit -SHn 51200
ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch
服务器192.168.1.92:
ulimit -SHn 51200
ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch
(3)、参数说明
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname]
-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程。
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中:
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000
如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:
ulimit -SHn 51200
3、停止tokyotyrant(ttserver)
ps -ef | grep ttserver
找到ttserver的进程号并kill,例如:
kill -TERM 2159
安装完成后还须配置环境:
到/etc下, 修改profile文件,在最后一行加上export LD_LIBRARY_PATH=$LD_LIBRARY_PATH;/usr/local/lib, 其中
/usr/local/lib就是安装时lib存放的位置.
验证配置完成, 重新登陆,执行echo $LD_LIBRARY_PATH,返回:/usr/local/lib,证明已经成功。
--------------------------------------------------------------------------------
三、调用
1、任何Memcached客户端均可直接调用tokyotyrant。
2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:
(1)、写数据,将数据“value”写入到“key”中:
curl -X PUT http://127.0.0.1:11211/key -d "value"
(2)、读数据,读取“key”中数据:
curl http://127.0.0.1:11211/key
(3)、删数据,删除“key”:
curl -X DELETE http://127.0.0.1:11211/key
再补充一点: Tokyo Tyrant 和Tokyo Cabinet 安装完成以后可以先执行ttserver,然后再开一个窗口,切换到Tokyo Tyrant目录下,运行 make check,这时就可以看到 前一窗口打印出的测试记录。
--------------------------------------------------------------------------------
附:文章修改历史
● [2008年08月07日] [Version 1.0] 撰写本文
● [2008年10月16日] [Version 1.1] Tokyo Cabinet 版本升级到 1.3.12;Tokyo Tyrant 版本升级到 1.1.5
● [2008年12月04日] [Version 1.2] Tokyo Cabinet 版本升级到 1.3.22;Tokyo Tyrant 版本升级到 1.1.8
● [2008年07月06日] [Version 1.3] Tokyo Cabinet 版本升级到 1.4.28;Tokyo Tyrant 版本升级到 1.1.29
文章来源:
http://blog.s135.com/post/362/
分享到:
相关推荐
在10000线程的压力测试下,Tokyo Tyrant的写入性能优于Memcached和MySQL。 值得注意的是,虽然Tokyo Cabinet和Tokyo Tyrant在特定场景下表现出色,但它们对内存的需求较高,适合那些对内存资源充足且追求高性能读写...
**东京内阁(Tokyo Cabinet)**是一款高效的开源数据库库,它源于QDBM并在此基础上进行了优化和提升。作为QDBM的升级版本,东京内阁在性能方面有着显著的改进,尤其在处理大量数据时,其速度表现更加出色,无需依赖...
这个`test.sh`脚本可能包含了一系列操作Tokyo Cabinet的命令行示例,用于测试、调试或演示Tokyo Cabinet的功能。 综合以上信息,我们可以期待这篇文章包含了以下内容: 1. **Tokyo Cabinet简介**:解释Tokyo ...
从这份文档中,我们可以深入理解Tokyo Tyrant及其关联的Tokyo Cabinet数据库的多个方面,包括其安装、使用、原理以及与其他数据库系统的性能比较。下面将详细解析这些关键知识点。 ### 1. Tokyo Tyrant与Tokyo ...
3. 最后,解压httpsqs-1.7.tar.gz,配置环境变量,例如设置`TOKYOCABINET_DIR`指向Tokyo Cabinet的安装位置,然后执行`./configure`,`make`,`make install`,完成HTTPSQS的安装。 在安装完成后,需要根据提供的...
在这个测试中,作者可能使用了 `spymemcached` 这个Java库来与Tokyo Cabinet这个键值存储系统进行交互。Tokyo Cabinet是一个流行的数据存储系统,适用于快速、大量数据的存取。而 `spymemcached` 是一个基于...
哪吒(Nezha)是中国神话故事里的少年战神,我们以其作为基础Tokyo Cabinet的简单分布式KV存储系统原型项目的代号。 它包含configdb lib(configdb.h / libconfigdb.so)和一个命令行测试程序(Nezha) 执行make ...
在 "tokyotyrant-1.1.24" 这个压缩包中,我们预期会找到 Tokyo Tyrant 的源代码、文档、示例程序和测试用例。Tokyo Tyrant 提供了丰富的API,使得开发人员可以轻松地在各种编程语言(如C、Python、Ruby等)中与之...
安装 Ruby 和 Tokyo Cabinet 如何构建演示项目 基本原理 特征 如何构建你的项目 建筑学 限制 什物 安装 Ruby 和 Tokyo Cabinet Brubuild需要 Ruby 1.9.X 或更高版本,它本身有几个先决条件: zlib 、 bzip2 、 ffi...
它基于Tokyo Cabinet键值存储技术,并利用FUSE(Filesystem in Userspace)允许用户在Linux环境下实现自定义文件系统。本文将详细介绍如何安装和使用 `lessfs` 文件系统。 #### 二、所需软件源码包 安装 `lessfs` ...
Tokyo cabinet / Tyrant CT.M Scalien Berkley DB MemcacheDB Mnesia LightCloud HamsterDB Flare 最终一致性Key Value存储 Amazon之Dynamo 功能特色 架构特色 BeansDB 简介 更新 特性 性能 Nuclear 两个设计上的T ...
本文将基于《5款主流NoSQL数据库全方位横评》文档中的评测结果,对五款主流NoSQL数据库——HandlerSocket、Tokyo Cabinet(TTServer)、MongoDB、Redis和HBase进行全面的分析。 #### 二、测试环境与方法 - **测试...
键值对:Memcached、Tokyo Cabinet;列式存储:HBase、Bigtable;文档型:MongoDB、CouchDB;图形数据库:Neo4j、JanusGraph。 七、SQL数据库 7.1 题目要求在MySQL中创建表格,这属于关系型数据库的基本操作。具体...
在标签和部分内容中提到了一些NoSQL数据库的实例,包括Redis、Tokyo Cabinet、Cassandra、Voldemort、MongoDB、Dynomite等,这些都是开放源码的NoSQL数据库。这些数据库各有特点,例如: - Redis:一个开源的使用...
- **Tokyo Cabinet (TC) 和 Tokyo Tyrant (TT)** - **本质**: - TC:高性能的存储引擎,无网络接口。 - TT:TC的网络接口,支持memcached协议和HTTP操作。 - **特点**: - 成熟度高,被广泛应用。 - 支持大量...
1. **键值(Key-Value)存储数据库**:这类数据库通过键值对的形式存储数据,例如Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。它们适用于内容缓存等需要处理大量数据的高访问负载场景。优点在于能够实现...
例如,BerkeleyDB、Tokyo Cabinet 和 Innostore 等系统在某些方面表现良好,但在其他方面则不尽如人意。这些系统的局限性激发了Riak团队寻找更好的解决方案。 #### 关键洞见 在讨论这个问题时,Eric Brewer 提出了...
Tokyo cabinet / Tyrant是指使用Tokyo cabinet / Tyrant来实现键值存储。 CT.M是指使用CT.M来实现键值存储。 Scalien是指使用Scalien来实现键值存储。 Berkley DB是指使用Berkley DB来实现键值存储。 MemcacheDB...
TokyoTyrant是一款高效、轻量级的键值存储系统,由日本的Ryo Sagawa开发,它是Tokyo Cabinet的网络接口。TokyoTyrant支持多种协议,包括HTTP和TCP,使得它能被各种编程语言的客户端访问。在这个场景中,我们关注的是...