<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Language" content="ja" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta name="author" content="Mikio Hirabayashi" /> <meta name="keywords" content="Tokyo Cabinet, tokyocabinet, database, DBM" /> <meta name="description" content="homepage of Tokyo Cabinet" /> <link rel="contents" href="./" /> <link rel="alternate" href="index.html" hreflang="en" title="the English version" /> <link rel="stylesheet" href="common.css" /> <link rel="icon" href="icon16.png" /> <link rev="made" href="mailto:mikio@users.sourceforge.net" /> <title>データベースマネージャ Tokyo Cabinet</title> <script type="text/javascript">function startup(){ var elem = document.getElementById("headline"); if(elem){ var now = new Date(); if((now.getFullYear() + now.getMonth() + now.getDate() + now.getHours()) % 4 == 0){ var label; switch((now.getMonth() + now.getDay() + now.getHours() + now.getMinutes()) % 24){ default: label = "東京収納棚"; break; case 1: label = "Shibuya Cabinet"; break; case 2: label = "Harajuku Cabinet"; break; case 4: label = "Aoyama Cabinet"; break; case 5: label = "Gakudai Cabinet"; break; case 7: label = "Shinjuku Cabinet"; break; case 8: label = "Ikebukuro Cabinet"; break; case 10: label = "Akihabara Cabinet"; break; case 11: label = "Ueno Cabinet"; break; case 13: label = "Sugamo Cabinet"; break; case 14: label = "Akasaka Cabinet"; break; case 16: label = "Roppongi Cabinet"; break; case 17: label = "Yokohama Cabinet"; break; case 19: label = "Saitama Cabinet"; break; case 20: label = "Tokorozawa Cabinet"; break; case 22: label = "Kyoto Cabinet"; break; case 23: label = "Nagoya Cabinet"; break; } var text; switch((now.getMonth() + now.getDate() + now.getMinutes()) % 48){ default: text = "世界最強絶対無敵電光石火疾風迅雷資料基盤管理器"; switch(now.getSeconds()){ case 0: label = "東京ラブストーリー"; text = "東京では誰もがラブストーリーの主人公になる"; break; case 20: label = "東京タワー"; text = "〜オカンとボクと、時々、オトン〜"; break; case 40: label = "東京青春朝焼物語"; text = "今日から俺、東京の人になる"; break; } break; case 1: text = "NDBMとは違うのだよ、NDBMとは!"; break; case 2: text = "Tokyo Cabinetは伊達じゃないっ!"; break; case 3: text = "こいつ…動くぞ…?"; break; case 5: text = "敢えて言おう、高速であると!"; break; case 6: text = "しかし、私もDBMのはずだ!"; break; case 7: text = "SQLで世界を変えれるって…おかしいんだよ!! "; break; case 9: text = "今の私はTokyo Cabinetだ。それ以上でもそれ以下でもない。"; break; case 10: text = "私はBerkeleyとは関係ない。私はいつも一人のDBMだった。"; break; case 11: text = "逆立ちしたってDBMはRDBにはなれないからな。"; break; case 13: text = "見せてもらおうか!Berkeleyのデータベースの性能とやらを!"; break; case 14: text = "悲しいけどこれ、DBMなのよね。"; break; case 15: text = "そのDBMの性能で勝ったということを忘れるな!!"; break; case 17: text = "新しい時代を創るのはSQLではない!!"; break; case 18: text = "えぇぃ、マイナーチェンジのくせにっ!"; break; case 19: text = "あんなの飾りです!偉い人にはそれが分からんのですよ!"; break; case 21: text = "よくもこんなくたびれたDBMが現役でいられるものだ。"; break; case 22: text = "見える!私にもレコードが見える!"; break; case 23: text = "私の愛馬は凶暴です。"; break; case 25: text = "そんなRDBみたいな口の利き方、おやめなさい!"; break; case 26: text = "悪い人だ。GDBMをいじめる悪い人だ。"; break; case 27: text = "作戦は一刻を争う!"; break; case 29: text = "僕が一番トランザクションをうまく使えるんだ。"; break; case 30: text = "実は容量が足らんのです。"; break; case 31: text = "おれはDBMだ!DBMでたくさんだっ! "; break; case 33: text = "遊びでやってるんじゃないんだよっ!!"; break; case 34: text = "あれはいいものだ!"; break; case 35: text = "人は時間さえも支配できる…。"; break; case 37: text = "この風!この肌触りこそDBMよ! "; break; case 38: text = "さすがハッシュだ、なんともないぜ。"; break; case 39: text = "プロセッサの性能差が戦力の決定的な差でないことを見せてやる!"; break; case 41: text = "君は、生き延びる事ができるか…? "; break; } elem.firstChild.nodeValue = label + ": " + text; } } } </script> </head> <body onload="startup();"> <h1 id="headline">Tokyo Cabinet: DBMの現代的な壱実装</h1> <div class="note">Copyright (C) 2006-2009 Mikio Hirabayashi</div> <div class="note">Last Update: Sun, 21 Jun 2009 22:14:52 +0900</div> <div class="navi">[<a href="index.html" hreflang="en">English</a>/<span class="void">Japanese</span>]</div> <div class="logo"><img src="logo-ja.png" id="logo" alt="Tokyo Cabinet" width="300" height="110" /></div> <hr /> <h2 id="overview">概要</h2> <p>Tokyo Cabinetはデータベースを扱うルーチン群のライブラリです。データベースといっても単純なもので、キーと値のペアからなるレコード群を格納したデータファイルです。キーと値は任意の長さを持つ一連のバイト列であり、文字列でもバイナリでも扱うことができます。テーブルやデータ型の概念はありません。レコードはハッシュ表かB+木か固定長配列で編成されます。</p> <p>Tokyo CabinetはGDBMやQDBMの後継として次の点を目標として開発されました。これらの目標は達成されており、Tokyo Cabinetは従来のDBMを置き換える製品だと言えます。</p> <ul> <li>空間効率の向上 : データベースファイルがより小さい</li> <li>時間効率の向上 : 処理がより高速である</li> <li>並列性の向上 : マルチスレッド環境での同時実行性能の向上</li> <li>利便性の向上 : APIがより単純である</li> <li>堅牢性の向上 : 不慮の事態でもデータベースファイルが壊れにくい</li> <li>64ビット対応 : 巨大なメモリ空間とデータベースファイルを扱える</li> </ul> <p>Tokyo CabinetはC言語で記述され、CとPerlとRubyとJavaとLuaのAPIとして提供されます。Tokyo CabinetはC99およびPOSIX準拠のAPIを備えるプラットフォームで利用できます。Tokyo CabinetはGNU Lesser General Public Licenseに基づくフリーソフトウェアです。</p> <hr /> <h2 id="documents">文書</h2> <p>以下の文書を読んでください。ソースパッケージにも同じものが含まれています。</p> <ul> <li><a href="spex-ja.html">基本仕様書</a></li> </ul> <ul> <li><a href="perldoc/">Perl用API仕様書</a></li> <li><a href="rubydoc/">Ruby用API仕様書</a></li> <li><a href="javadoc/">Java用API仕様書</a></li> <li><a href="luadoc/">Lua用API仕様書</a></li> </ul> <ul> <li><a href="tyrantdoc/">リモートサービス(Tokyo Tyrant)仕様書</a><ul> <li><a href="tyrantperldoc/">Perlクライアント仕様書</a></li> <li><a href="tyrantrubydoc/">Rubyクライアント仕様書</a></li> </ul></li> <li><a href="dystopiadoc/">転置インデックス(Tokyo Dystopia)仕様書</a></li> <li><a href="promenadedoc/">コンテンツ管理システム(Tokyo Promenade)仕様書</a></li> </ul> <ul> <li><a href="tokyoproducts.pdf">プレゼンテーション</a></li> <li><a href="benchmark.pdf">ベンチマークテストのレポート</a></li> </ul> <hr /> <h2 id="packages">ダウンロード</h2> <p>以下のソースパッケージをダウンロードしてください。バイナリパッケージについては、各ディストリビュータのサイトをご覧ください。</p> <ul> <li><a href="tokyocabinet-1.4.31.tar.gz">最新のソースパッケージ(バージョン1.4.31)</a></li> <li><a href="pastpkg/">過去のバージョン</a></li> </ul> <ul> <li><a href="perlpkg/">Perl用API</a></li> <li><a href="rubypkg/">Ruby用API</a></li> <li><a href="javapkg/">Java用API</a></li> <li><a href="luapkg/">Lua用API</a></li> </ul> <ul> <li><a href="tyrantpkg/">リモートサービス(Tokyo Tyrant)</a><ul> <li><a href="tyrantperlpkg/">リモートサービスのPerlクライアント</a></li> <li><a href="tyrantrubypkg/">リモートサービスのRubyクライアント</a></li> </ul></li> <li><a href="dystopiapkg/">転置インデックス(Tokyo Dystopia)</a></li> <li><a href="promenadepkg/">コンテンツ管理システム(Tokyo Promenade)</a></li> </ul> <ul> <li><a href="misc/">関連するパッケージ</a></li> </ul> <hr /> <h2 id="information">その他の情報</h2> <p>Tokyo Cabinetは<a href="http://qdbm.sourceforge.net/mikio/">平林幹雄</a>が作成しました。作者と連絡をとるには、`mikio@users.sourceforge.net' 宛に電子メールを送ってください。</p> <p>SourceForge.netにおけるプロジェクトページは `<a href="http://sourceforge.net/projects/tokyocabinet/">http://sourceforge.net/projects/tokyocabinet/</a>' にあります。Freshmeatにおける更新情報は `<a href="http://freshmeat.net/projects/tokyocabinet/">http://freshmeat.net/projects/tokyocabinet/</a>' から参照できます。</p> <hr /> </body> </html> <!-- END OF FILE -->