[文章作者:張宴 本文版本:v1.2 最后修改:2008.12.04 轉(zhuǎn)載請注明原文鏈接:http://blog./read.php/362/] Tokyo Cabinet 是日本人 平林幹雄 開發(fā)的一款 DBM 數(shù)據(jù)庫,該數(shù)據(jù)庫讀寫非常快,哈希模式寫入100萬條數(shù)據(jù)只需0.643秒,讀取100萬條數(shù)據(jù)只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。 Tokyo Tyrant 是由同一作者開發(fā)的 Tokyo Cabinet 數(shù)據(jù)庫網(wǎng)絡(luò)接口。它擁有Memcached兼容協(xié)議,也可以通過HTTP協(xié)議進(jìn)行數(shù)據(jù)交換。 Tokyo Tyrant 加上 Tokyo Cabinet,構(gòu)成了一款支持高并發(fā)的分布式持久存儲(chǔ)系統(tǒng),對任何原有Memcached客戶端來講,可以將Tokyo Tyrant看成是一個(gè)Memcached,但是,它的數(shù)據(jù)是可以持久存儲(chǔ)的。這一點(diǎn),跟新浪的Memcachedb性質(zhì)一樣。 相比Memcachedb而言,Tokyo Tyrant具有以下優(yōu)勢: 1、故障轉(zhuǎn)移:Tokyo Tyrant支持雙機(jī)互為主輔模式,主輔庫均可讀寫,而Memcachedb目前支持類似MySQL主輔庫同步的方式實(shí)現(xiàn)讀寫分離,支持“主服務(wù)器可讀寫、輔助服務(wù)器只讀”模式。 這里使用 $memcache->addServer 而不是 $memcache->connect 去連接 Tokyo Tyrant 服務(wù)器,是因?yàn)楫?dāng) Memcache 客戶端使用 addServer 服務(wù)器池時(shí),是根據(jù)“crc32(key) % current_server_num”哈希算法將 key 哈希到不同的服務(wù)器的,PHP、C 和 python 的客戶端都是如此的算法。Memcache 客戶端的 addserver 具有故障轉(zhuǎn)移機(jī)制,當(dāng) addserver 了2臺(tái) Memcached 服務(wù)器,而其中1臺(tái)宕機(jī)了,那么 current_server_num 會(huì)由原先的2變成1。 引用 memcached 官方網(wǎng)站和 PHP 手冊中的兩段話: 引用
http://www./memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available. http://cn./manual/zh/function.Memcache-addServer.php Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover. 2、日志文件體積小:Tokyo Tyrant用于主輔同步的日志文件比較小,大約是數(shù)據(jù)庫文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易將磁盤寫滿。 3、超大數(shù)據(jù)量下表現(xiàn)出色: wget http://tokyocabinet./tokyocabinet-1.3.22.tar.gz
tar zxvf tokyocabinet-1.3.22.tar.gz cd tokyocabinet-1.3.22/ ./configure make make install cd ../ 2、然后編譯安裝tokyotyrant wget http://tokyocabinet./tyrantpkg/tokyotyrant-1.1.8.tar.gz
tar zxvf tokyotyrant-1.1.8.tar.gz cd tokyotyrant-1.1.8/ ./configure make make install cd ../ 二、配置 1、創(chuàng)建tokyotyrant數(shù)據(jù)文件存放目錄 mkdir -p /ttserver/
2、啟動(dòng)tokyotyrant的主進(jìn)程(ttserver) (1)、單機(jī)模式 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.tch (2)、雙機(jī)互為主輔模式 服務(wù)器192.168.1.91: 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.tch 服務(wù)器192.168.1.92: ulimit -SHn 51200
ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch (3)、參數(shù)說明 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 : 指定需要綁定的服務(wù)器域名或IP地址。默認(rèn)綁定這臺(tái)服務(wù)器上的所有IP地址。 -port num : 指定需要綁定的端口號(hào)。默認(rèn)端口號(hào)為1978 -thnum num : 指定線程數(shù)。默認(rèn)為8個(gè)線程。 -tout num : 指定每個(gè)會(huì)話的超時(shí)時(shí)間(單位為秒)。默認(rèn)永不超時(shí)。 -dmn : 以守護(hù)進(jìn)程方式運(yùn)行。 -pid path : 輸出進(jìn)程ID到指定文件(這里指定文件名)。 -log path : 輸出日志信息到指定文件(這里指定文件名)。 -ld : 在日志文件中還記錄DEBUG調(diào)試信息。 -le : 在日志文件中僅記錄錯(cuò)誤信息。 -ulog path : 指定同步日志文件存放路徑(這里指定目錄名)。 -ulim num : 指定每個(gè)同步日志文件的大?。ɡ?28m)。 -uas : 使用異步IO記錄更新日志(使用此項(xiàng)會(huì)減少磁盤IO消耗,但是數(shù)據(jù)會(huì)先放在內(nèi)存中,不會(huì)立即寫入磁盤,如果重啟服務(wù)器或ttserver進(jìn)程被kill掉,將導(dǎo)致部分?jǐn)?shù)據(jù)丟失。一般情況下不建議使用)。 -sid num : 指定服務(wù)器ID號(hào)(當(dāng)使用主輔模式時(shí),每臺(tái)ttserver需要不同的ID號(hào)) -mhost name : 指定主輔同步模式下,主服務(wù)器的域名或IP地址。 -mport num : 指定主輔同步模式下,主服務(wù)器的端口號(hào)。 -rts path : 指定用來存放同步時(shí)間戳的文件名。 如果使用的是哈希數(shù)據(jù)庫,可以指定參數(shù)“#bnum=xxx”來提高性能。它可以指定bucket存儲(chǔ)桶的數(shù)量。例如指定“#bnum=1000000”,就可以將最新最熱的100萬條記錄緩存在內(nèi)存中: 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.tch#bnum=1000000
如果大量的客戶端訪問ttserver,請確保文件描述符夠用。許多服務(wù)器的默認(rèn)文件描述符為1024,可以在啟動(dòng)ttserver前使用ulimit命令提高這項(xiàng)值。例如: ulimit -SHn 51200
3、停止tokyotyrant(ttserver) ps -ef | grep ttserver
找到ttserver的進(jìn)程號(hào)并kill,例如: kill -TERM 2159
三、調(diào)用 1、任何Memcached客戶端均可直接調(diào)用tokyotyrant。 2、還可以通過HTTP方式調(diào)用,下面以Linux的curl命令為例,介紹如何操作tokyotyrant: (1)、寫數(shù)據(jù),將數(shù)據(jù)“value”寫入到“key”中: curl -X PUT http://127.0.0.1:11211/key -d "value"
(2)、讀數(shù)據(jù),讀取“key”中數(shù)據(jù): (3)、刪數(shù)據(jù),刪除“key”: curl -X DELETE http://127.0.0.1:11211/key
附:文章修改歷史 ● [2008年08月07日] [Version 1.0] 撰寫本文 ● [2008年10月16日] [Version 1.1] Tokyo Cabinet 版本升級(jí)到 1.3.12;Tokyo Tyrant 版本升級(jí)到 1.1.5 ● [2008年12月04日] [Version 1.2] Tokyo Cabinet 版本升級(jí)到 1.3.22;Tokyo Tyrant 版本升級(jí)到 1.1.8 |
|