TTServer是什麼?

 
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


項目中運用的實例:統計論壇中帖子的點擊數量

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

發佈了45 篇原創文章 · 獲贊 24 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章