Tokyo Cabinet - biblioteka baz danych klucz-wartość

Tokyo Cabinet to biblioteka do zarządzania bazami danych klucz-wartość rozwijana przez Mikio Hirabayashi. Stosowana jest m.in. na mixi.jp - serwisie, który według Alexy jest 2-3 razy większy od Onetu (określany japońskim Facebookiem). Tokyo Cabinet jest prostym i skalowalnym narzędziem do przechowywania danych. Dodatkowo dostępne jest kilka dodatkowych bibliotek - Tokyo Tyrant będący serwerem dla baz Cabinet, Tokyo Dystopia będąca biblioteką do pełnotekstowego wyszukiwania w tych bazach. Biblioteki te napisane są w C i wydawane na licencji LGPL.

Tokyo Cabinet charakteryzuje się:
  • wysoką współbieżnością: multi-thread safe; blokady zapisu/odczytu po rekordach
  • wysoką skalowalnością: hasze i b-drzewa jako struktury danych - 0(1) i 0(log N); brak limitu rozmiaru pliku bazy danych
  • transakcjami: zapis przed logowaniem, właściwości ACID
  • różne API: lista/hasz/drzewo w pamięci; hasz/b-drzewo/tablica/tabela w plikach
  • API dla języków skryptowych: Perl, Ruby, Java, Lua, Python, PHP, Haskel, Erlang itd.
Tokyo Tyrant oferuje:
  • serwer sieciowy dla bazy Tokyo Cabinet: model klient-serwer; dostęp wielu aplikacji do jednej bazy; wydajny binarny protokół
  • obsługa innych protokołów: memcached i HTTP
  • wysoka wydajność / współbieżność
  • wysoka dostępność: backup i log aktualizacji "na gorąco"; asynchroniczna replikacja między serwerami
  • efektywne operacje: aktualizacje bez odpowiedzi, pobieranie wielu rekordów; atomowe inkrementacje
  • API w wielu językach skryptowych
Tokyo Dystopia oferuje:
  • silnik wyszukiwania pełnotekstowego
  • łączy dwa tokenizery w wyszukiwaniu (N-gram, zewnętrzny procesor języków)
  • wysoka wydajność/skalowalność: obsługuje ponad 10 milionów dokumentów, wyszukuje w ciągu milisekund
  • zoptymalizowany pod profesjonalne zastosowania
  • wykorzystywany m.in. w wyszukiwarce znajomych na mixi.jp

Instalacja

W przypadku systemów Linux/Unix potrzebujemy aby sam kompilator. Pobieramy źródła Cabinet, Tyranta i Dystopii (jeżeli potrzebujemy) i w tej kolejności kompilujemy i instalujemy standardowym:
./configure --prefix=/usr
make
make install

Obsługa bazy

Do obsługi baz danych poprzez serwer Tyrant służy polecenie ttserver. Najprościej "ttserver start". By odpalić serwer w tle dla podanej bazy danych można użyć:
ttserver -dmn -pid /tmp/ttserver.pid /tmp/moja_baza.tch

Obsługa serwera Tyrant z poziomu Pythona

Z poziomu Pythona możemy wykorzystać bibliotekę pytyrant, którą zainstalujemy poprzez standardowe:
python setup.py install
Oto prosty skrypt zapisujący i odczytujący dane z plikowej bazy "moja_baza.tch":
import pytyrant
t = pytyrant.PyTyrant.open('127.0.0.1', 1978)
t['__test_key__'] = 'foo'
t.concat('__test_key__', 'bar')
print t['__test_key__']

del t['__test_key__']

for i in range(1, 100000):
	key = 'k%s' % i
	t[key] = str(i)
	print i

print
print 'odczyt'
for i in range(1, 100000):
	key = 'k%s' % i
	print t[key]
Czas wykonywania tych operacji jest uwarunkowany od wybranego formatu przechowywania danych i ich miejsca (RAM lub plik).

Dostępna jest także biblioteka pytc będąca nakładką na Tokyo Cabinet, lecz brak do niej lepszej dokumentacji. Dostępne są np. przykłady jej zastosowania.

Na slideshare znajdziemy też kilka ciekawych prezentacji: Building TweetReach with Sinatra, Tokyo Cabinet and Grackle: Austin on Rails, Pylons + Tokyo Cabinet, Introduction to Tokyo Products. Plurk wykorzystał Tokyo Cabinet w swojej bazie LightCloud, którą używa jako (lepsze) zastępstwo Memcached.

RkBlog

Programowanie Sieciowe, 4 October 2009

Comment article
Comment article RkBlog main page Search RSS Contact