日期:2014-05-16  浏览次数:20455 次

Tokyo Tyrant使用小结

Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍, 反正是相当的快。

?

而Tokyo Tyrant(翻译成中文是:东京暴君)则是在Tokyo Cabinet上封装了网络应用接口,用于提供网络服务等一系列功能, 支持memcached协议和http协议 。因此我们可以方便地使用memcached java客户端直接访问,唯一需要注意的是,tt是持久化的,并且value只支持String类型。

?

接触TT还不到一年,之前使用的是memcachedb,memcachedb在高并发写入和读取的时候性能并不太理想,于是尝试了下TT。在同等硬件条件下,tt性能比memcachedb提升还是非常明显的 , 千万级的数据量下面达到了读写4k+/s。

?

一些优化总结:

1. 硬盘读写速度要快,我们采用的是SAS硬盘,15000转的。

2. 通过bnum和xmsiz参数来把硬盘数据缓存或映射到内存加快IO,rcnum来指定缓存最近访问的记录数。条件允许的话,xmsiz的值大于数据库文件大小。

3. 相应地,内存要够大。

4. 每天做完全备份, 通过tt提供的工具。

?

tt的应用场景:

1. 存储版本信息,存储实时浏览次数等小颗粒实时动态数据

2. 作为持久化缓存,用于减轻关系型数据库负载。

?

tt的集群方式:

1. 参考memcached集群方式,由客户端实现集群。

2. 采用主从模式的集群方式,1台master,多台slave,方便水平扩展。

?

每种方式都有优点和缺点,主从模式受限于master的承受能力,只能扩展读,写就不能无限扩展。

客户端集群方式伸缩性不好,加减机器都比较难,一旦某一台服务down了,会导致局部数据失效 ,因此可能需要针对每一各节点做热备(互为主从方式)。

技术上没有十全十美的方案,最简单的才是最合适,如何选择就看实际应用场景了。

?

?

?

1 楼 oolala 2010-11-20  
作为持久化缓存,用于减轻关系型数据库负载。

怎么给关系型数据库作负载呢,是写到tt上面再写到关系型 数据库里面吗?
复杂…………
2 楼 waterdh 2011-01-04  
oolala 写道
作为持久化缓存,用于减轻关系型数据库负载。

怎么给关系型数据库作负载呢,是写到tt上面再写到关系型 数据库里面吗?
复杂…………

看业务需求,可以同时持久化缓存放一份,数据库放一份。
也可以只放在持久化缓存中, 比如评论总数、最后登录时间等写入更新要求比较频繁的。