Tokyo Cabinet DBM 數據庫

Tokyo Cabinet 是日本人 平林幹雄 開發的一款 DBM 數據庫,該數據庫讀寫非常快,哈希模式寫入100萬條數據只需0.643秒,讀取100萬條數據只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。

  


  Tokyo Tyrant 是由同一作者開發的 Tokyo Cabinet 數據庫網絡接口。它擁有Memcached兼容協議,也可以通過HTTP協議進行數據交換。

  Tokyo Tyrant 加上 Tokyo Cabinet,構成了一款支持高併發的分佈式持久存儲系統,對任何原有Memcached客戶端來講,可以將Tokyo Tyrant看成是一個Memcached,但是,它的數據是可以持久存儲的。這一點,跟新浪的Memcachedb性質一樣。

  相比Memcachedb而言,Tokyo Tyrant具有以下優勢:

  1、故障轉移:Tokyo Tyrant支持雙機互爲主輔模式,主輔庫均可讀寫,而Memcachedb目前支持類似MySQL主輔庫同步的方式實現讀寫分離,支持“主服務器可讀寫、輔助服務器只讀”模式。

  

  這裏使用 $memcache->addServer 而不是 $memcache->connect 去連接 Tokyo Tyrant 服務器,是因爲當 Memcache 客戶端使用 addServer 服務器池時,是根據“crc32(key) % current_server_num”哈希算法將 key 哈希到不同的服務器的,PHP、C 和 python 的客戶端都是如此的算法。Memcache 客戶端的 addserver 具有故障轉移機制,當 addserver 了2臺 Memcached 服務器,而其中1臺宕機了,那麼 current_server_num 會由原先的2變成1。

  引用 memcached 官方網站和 PHP 手冊中的兩段話:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

http://cn.php.net/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用於主輔同步的日誌文件比較小,大約是數據庫文件的1.3倍,而Memcachedb的同步日誌文件非常大,如果不定期清理,很容易將磁盤寫滿。


  3、超大數據量下表現出色:

  

  但是,Tokyo Tyrant 也有缺點:在32位操作系統下,作爲 Tokyo Tyrant 後端存儲的 Tokyo Cabinet 數據庫單個文件不能超過2G,而64位操作系統則不受這一限制。所以,如果使用 Tokyo Tyrant,推薦在64位CPU、操作系統上安裝運行。


  一、安裝
  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
cd ../

--------在32位操作系統下,作爲 Tokyo Tyrant 後端存儲的 Tokyo Cabinet 數據庫單個文件不能超過2G,而64位操作系統則不受這一限制。所以,如果使用 Tokyo Tyrant,推薦在64位CPU、操作系統上安裝運行。---------------

其實不用,在編譯Tokyo cabinet的時候,使用如下編譯選項就可以突破2G限制
--enable-off64

另附Tokyo cabinet編譯參數:
Options of Configure
The following options can be specified with `./configure'.

--enable-debug : build for debugging. Enable debugging symbols, do not perform optimization, and perform static linking.
--enable-devel : build for development. Enable debugging symbols, perform optimization, and perform dynamic linking.
--enable-profile : build for profiling. Enable profiling symbols, perform optimization, and perform dynamic linking.
--enable-static : build by static linking.
--enable-fastest : build for fastest run.
--enable-off64 : build with 64-bit file offset on 32-bit system.
--enable-swab : build for swapping byte-orders.
--enable-uyield : build for detecting race conditions.
--disable-zlib : build without ZLIB compression.
--disable-bzip : build without BZIP2 compression.
--disable-pthread : build without POSIX thread support.
--disable-shared : avoid to build shared libraries.


  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
cd ../

  二、配置
  1、創建tokyotyrant數據文件存放目錄
mkdir -p /ttserver/


  2、啓動tokyotyrant的主進程(ttserver)
  (1)、單機模式
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)、雙機互爲主輔模式
  服務器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


  服務器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)、參數說明
  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萬條記錄緩存在內存中:
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,請確保文件描述符夠用。許多服務器的默認文件描述符爲1024,可以在啓動ttserver前使用ulimit命令提高這項值。例如:
ulimit -SHn 51200


  3、停止tokyotyrant(ttserver)
ps -ef | grep ttserver

  找到ttserver的進程號並kill,例如:
kill -TERM 2159

  三、調用
  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
發佈了21 篇原創文章 · 獲贊 2 · 訪問量 1778
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章