TTserver

简介

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昂视映射到内存中

Ttserver的使用

http://www.micmiu.com/nosql/ttserver-tutorial/

发布了48 篇原创文章 · 获赞 31 · 访问量 4557

猜你喜欢

转载自blog.csdn.net/qq_39787367/article/details/103855131