Tokyo Cabinet和Tokyo Tyrant简介
今天要介绍的Nosql产品是Tokyo Cabinet和Tokyo Tyrant,Tokyo Cabinet是一个性能优秀的数据存储引擎,而Tokyo Tyrant则提供了访问Tokyo Cabinet数据的网络接口。这是一个很成熟的产品,在国内外也有众多的成功案例。
Tokyo Cabinet(简称TC)和Tokyo Tyrant(简称TT),顾名思义,是源自日本的开源项目。由FAL Labs维护,主要的开发人员是Mikio Hirabayashi。最早应用在日本最大的SNS网站mixi.jp上成功后而声名鹊起。
Tokyo Cabinet简介
Tokyo Cabinet: super hyper ultra database manager
http://fallabs.com/tokyocabinet/
Tokyo Cabinet 是日本人平林�雄开发的一款 DBM 数据库。Tokyo Cabinet是一个用C写的数据存储引擎,以key-value的方式存储数据,支持Hash、B+ tree、Hash Table等多种数据结构。同时提供了C、 Perl、 Ruby、Java和Lua等多种语言的API支持,但是如果通过网络来访问,就需要用TT。
Tokyo Cabinet因为支持灵活的数据结构而倍受欢迎,特别是Hash Table类型,很像传统的关系型数据库,只是每条存储记录的列是自由定义的,可以通过列作为条件来查询,十分方便。这是很多key-value结构的Nosql产品所不具备的特性。当然,Hash Table类型和Hash、B+ tree相比存取效率会低一些,任何事物都是有两面性的,在带来高度灵活度的同时,必然要牺牲部分的效率。
Tokyo Cabinet数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。
Tokyo Tyrant简介
Tokyo Tyrant: network interface of Tokyo Cabinet
http://fallabs.com/tokyotyrant/
Tokyo Tyrant: 是为TC写的网络接口,他支持memcache协议,也可以通过HTTP操作,以下称TT。
Tokyo Tyrant同样是用C写的,支持从网络端高并发、多线程的访问TC。另外TC/TT支持master/slave架构,可以通过配置实现高可用性,这也是很不错的一个特性。
Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的memcachedb性质一样。
Tokyo Tyrant和memcachedb的优势比较
相比memcachedb而言,Tokyo Tyrant具有以下优势:
故障转移
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/
Ifahostgoesdown,theAPIre-mapsthatdeadhost'srequestsontotheserversthatareavailable.
http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failovermayoccuratanystageinanyofthemethods,aslongasotherserversareavailabletherequesttheuserwon'tnotice.AnykindofsocketorMemcachedserverlevelerrors(exceptout-of-memory)maytriggerthefailover.NormalclienterroRSSuchasaddinganexistingkeywillnottriggerafailover.
日志文件体积小
Tokyo Tyrant用于主辅同步的日志文件比较小,大约是数据库文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易将磁盘写满。
超大数据量下表现出色
但是,Tokyo Tyrant 也有缺点: 在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G ,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位cpu、操作系统上安装运行。
后续
TC/TT是一个久经考验的很稳定的产品,在千万及以下数据量级别表现出色。但是开发者由于种种原因,已经很长时间没有更新版本了,而是推出了对应升级产品,叫做Kyoto Cabinet和Kyoto Tycoon,这也给TC/TT的前景带来了不明朗的因素,很明显作者是鼓励人们使用升级的产品,但是由于新产品没有更多的成功案例,在业界的影响力反而不如TC/TT,因此在现阶段,TC/TT仍然是一个不错的Nosql选择。
Kyoto Cabinet: a straightforward implementation of DBM
http://fallabs.com/kyotocabinet/
Kyoto Tycoon: a handy cache/storage server