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() 函数反序列化就可以使用了。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
数据采集 存储 自然语言处理
python爬虫分类和robots协议 | python爬虫实战之一
本节介绍了爬虫的由来,爬虫的基本流程,以及爬虫如何来获得一个新的URL,还对robot协议作出一些简单地介绍。
python爬虫分类和robots协议 | python爬虫实战之一
|
5月前
|
缓存 监控 网络协议
掌控全局:Linux 系统性能调优技巧全面指南
掌控全局:Linux 系统性能调优技巧全面指南
|
6月前
|
运维 安全 数据建模
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考
免费SSL证书是阿里云为个人网站、开发测试或企业网站建设之初提供的SSL证书,以便满足其对HTTPS数据加密传输的基本要求,从而提高数据传输的安全性。本文为大家详细介绍阿里云免费SSL证书与付费SSL证书区别以及免费SSL证书申请教程。
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考
|
8月前
|
关系型数据库 MySQL 数据库连接
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
2854 52
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
|
3月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
6月前
|
运维 关系型数据库 网络安全
宝塔面板忘记了登录用户名密码怎么办?
当忘记宝塔面板的用户名或密码,可通过以下方法解决: 1. 登录后台修改:访问面板设置->面板用户,输入新用户名和密码。 2. 使用SSH连接服务器,输入`bt`命令选择相应选项(5修改密码,6修改用户名)。 3. Windows用户可在CMD输入`bt`同样操作。
684 0
 宝塔面板忘记了登录用户名密码怎么办?
|
7月前
|
存储 运维 搜索推荐
云计算平台在在线教育领域的应用探索
云计算平台在在线教育领域的应用探索
152 0
|
8月前
|
机器学习/深度学习 算法 TensorFlow
基于 Python中的深度学习:神经网络与卷积神经网络
基于 Python中的深度学习:神经网络与卷积神经网络
|
8月前
|
存储 安全 API
oss客户端密钥管理数据密钥生成与使用
阿里云OSS中的客户端密钥管理涉及AccessKey ID和Secret的安全使用。数据加密可选SSE-OSS或使用KMS管理的CMK。若用KMS,KMS自动生成和管理数据密钥;否则,用户需安全生成密钥。上传下载时,通过SDK或API指定加密选项。密钥存储避免明文,利用KMS进行生命周期管理和访问控制,提升数据安全,满足合规需求。
1013 1