Tokyo Tyrant(TTServer)介绍和安装 以及配置

2023-11-06 19:50

本文主要是介绍Tokyo Tyrant(TTServer)介绍和安装 以及配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Tokyo Cabinet 是日本人Mikio Hirabayashi 开发的一款DBM 数据库,该数据库读写非常快,哈希模式写入100 万条数据只需0.643 秒,读取100 万条数据只需0.773 秒,是Berkeley DB 等DBM 的几倍。
Tokyo Tyrant 是由同一作者开发的Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP 协议进行数据交换。

Tokyo Tyrant 加上Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached 客户端来讲,可以将Tokyo Tyrant 看成是一个Memcached,但是,它的数据是可以持久存储的。


本文记录在linux上的安装过程:

1) 安装Tokyo Cabinet

在安装Tokyo Tyrant之前,首先需要安装Tokyo Cabinet。

安装过程非常简单,标准流程如下:

gunzip tokyocabinet-1.4.45.tar.gz
tar xvf tokyocabinet-1.4.45.tar 
cd tokyocabinet-1.4.45/
./configuration
make
make install

注意configuration时可能会发现缺少一些依赖包,需要自行安装。

2) 安装Tokyo Tyrant

Tokyo Cabinet安装完成之后继续安装Tokyo Tyrant。安装过程同样简单,依然是标准流程:

tar xvf tokyocabinet-1.4.45.tar 
cd tokyocabinet-1.4.45/
./configuration
make
make install

3) 启动

启动tt最简单的方式,直接输入命令
ttserver

可以看到默认使用1978端口,监听所有地址。

也可以指定端口与进程文件:/home/openpf/app/tokyotyrant-1.1.41/bin/ttserver -port 9032 -pid /home/openpf/app/tokyotyrant-1.1.41/data/tt_account2/tt_9032.pid /home/openpf/app/tokyotyrant-1.1.41/data/tt_account2/tt_account2.tch

对于Tokyo Tyrant的启动, 除了直接ttserver外,还有另外一个办法就是使用Tokyo Tyrant脚本。Tokyo Tyrant脚本默认地址为/usr/local/sbin/ttservctl,提供方便实用的命令如start / stop / restart / hup,最后还是调用ttserver. 

至此,tt server安装完成,可以使用了。

4) 验证

为了验证安装后的tt是否可以使用,我们可以做一些简单的验证。

Tokyo Tyrant的安装包自带了一个检测工具,进入Tokyo Tyrant解压后的目录,执行make check
可以看到有Writing Test / Reading Test / Removing Test / Random Concatenating Test / Miscellaneous Test / Wicked Writing Test / Typical Access Test / Threading Test 等多种测试方式被执行,并打印出测试结果。

5)测试
telnet 127.0.0.1 9032,如果顺利,你可以看到可以连通,键入stats然后回车,可以看到一些类似如下的状态信息。

请注意:在32位操作系统下,Tokyo Cabinet的单个数据库文件不能超过2G,而在64位操作系统下则没有这一限制。所以推荐使用64位操作系统和CPU。



启动参数介绍

ttserver命令可以启动一个数据库实例。因为数据库已经实现了Tokyo Cabinet的抽象API,所以可以在启动的时候指定数据库的配置类型。

支持的数据库类型有:

  1. 内存hash数据库
  2. 内存tree数据库
  3. hash数据库
  4. B+ tree数据库
命令通过下面的格式来使用,‘dbname’制定数据库名,如果省略,则被视作内存hash数据库。
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sidnum] [-mhost name] [-mport num] [-rts path] [-ext path] [-extpc name period] [-mask expr] [dbname] 
下面来说这些参数的功能:
  • -host name :指明服务器的hostname或者ip地址。默认服务器的所有地址都会被绑定。比如:指定127.0.0.1这样的ip,就只是本地可以访问了。
  • -port num : 指定服务启动的端口. 默认1978.如果要启动多个数据库实例,端口需要不一样。
  • -thnum num : 指定服务工作的线程数。默认8.
  • -tout num : 指定每个会话的超时时间。默认永不超时。
  • -dmn : 以守护进程方式运行。
  • -pid path : 输出进程IP到指定的文件。
  • -log path : 输出日志信息到指定文件。
  • -ld : 日志中记录debug信息。
  • -le :日志中只记录错误信息。
  • -ulog path : 指定存放更新日志(update log)的目录.可以用来备份恢复数据库,主从库之间的同步。
  • -ulim num : 指定每个更新日志文件的大小限制.
  • -uas :使用异步IO记录更新日志。(使用此项可以减少写入日志的IO开销,但是在服务器意外关机,进程被kill时可能会丢失数据。根据经验,一般可以不使用)。
  • -sid num : 指定服务的ID号。主从复制的时候通过不同的ID号来识别。
  • -mhost name : 指定主从复制模式下的主服务器的IP或域名。
  • -mport num : 指定主从模式下主服务器的端口号.
  • -rts path : 指定用于主从复制的时间戳存放文件
  • -rcc 检查同步是否正常
  • -ext path : 指定扩展脚本语言文件。
  • -extpc name period : 指定被周期调用的函数名和间隔时间.
  • -mask expr : 指定被禁止的命令名(比如可以禁止使用清空vanish).
  • -unmask expr : 指定被允许的命令名.
  • 数据库类型

  •    下面我们再来看下数据库类型的详细配置。
  1.     数据库名的命名方式被Tokyo Cabinet的抽象API指定。
  2.     如果数据库名为"*",表示内存hash数据库。
  3.     如果数据库名为"+"表示内存tree数据库。
  4.     如果数据库名为".tch",则数据库为hash数据库。
  5.     如果数据库名的后缀为".tcb",数据库将为B+ tree数据库。
  6.     如果数据库名的后缀为".tcf"。则数据库将为fixed-length数据库。
  7.     如果数据库名的后缀为".tct",则数据将为一个table数据库(有表的概念)。
数据库的调整参数通过数据库名的延伸来指定,通过"#"分开,每个参数通过一个参数名和值来指定,用"="隔开。


1、内存hash数据库支持"bnum", "capnum", 和 "capsiz"
2、 内存tree数据库支持"capnum" 和 "capsiz", capnum指定记录的最大容量,capsiz指定最大的内存使用量(在内存数据库中),记录通过存储的顺序移除。
3、hash数据库支持"mode", "bnum", "apow", "fpow", "opts", "rcnum", 和 "xmsiz". 
`rcnum'指定最大的缓存记录数。如果它不大于零,那么缓存记录不可用。默认不可用。
 xmsiz   指定外部内存的大小。如果不大于0,内存不可用。默认是67108864,即64M。
`bnum' 指定bucket存储桶的数量。如果指定的数目不大于0,将会使用默认的数值131071.推荐数量应该在所有需要存储的记录总数的0.4-4倍
`apow' 跟一个key关联的记录数,2的N次方表示.  如果不指定,默认2^4=16.
`fpow' specifies the maximum number of elements of the free block pool by power of 2.  默认2^10=1024.
`opts' 指定选项,位或:`HDBTLARGE' 指定数据库的大小通过使用64位数组桶能够超过2G。
                       `HDBTDEFLATE'  指定每个记录被Deflate encoding压缩。
                      `HDBTBZIP' 指定每个记录被BZIP2 encoding压缩

                       `HDBTTCBS'指定每个记录被 TCBS encoding压缩


4、B+ tree数据库支持"mode", "lmemb", "nmemb", "bnum", "apow", "fpow", "opts", "lcnum", "ncnum", 和 "xmsiz". 

5、Fixed-length 数据库 支持 "mode", "width", and "limsiz". 

6、Table 数据库支持 "mode", "bnum", "apow", "fpow", "opts", "rcnum", "lcnum", "ncnum", "xmsiz", 和 "idx"
      "idx"指定表的索引。
     "mode"可以包含 "w" 写, "r" 读, "c" 创建, "t" 截断,"e" 无锁,和"f" 非阻塞锁。默认的的mod为"wc"。

例如如下启动参数:
./ttserver -port 9032 -pid ~/app/tokyotyrant-1.1.41/data/tt_account2/tt_9032.pid ~/app/tokyotyrant-1.1.41/data/tt_account2/tt_account2.tch



通过Memcache协议使用ttserver

通过telnet 127.0.0.1 9032 telnet连接到到启动的实例。
以下我们通过add增加key为key1和value为value1的数据。
通过get key1获取数据。( <key> <flags> <exptime> <bytes>
add key1 1 0 6
value1
STORED
get key1
VALUE key1 0 6
value1
END
编写php脚本
$mem=new Memcache();
$mem->
connect("127.0.0.1",9032);
$mem->
add("key2","xifeijian");
print_r( $mem->
get("key2"));
echo "<br />";
$mem->
add("key3",array("value3"=>"this is xifeijian"));
echo $mem->
get("key3");
?>
运行后输出:(在服务器上直接执行php脚本,如果在浏览器中访问,效果就更加直观。)


需要注意的问题

序列化问题

   如果你熟悉memcache协议,或者你曾经用php的memcache来使用ttserver,你可能马上就发现了上面的问题。

比如我们key3是一个数组,但是我们取回来的是一个序列化的字符串,没有自动反序列化,在memcached服务器上是会自动反序列化的。

    通过上面的telnet示例我们可以看到,我们add key1的时候设置flag参数为1,但是我们get回来的时候,返回的flag参数是0,实际上,ttserver是没有存储flag参数的,统一的都使用0,这就造成了php使用时不会自动反序列化,当然,如果你使用压缩参数,一样会有这样的问题。

怎么样解决这个问题,如果要修改ttserver的代码实为不方便。我们完全可以在php,或者我们的客户端来控制。
比如value我们统一的都序列化后存储,取出来的时候我们再反序列化。

自增问题

//使用ttserver自增
$mem=new Memcache();
$mem->
connect("127.0.0.1",9032);
var_dump($mem->
increment("incr"));
//结果为int(1)
?>

 

//使用memcache自增
$mem=new Memcache();
$mem->
connect("127.0.0.1",9023);
var_dump($mem->
increment("incr"));
//结果为bool(false)
?>
我们看到同样的代码用在memcache返回了失败(false)。我们可以在php手册上看到这样一句话“ Memcache::increment()  does not create an item if it didn't exist.”但是同样的,用在ttserver上就是成功的。这一点要特别注意。


参考:http://blog.csdn.net/xifeijian/article/details/37744131

这篇关于Tokyo Tyrant(TTServer)介绍和安装 以及配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/358703

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window