TTServer是什么?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:  TTServer Tokyo Cabinet是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。
 
TTServer
Tokyo Cabinet 是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。

Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。

TTServer的安装以及配置:(Linux:CentOS 5.2版本)
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


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


注:如果安装Tokyo Cabinet时指定了目录,在安装Tokyo Tyrant时用 --with-tc 指定Tokyo Cabinet的目录,如果没指定会报:configure: error: tcutil.h is required 错误。

3、创建tokyotyrant数据文件存放目录
mkdir /var/db/ttserver/

4、启动tokyotyrant的主进程(ttserver)
[root@localhost /]# whereis ttserver -> /usr/local/bin/ttserver
[root@localhost /]# cd /usr/local/sbin
[root@localhost bin]# ttserver -host 127.0.0.1 -port 1978 -thnum 8 -dmn -pid /var/db/ttserver/ttserver.pid -log /var/db/ttserver/ttserver.log -le -ulog /var/db/ttserver/ -ulim 128m
[root@localhost bin]# ps uax |grep ttserver //查找运行的进程

5、参数说明
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万条记录缓存在内存中:

[root@localhost ttserver]# ttserver -host 127.0.0.1 -port 1978 -thnum 8 -dmn -pid /var/db/ttserver/ttserver.pid -log /var/db/ttserver/ttserver.log -le -ulog /var/db/ttserver/ -ulim 128m
-sid 1 -rts /var/db/ttserver/ttserver.rts /var/db/ttserver/database.tch#bnum=1000000


应用:
1、任何Memcached客户端均可直接调用tokyotyrant。
2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:
(1)、写数据,将数据“value”写入到“key”中:curl -X PUT http://127.0.0.1:1978/key -d "value"
(2)、读数据,读取“key”中数据:curl http://127.0.0.1:1978/key
(3)、删数据,删除“key”:curl -X DELETE http://127.0.0.1:1978/key
3. PHP 的 API 接口程序以及 DEMO 详见:http://openpear.org/repository/Net_TokyoTyrant/

注:在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位CPU、操作系统上安装运行。在编译Tokyo cabinet的时候,使用如下编译选项就可以突破2G限制:--enable-off64


项目中运用的实例:统计论坛中帖子的点击数量

define('TT_PATH', substr(dirname(__FILE__), 0, -7));
require_once(TT_PATH.'/bbs/TokyoTyrant.php');

$ttObject = new Net_TokyoTyrant();

$memObject = new Memcache();
//连接TT
$memObject->connect('192.168.1.111',1979);

//写入点击数 以 fid_$fid 为 Key 保存对应的域名值
function hitsSet($fid, $num)
{
global $memObject;
$hitskey = "fid_".$fid; //key
$res = $memObject->get($hitskey );
if(empty($res)) {
$memObject->set($hitskey ,$num); //设置 fid_id=>num
} else {
$memObject->replace($hitskey , $num); //重置替换
}
$memObject->close(); //一定要记得关闭,否则 TIME_OUT 进程会越来越多
}

//获取点击数
function hitsGet($fid)
{
global $memObject;
$groupkey = "fid_".$fid; //key
$res = $memObject->get($fid); //获取value
$num = empty($res) ? '0' : $res;
return $num;
$memObject->close();
}

?>

注:序列化问题
在实际应用中更常用 memcache 协议使用ttserver,当我们从中取数据时,会是一个序列化的字符串,没有自动反序列化处理,但在memcached服务器上却是自动反序列化的哦。这样我们先将数据取出,如:
a:1:{s:5:"value";s:14:"this is a value";} ,再利用 unserialize() 函数反序列化就可以使用了。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
Java
filebeat占用文件句柄磁盘满
filebeat作为日志采集客户端,相比较于java编写的fluent,有着低功耗的特性。但在一些极端情况下,忽视filebeat的一些特性配置,可能会带来灾难。之前发过一篇关于filebeat内存占用的案例和分析,今天再说下filebeat占用文件句柄、耗费主机磁盘甚至导致磁盘满的案例。
9449 0
|
算法 Python
LightGBM高级教程:自动调参与超参数优化
LightGBM高级教程:自动调参与超参数优化【2月更文挑战第5天】
1554 2
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
117501 0
|
7月前
|
资源调度 前端开发 算法
鸿蒙OS架构设计探秘:从分层设计到多端部署
本文深入探讨了鸿蒙OS的架构设计,从独特的“1+8+N”分层架构到模块化设计,再到智慧分发和多端部署能力。分层架构让系统更灵活,模块化设计通过Ability机制实现跨设备一致性,智慧分发优化资源调度,多端部署提升开发效率。作者结合实际代码示例,分享了开发中的实践经验,并指出生态建设是未来的关键挑战。作为国产操作系统的代表,鸿蒙的发展值得每一位开发者关注与支持。
|
搜索推荐 大数据 数据安全/隐私保护
大数据的应用领域
【4月更文挑战第10天】大数据已深入金融(风险评估、欺诈检测)、医疗(精准医疗、疾病预测)、公共服务(交通管理、灾害预测)、电子商务(客户分析、个性化推荐)、制造业(生产控制、优化)及农业(资源配置、生产效率)等多个领域。随着技术进步,应用范围将持续扩展,但需关注隐私保护和数据安全。
616 3
|
12月前
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
1511 4
|
运维 安全 数据建模
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考
免费SSL证书是阿里云为个人网站、开发测试或企业网站建设之初提供的SSL证书,以便满足其对HTTPS数据加密传输的基本要求,从而提高数据传输的安全性。本文为大家详细介绍阿里云免费SSL证书与付费SSL证书区别以及免费SSL证书申请教程。
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考
|
12月前
|
算法 Linux 调度
深入理解操作系统:进程管理与调度策略
在数字世界的心脏跳动着的,是那些不眠不休的操作系统。它们如同宇宙中的星系,以精妙的进程管理和调度策略维系着计算秩序的和谐。本文将带您穿梭于操作系统的微观世界,探索进程生命周期的每一个阶段,以及如何通过调度算法确保系统的高效与公平。正如甘地所言:“你必须成为你希望在世界上看到的改变。”在操作系统的世界中,这句话激励我们深入理解并改进这些复杂的系统。
|
XML 安全 API
API攻防-接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
API攻防-接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
247 5