Tokyo Cabinet
Tokyo Cabinet について。利用前に情報はりつけ。
- Tokyo Cabinet
Tokyo Cabinetはデータベースを扱うルーチン群のライブラリです。データベースといっても単純なもので、キーと値のペアからなるレコード群を格納したデータファイルです。キーと値は任意の長さを持つ一連のバイト列であり、文字列でもバイナリでも扱うことができます。テーブルやデータ型の概念はありません。レコードはハッシュ表かB+木か固定長配列で編成されます。
http://tokyocabinet.sourceforge.net/
ライセンス:GNU Lesser General Public License(released under LGPL)
http://tokyocabinet.sourceforge.net/tokyoproducts.pdf
- http://tokyocabinet.sourceforge.net/spex-ja.html:titel=Tokyo Cabinet第1版基本仕様書
- レコードはハッシュ表かB+木か固定長配列で編成
ハッシュ表のデータベース
B+木のデータベース
- キーが重複する複数のレコードを格納可能
- レコードはユーザが指示した比較関数に基づいて整列されて格納
- カーソルを用いて各レコードを昇順または降順で参照
- 文字列の前方一致検索や数値の範囲検索が可能
- 便利なB+木データベース
- ハッシュデータベースより遅い
- ユーザが定義した順序に基づいて各レコードを参照できる
- ほとんどの場合、ハッシュデータベースに較べてデータベースファイルのサイズが半減
- データベースの規模が大きくディスクI/Oがボトルネックとなる場合は、圧縮機能を有効化すると処理速度が大幅に改善
固定長配列のデータベース
テーブルのデータベース
- ハッシュ表のデータベース変種
- 各レコードは主キーで識別
- 名前付きコラムの集合を値として持ち
- 任意のコラムに張られたインデックスを用いることで複雑な条件に基づくレコードの検索を効率化
- 柔軟なテーブルデータベースの実装
- リレーショナルデータベースの表のような構造を表現
- 各レコードは主キーで識別されるとともに、任意の文字列で名前を付けられたコラムの集合を値として持ち
- 例えば、社員番号を主キーにして、名前や部署や給与などのコラムを構造化して格納することができます
- リレーショナルデータベースと違ってデータスキーマを事前に定義する必要はなく、レコード毎に異なる種類のコラムを持たせることができます
- 主キー以外の条件でも問い合わせを行うことができます
- インデックスはB+木データベースの外部ファイルとして実装
- Tokyo Cabinetは高速に動作します。
- 例えば100万件のレコードの登録にかかる時間
- ハッシュデータベースで0.7秒ほど
- B+木データベースで1.6秒ほどです。
- Tokyo Cabinetのデータベースは小さいです。
- 例えば1レコードあたりのオーバーヘッドは、ハッシュデータベースで16バイトほど
- B+木データベースで5バイトほどです。
- さらにTokyo Cabinetで扱えるデータの規模は莫大です。
- 最大8EB(9.22e18バイト)までのデータベースファイルを扱うことができます。
- 実用的な機能性
- データベースに接続するモード
- 単純だが多様なインタフェース群
抽象データベースAPI
バックアップ
- データベースが更新中でないこと確認してからバックアップ作業を行うことが必要
- データベースファイルのバックアップは、通常のファイルと同様にcpやtarやcpioといったコマンドで行うことができます
- ただし、ライタとして接続しているプロセスがデータベースを更新中である場合、コピー元のファイルの状態が中途半端になっている可能性があるため、コピー先のファイルに不整合が起きる場合があります
テーブルデータベースの仕組み
- 複数の列からなるレコードを格納できるデータベース
- ハッシュデータベースのように主キーでレコードを識別しながらも、リレーショナルデータベースのようにレコード内に名前をつけた複数のコラムを持たせることができます
- リレーショナルデータベースとは違って、あらかじめスキーマを定義する必要がなく、レコード毎に異なる種類のコラムを持たせることができます
- レコードの検索は、合致条件や順序指定を組み合わせたクエリオブジェクトをデータベースに渡すことで実行
抽象データベース
- ハッシュデーターベースかB+木データベースかを実行時に決定したい場合には、抽象データベースAPIを使う
抽象データベースによるテーブル操作
- 抽象データベースの接尾辞に ".tct" をつけるとテーブルデータベースになります
リモートインターフェイス
- データベースサーバとそれに接続するためのライブラリが別パッケージ「Tokyo Tyrant」として提供
- Tokyo Tyrantのサーバは抽象データベースを扱うので、Tokyo Cabinetの全種類のデータベースをリモートインターフェイスで操作することができます
- 参考サイト
- Inside Tokyo Cabinet
- http://alpha.mixi.co.jp/blog/?p=84
- http://alpha.mixi.co.jp/blog/?p=86
- http://alpha.mixi.co.jp/blog/?p=90
- http://alpha.mixi.co.jp/blog/?p=96
- http://alpha.mixi.co.jp/blog/?p=98
- http://alpha.mixi.co.jp/blog/?p=290
- http://alpha.mixi.co.jp/blog/?p=292
- http://alpha.mixi.co.jp/blog/?p=298
- http://alpha.mixi.co.jp/blog/?p=301
- http://alpha.mixi.co.jp/blog/?p=318