简介
ttserver是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒
利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
安装
https://blog.csdn.net/pwlazy/article/details/5313405— 此文是安装 有lua
安装软件在硬盘的ttserver中
安装存储引擎tokyo cabinet
https://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
tar -zxvf tokyocabinet-1.4.48.tar.gz
cd tokyocabinet-1.4.48
./configure --prefix=/usr/local/src/tokyocabinet
make
make install
安装 toyko tyrant
wget https://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
./configure --prefix=/usr/local/src/tokyotyrant --with-tc=/usr/local/src/tokyocabinet
make
make install
安装 php 拓展(memcached)
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
mkdir /usr/local/libmemcached
tar xf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached --with-memcached
make && make install
如果报错:./libtool: line 1125: g++: command not found
解决方法:yum -y install gcc-c++
wget http://pecl.php.net/get/memcached-2.2.0.tgz
tar xf memcached-2.2.0.tgz cd memcached-2.2.0
/usr/local/php/bin/phpize (生成configure文件) 如果你是yum安装的php,phpize程序在php-devel开发包中,yum -y
install php-devel
./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached –
enable-memcached
如果yum安装的php报错:checking for zlib location… configure: error: memcached support requires ZLIB.
解决方法:yum -y install zlib-devel
继续报错:configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this
check
解决方法:在配置选项中加入–disable-memcached-sasl这功能比较诡异而且没用,禁用它
make && make install
echo “extension=memcached.so” >> /etc/php.ini
service php-fpm restart
启动
配置ttserver数据文件的存放目录
mkdir -p /ttserver/
启动tokyotyrant的主进程(ttserver)
单机启动
ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000
双机互为主副模式
ulimit -SHn 51200
ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000
参数说明
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mportnum] [-rts path] [-rcc] [-skel name] [-mul num] [-ext path] [-extpc name period] [-mask expr] [-unmask expr] [dbname]
./ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000
-host name :指定需要绑定服务器域名或者IP地址,默认绑定这台服务器上的所有IP地址
-port num :指定需要绑定的端口号.默认端口号为1978
-thnum num: 指定线程数,默认是8个线程
-tout num: 指定每个会话的超时时间(单位秒) 默认永不超时
-dmn : 以守护进程方式运行
-pid path: 输出进程pid到指定的文件(这里指文件名路径)
-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: 指定用来存放同步时间戳的文件名
-rcc : 检查复制的一致性
-skel name : 指定骨架数据库库的名称
-mul num : 指定多个数据库机制的分区号
-ext path: 指定脚本语言扩展文件
-extpc name period : 指定定期命令的函数名称和调用周期
-mask expr : 指定禁用命令的名称
-unmask expr : 指定允许的命令的名称
bnum= num : 如果使用hash数据库,可以指定参数"#bnum=xxx"来提高性能,他可以指定bucket存储桶的数量,例如指定"#bnum=1000000",就可以将最新最热的100万条记录缓存在内存中
Ulimit -SHn 51200 : 入股大量客户端访问ttserver,请确保文件描述符够用,如果服务器的默认描述符为1024,可以再启动ttserver前使用ulimit命令提高这项值,例如
停止tokyotyant(ttserver)
Ps -ef|grep ttserver
找到ttserver的进程号并kill,例如
Kill -TREM 2159
数据库文件类型
Hash 数据库类型
数据库名为"*"
其后缀为".tch"
内存中的hash支持
bnum : 内存中存放最新最热数据的数量 #bnum=10000000
capnum : 指定记录的容量数 #capnum=10000000
capsiz : 指定使用内存的容量大小,记录超出容量将被存储订单删除 #capsize=1000000
mode :
Bnum :
Apow :
Fpow :
Opts :
Rcnum :
Xmsiz :
Dfunit :
B+树 数据库类型
数据库名称为"+"
其后缀是".tcb"
B + 数支持
capnum : 指定记录的容量数 #capnum=10000000
capsiz : 指定使用内存的容量大小 #capsize=1000000
Mode
Lmemb :
Nmemb :
Bnum :
Apow :
Fpow :
Opts :
Lcnum :
Ncnum :
Xmsiz :
Dfunit :
固定长度的数据库类型
其后缀是".tcf"
支持
Mode :
Width :
Limsiz :
表数据库
其后缀".tct"
支持
Mode :
Bnum :
Apow :
Fpow :
Opts :
Rcnum :
Lcnum :
Ncnum :
Xmsiz :
Dfunit :
Idx :
调用
1、任何Memcached客户端均可直接调用tokyotyrant。
2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:
(1)、写数据,将数据"value"写入到"key"中:
curl -X PUT http://127.0.0.1:11211/key -d “value”
(2)、读数据,读取"key"中数据:
curl http://127.0.0.1:11211/key
(3)、删数据,删除"key":
curl -X DELETE http://127.0.0.1:11211/key
工作原理
在ttserver中,是以多线程的方式向客户端提供服务的,一个线程负责accept客户端的socket,一定数量的线程(可以指定)进行读写服务,同时,也有一定数量的timer线程,专门来负责定时的任务,比如一些lua脚本,同时,如果是slaver,则专门一个timer线程,定时负责do slave的工作
Ttserver 和 redis 比较
https://blog.51cto.com/wushank/1110604
https://www.cnblogs.com/andrewzzb/archive/2012/12/21/2827829.html
线程
Ttserver 是多线程,可以利用多核cpu的计算能力,同时会增加CAS自旋或者锁的消耗,上线文切换也是一种消耗,复杂业务的并发控制不好
redis 是单线程,可以避免锁的消耗
存储方式 持久化比较
Ttserver 存储方式是hash数据库,是使用文件的方式,然后用mmap昂视映射到内存中