主流NoSQL数据库评测之Tokyo Cabinet

本篇要评测的NoSQL产品是Tokyo Cabinet和Tokyo Tyrant,Tokyo Cabinet是一个性能优秀的数据存储引擎,而Tokyo Tyrant则提供了访问Tokyo Cabinet数据的网络接口。这是一个很成熟的产品,在国内外也有众多的成功案例。

一、Tokyo Cabinet和Tokyo Tyrant简介

Tokyo Cabinet(简称TC)和Tokyo Tyrant(简称TT),顾名思义,是源自日本的开源项目。由FAL Labs维护,主要的开发人员是Mikio Hirabayashi。最早应用在日本最大的SNS网站mixi.jp上成功后而声名鹊起。

TC是一个用C写的数据存储引擎,以key-value的方式存储数据,支持Hash、B+ tree、Hash Table等多种数据结构。同时提供了C、 Perl、 Ruby、Java和Lua等多种语言的API支持,但是如果通过网络来访问,就需要用TT。TT同样是用C写的,支持从网络端高并发、多线程的访问TC。另外TC/TT支持master/slave架构,可以通过配置实现高可用性,这也是很不错的一个特性。

TC因为支持灵活的数据结构而倍受欢迎,特别是Hash Table类型,很像传统的关系型数据库,只是每条存储记录的列是自由定义的,可以通过列作为条件来查询,十分方便。这是很多key-value结构的NoSQL产品所不具备的特性。当然,Hash Table类型和Hash、B+ tree相比存取效率会低一些,任何事物都是有两面性的,在带来高度灵活度的同时,必然要牺牲部分的效率。

TC/TT是一个久经考验的很稳定的产品,在千万及以下数据量级别表现出色。但是开发者由于种种原因,已经很长时间没有更新版本了,而是推出了对应升级产品,叫做Kyoto Cabinet和Kyoto Tycoon,这也给TC/TT的前景带来了不明朗的因素,很明显作者是鼓励人们使用升级的产品,但是由于新产品没有更多的成功案例,在业界的影响力反而不如TC/TT,因此在现阶段,TC/TT仍然是一个不错的NoSQL选择。

二、测试说明

1、测试环境

TC/TT部署在一台PC 服务器上,配置如下:

CPU为Xeon 2.80GHz *4

内存为4G

硬盘为一块400G SATA盘

操作系统为64位CentOS 5.3版本

2、测试方法

这里仍然采用第三方实现的PHP客户端进行测试,网址为http://pecl.php.net/package/tokyo_tyrant,这是一个标准的PHP扩展程序,可以编译到PHP运行环境中。要说明的是,这个PHP客户端实现的是TT接口,肯定比使TT自带的tcrtest效率要低一些,但是我们的测试要尽量模拟实际的生产环境,所以这里使用了第三方的PHP客户端。

为了不对测试服务器产生额外的影响,测试客户端部署在另外一台独立的服务器上,运行的PHP的版本是5.3.5,web server是Nginx 0.8.54,通过fastcgi的方式调用PHP服务。使用apache ab工具实现多个请求和并发操作。

为了更全面的反应TC/TT的性能,我对B+ tree和Hash Table两种数据库类型分别进行了测试,就使用上文提到的ttserver示例语句来建立测试数据库,每个类型的测试又分为两个步骤,首先是写操作,通过500个请求,每个请求写入10000条记录,并发度为2来共写入500万条数据,数据的key为数字1到5000000,value大小为100个字节。然后是读操作,也是用500个请求,每个请求随机根据key值读出10000条记录,并发度为10共读出500万条记录,评测的重点是写入和读出数据的时间,以及在此过程中服务器的资源使用情况。

三、安装和使用

1、下载相关软件的最新版本(TC、TT和TC的lua扩展):

  1. [root@localhost tctt]# wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz  
  2. [root@localhost tctt]# wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz  
  3. [root@localhost tctt]# wget http://fallabs.com/tokyocabinet/luapkg/tokyocabinet-lua-1.9.tar.gz 

注意这里的lua扩展是可选的,如果不需要使用lua接口,可以不必安装。

2、安装lua脚本,注意这里不能通过yum的方式安装,否则后面装tt时会提示找不到lua.h文件: 

  1. wget http://www.lua.org/ftp/lua-5.1.4.tar.gz  
  2. make linux  
  3. make install 

安装过程中一般会报错如下:

  1. luaconf.h:275:31: error: readline/readline.h: No such file or directory  
  2. luaconf.h:276:30: error: readline/history.h: No such file or directory 

通过yum安装readline-devel即可:

  1. yum install readline-devel 

3、安装TC、TT和TC的lua扩展,注意的是如果要使用LUA接口,那么编译TT的时候要加–enable-lua参数:

  1. [root@localhost tctt]# tar zxvf tokyocabinet-1.4.47.tar.gz  
  2. [root@localhost tctt]# cd tokyocabinet-1.4.47  
  3. [root@localhost tokyocabinet-1.4.47]# ./configure  
  4. [root@localhost tokyocabinet-1.4.47]# make  
  5. [root@localhost tokyocabinet-1.4.47]# make install  
  6. [root@localhost tctt]# tar zxvf tokyocabinet-lua-1.9.tar.gz  
  7. [root@localhost tokyocabinet-lua-1.9]# make  
  8. [root@localhost tokyocabinet-lua-1.9]# make install  
  9. [root@localhost tctt]# tar zxvf tokyotyrant-1.1.41.tar.gz  
  10. [root@localhost tctt]# cd tokyotyrant-1.1.41  
  11. [root@localhost tokyotyrant-1.1.41]# ./configure --enable-lua  
  12. [root@localhost tokyotyrant-1.1.41]# make  
  13. [root@localhost tokyotyrant-1.1.41]# make install 

至此就安装完成了,整个过程很简单,当然安装过程可能需要一些其他的程序包,可以根据提示进行安装即可。

TT提供了很多命令行工具来管理数据库,比较常用的两个是ttserver和tcrmgr。

Ttserver的用法如下:

  1. ttserver [-host name] [-port num] [-thnum num] [-tout num]
  2.  [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] 
  3. [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] 
  4. [-rts path] [-rcc] [-skel name] [-mul num] [-ext path]
  5.  [-extpc name period] [-mask expr] [-unmask expr] [dbname] 

各个参数的说明可查看官方文档,这里就不一一列举了。我们可以建立一个hash table类型和一个B+ tree类型的数据库:

  1. ttserver -host 192.168.0.35 -port 11301 -thnum 8 -dmn   
  2. -pid /home/tc/test_data/test_data_b.pid   
  3. -log /home/tc/test_data/test_data_b.log -le   
  4. -ulog /home/tc/test_data/ -ulim 128m -sid 1 -rts /home/tc/test_data/test_data_b.rts /home/tc/test_data/test_data.tcb  
  5.  
  6. ttserver -host 192.168.0.35 -port 11302 -thnum 8 -dmn   
  7. -pid /home/tc/test_data/test_data_t.pid   
  8. -log /home/tc/test_data/test_data_t.log -le   
  9. -ulog /home/tc/test_data/ -ulim 128m -sid 1 -rts /home/tc/test_data/test_data_t.rts /home/tc/test_data/test_data.tct  
  10.  

注意最后一个参数的扩展名tcb和tct决定了数据库的类型分别是B+ tree和table。

通过tcrmgr命令行工具可以管理远程数据库,比如我们要查看key为1的记录可以这样操作:

  1. [root@localhost tc]# tcrmgr get -port 11301 192.168.0.35 1 

要了解更详细的信息,读者可以参看官方文档。

#p#

四、测试结果

1、B+tree类型写操作

成功写入500万条记录,共耗时739秒,平均每秒写入数据6766笔。数据文件大小137M。写入过程中,服务器内存、CPU和磁盘等资源使用情况如下图所示:

 

 

 

可见,CPU使用率平稳,Idle值稳定在73到83之间,wait值稳定在7到12之间。内存分配上的变化较大,主要用来缓存数据,cache部分上升了1.1G,但是没有交换区到内存的换入换出。磁盘IO表现有周期性的上下波动,估计和TC的实现机制有关,数据先写入内存缓冲区,然后定期的刷新到磁盘。

2、B+tree类型读操作

成功读出500万条记录,共耗时1171秒,平均每秒读出数据4270笔。

读数据过程中没有发生磁盘IO。CPU较繁忙,Idle值稳定在38左右,等待CPU资源的进程一直在1到6个之间。内存表现平稳没有波动。

 

3、Hash Table类型写操作

成功写入445万条记录,写入失败55万条记录,共耗时1560秒,平均每秒写入数据2853笔。数据文件大小538M。写入过程中,服务器内存、CPU和磁盘等资源使用情况如下图所示:

 

 

CPU使用率较平稳,Idle值稳定在60到80之间,wait值最高在50左右,稳定在20到40之间。内存cache部分上升了0.7G用于缓存数据。磁盘IO表现有呈阶梯状的上升,最后达到100%,导致无法成功写入数据。

4、Hash Table类型读操作

成功读出500万条记录,共耗时175秒,平均每秒读出数据28571笔。

读数据过程中没有发生磁盘IO。CPU较繁忙,Idle值稳定在37到41之间,等待CPU资源的进程一直在1到9个之间。内存表现平稳没有波动。

 

五、总结

通过以上测试结果可以说明,TC/TT写入的数据的时候,先缓冲到内存中,然后通过一定的机制写入磁盘,这也是写的效率较高的原因,但是由此带来了周期性的磁盘繁忙,也可能有丢失数据的风险。写入的数据完全缓存到了文件系统中,所以cache部分占用的内存大量增加,这也是读取数据的时候没有发生磁盘IO的原因。B+ tree类型写入性能十分优异,令人惊讶的是读出的速度反而慢于写入的速度。Hash Table类型写入性能一般,但读取性能良好。总体上来说TC/TT在非海量数据的情况下表现不错,服务器资源占用稳定,读写效率较高。

【编辑推荐】

  1. Mongodb源码分析之Mongos分析
  2. Mongodb源码分析–内存文件映射(MMAP)
  3. 走进MongoDB的世界 展开MongoDB的学习之旅
  4. 浅析Mongodb源码之游标Cursor
  5. 野心勃勃的NoSQL新贵 MongoDB应用实战

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/228822.html<

(0)
运维的头像运维
上一篇2025-04-18 11:49
下一篇 2025-04-18 11:50

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注