Tokyo Cabinet和Tokyo Tyrant簡介

Tokyo Cabinet和Tokyo Tyrant簡介



今天要介紹的NoSQL產品是Tokyo Cabinet和Tokyo Tyrant,Tokyo Cabinet是一個性能優秀的數據存儲引擎,而Tokyo Tyrant則提供了訪問Tokyo Cabinet數據的網絡接口。這是一個很成熟的產品,在國內外也有衆多的成功案例。

 

Tokyo Cabinet(簡稱TC)和Tokyo Tyrant(簡稱TT),顧名思義,是源自日本的開源項目。由FAL Labs維護,主要的開發人員是Mikio Hirabayashi。最早應用在日本最大的SNS網站mixi.jp上成功後而聲名鵲起。

 

Tokyo Cabinet簡介



Tokyo Cabinet: super hyper ultra database manager

http://fallabs.com/tokyocabinet/

 

Tokyo Cabinet 是日本人平林幹雄開發的一款 DBM 數據庫。Tokyo Cabinet是一個用C寫的數據存儲引擎,以key-value的方式存儲數據,支持Hash、B+ tree、Hash Table等多種數據結構。同時提供了C、 Perl、 Ruby、Java和Lua等多種語言的API支持,但是如果通過網絡來訪問,就需要用TT。

 

Tokyo Cabinet因爲支持靈活的數據結構而倍受歡迎,特別是Hash Table類型,很像傳統的關係型數據庫,只是每條存儲記錄的列是自由定義的,可以通過列作爲條件來查詢,十分方便。這是很多key-value結構的NoSQL產品所不具備的特性。當然,Hash Table類型和Hash、B+ tree相比存取效率會低一些,任何事物都是有兩面性的,在帶來高度靈活度的同時,必然要犧牲部分的效率。

 

Tokyo Cabinet數據庫讀寫非常快,哈希模式寫入100萬條數據只需0.643秒,讀取100萬條數據只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。

 

image

 

Tokyo Tyrant簡介



Tokyo Tyrant: network interface of Tokyo Cabinet

http://fallabs.com/tokyotyrant/

 

Tokyo Tyrant: 是爲TC寫的網絡接口,他支持memcache協議,也可以通過HTTP操作,以下稱TT。

 

Tokyo Tyrant同樣是用C寫的,支持從網絡端高併發、多線程的訪問TC。另外TC/TT支持master/slave架構,可以通過配置實現高可用性,這也是很不錯的一個特性。

 

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

 

Tokyo Tyrant和memcachedb的優勢比較



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

 

故障轉移

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

image

這裏使用 $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.

 

日誌文件體積小

Tokyo Tyrant用於主輔同步的日誌文件比較小,大約是數據庫文件的1.3倍,而Memcachedb的同步日誌文件非常大,如果不定期清理,很容易將磁盤寫滿。

 

超大數據量下表現出色

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

 

後續


TC/TT是一個久經考驗的很穩定的產品,在千萬及以下數據量級別表現出色。但是開發者由於種種原因,已經很長時間沒有更新版本了,而是推出了對應升級產品,叫做Kyoto Cabinet和Kyoto Tycoon,這也給TC/TT的前景帶來了不明朗的因素,很明顯作者是鼓勵人們使用升級的產品,但是由於新產品沒有更多的成功案例,在業界的影響力反而不如TC/TT,因此在現階段,TC/TT仍然是一個不錯的NoSQL選擇。

 

Kyoto Cabinet: a straightforward implementation of DBM

http://fallabs.com/kyotocabinet/

 

Kyoto Tycoon: a handy cache/storage server

http://fallabs.com/kyototycoon/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章