タグ

tokyotyrantに関するbasiのブックマーク (12)

  • TokyoTyrantをPHPで使う際に便利な資料と実装コードサンプル:phpspot開発日誌

    TokyoTyrantをPHPで使う際に便利な資料がスライドシェアで公開されてました。 TokyoTyrant をご存知の方も多いと思いますが、一応、知らない方に説明をすると、TokyoCabinet という高速なkey-valueストア型のデータベース操作ライブラリがあって、これのネットワークインタフェースになります。 mixi の最終ログイン時刻保存などに使われているそうで、1秒で10000回もの保存・読み出しクエリをマシンたった1台で処理できた実績があります。 データをファイルに保存するので、サーバを落としてもデータは保持され、なおかつmemcachedと同程度のパフォーマンスを発揮できるという物凄いものです。 これをPHPから扱うためにはどうするか、という際に参考に出来る資料となってます。 非常によくまとまっていたのでご紹介させて頂いてます。 資料によると、当然ながらPHP Ext

  • Tokyo TyrantとテーブルDBでリアルタイム検索 - mixi engineer blog

    ドラクエは卒業して、もっと英語漬けをやっているmikioです。さて今回は、データベースサーバTokyo Tyrantとテーブルデータベースを使ってリアルタイム検索システムを構築する方法について語ります。 テーブルDBを分散させたい Tokyo TyrantでもテーブルDBがサポートされているわけですが、これはリアルタイム検索システムへの布石です。テーブルDBは任意のコラムにインデックスを張ることができ、時系列のコラムにインデックスを張ればその値によって古いコラムを効率的に消すことができます。チュートリアルの「Persistent but Expirable Cache」でもその方法を示しています。また、任意のコラムに分かち書きトークン方式もしくは文字N-gram方式で転置インデックスを張ることができます。これらを総合すると、最新のデータのみを保持してサイズと性能を一定に保ったインデックスを

    Tokyo TyrantとテーブルDBでリアルタイム検索 - mixi engineer blog
  • Tokyo Tyrant + PHP

    Corporate Perl in Recruit, OpenSocial and Emoji‎ - YAPC::Asia 2009 TokyoYusuke Kawasaki

    Tokyo Tyrant + PHP
  • ウノウラボ Unoh Labs: PHPでTokyoTyrantのストリームラッパーを書く

    浴衣の女の子は大好きですが、僕が近づくと逃げいていきます。 Keitaです。 さて、ちょっと前にNet_TokyoTyrantを公開しましたがぽつぽつと修正をかけて いたります。外国の方もちょくちょくTokyoTyrantを使ってる人がいるようで、2,3回 バグ報告をいただきました。Openpearに移動し誰でもコミットできるような状態になっ てますのでバグとか見つけたりしたら、遠慮なくコミットしてください。 さて、とある方にPHPのストリームラッパが結構簡単に書けることを教えていただいたのでTokyoTyrantで試してみたいと思います。 簡単に説明すると以下のようにファイルとしてfopenとかfile_get_contentsが使うための仕組みががPHPで簡単にできます。 <?php //こんなphpのコードをあらかじめ書き込んでおいて $test1 ='put('test1.php'

  • PHPでTokyo Cabinetハッシュデータベースサーバを作ってみた - 讃容日記

    Tokyo Cabinetのデータベースは書き込みモードで開くと排他ロックがかかるので、Apache2 (prefork)+mod_phpCGIのようなリクエストごとにPHPのプロセスが分かれているWebアプリケーションでTokyo Cabinetを読み書き両用で使うのは苦しいものがあります。(コードの書き方を工夫すればロックの影響を小さくできる場合もあります) そこで、PHPでHTTPベースのハッシュデータベースサーバを作ってみました。このサーバはPHP 5.2、tokyocabinet拡張モジュール、PECLのhttp拡張モジュールを使います。ソケットの操作にはPHP組み込みのストリーム関数を用い、sockets拡張モジュールは使いません。 <?php class TCHDBServer { static private $statuses = array( 100 => 'Cont

    PHPでTokyo Cabinetハッシュデータベースサーバを作ってみた - 讃容日記
  • DBMによるデータベースサーバ - mixi engineer blog

    DSのスターフォックスというゲームにはまりまくりのmikioです。最近社内外で「俺ストレージサーバ」を作るのが流行っているようなので私も参戦してみました。今回はDBMのネットワーク層をほぼスクラッチで作った話をします。 Tokyo Tyrant Tokyo Tyrant(以下TT)はTokyo Cabinet(以下TC)をラップしてネットワーク越しに操作できるようにするツールです。キャビネット(内閣)を傀儡にするタイラント(僭主)ということで名付けました。ダウンロードはこちら。 TCは高性能なDBMで、マルチスレッドモデルで高い並列性を実現していますが、逆にマルチプロセスモデルだとファイルロックがかかるので並列性が低くなってしまいます。つまり、書き込みモードでデータベースにアクセスしているプロセスがいると、その間は他のプロセスがデータベースに接続しようとするとブロックされることになります。

    DBMによるデータベースサーバ - mixi engineer blog
  • TCのHaskellバインディングとODF繰り越し制度の紹介 - mixi engineer blog

    はじめまして。ミュージック開発チームのtomと申します。名前はtomですが純日人です。(名も"tom"でちゃんと漢字があります。) 今回は、"オンラインコーヒーメーカー萌香たん"を作ったりできることでおなじみのODFをちょっとお得に使うための、「ODF繰り越し制度」の紹介と、その制度を利用して私が作っているTokyo CabinetのHaskellバインディングを紹介させていただければと思います。 ODF繰り越し制度 弊社のエンジニアは、ODF(One Day Free)という制度を使って、毎週金曜日に自分が好きなことに取り組むことができます。このODF制度、四半期ごとに実施する or しないを申告するのですが、このときになんと「繰り越す」という選択肢が用意されているのです。 普通のODFでは、四半期(3ヶ月)の間、週1日を自由な時間として確保することができます。とは言っても忙しい時期

    TCのHaskellバインディングとODF繰り越し制度の紹介 - mixi engineer blog
  • プラグインで独自ストレージを作ろう - mixi engineer blog

    OpenSocialとかC++0xとか世の中の流れが早すぎて、いろいろと勉強しなきゃなと焦りつつも、ついついピクミン2にはまってしまうmikioです。今回はTokyo Tyrant(TT)を使ってユーザ独自のストレージシステムを簡単に構築する方法について説明します。 プラグインとは オブジェクト指向プログラミングに慣れた人にとっては、インターフェイスと実装を分離することによってプログラムの拡張性や保守性を向上させる技法(データ抽象)は常識ですよね。その考えをさらに進めると、インターフェイスのみをプログラムに記述しておいて、具体的な実装は実行時に割り当てるという、いわゆるプラグイン(plug-in)という技法に至ります。プラグインでカスタマイズできる能力をプラガブル(pluggable)などと言ったりもします。 例えばTokyo Cabinet(TC)では、レコードの挿入、削除、参照といった

    プラグインで独自ストレージを作ろう - mixi engineer blog
  • データベースの動的デフラグ - mixi engineer blog

    ノートPCの冷却ファンがうるさいのを対処しようとしてWebで調べたら、そのファンの設計者が「静音性へのこだわり」を語ったページにたどり着いて複雑な心境のmikioです。今回は、Tokyo Cabinet(TC)の最新バージョンで実装された動的デフラグ機能について長々と説明します。 断片化とデフラグ 任意のサイズのデータを管理する記憶装置においては、利用可能領域の断片化(fragmentation)の問題が常につきまといます。ファイルシステム上で任意のサイズのファイルを管理する際にも、データベースファイル内で任意のサイズのレコードを管理する際にも、C言語のmalloc/free関数群でメモリの管理をする際にも、様々なレイヤで断片化が起きうるのです。なぜなら、データを削除もしくは移動した際の空き領域を再利用するにあたって、その領域と同じサイズのデータが常に入ってくるとは限らないからです。特にデ

    データベースの動的デフラグ - mixi engineer blog
  • DBMによるテーブルデータベース その参 - mixi engineer blog

    最近、忙しさを理由に英会話レッスンをサボりがちになってよろしくないなと猛省するmikioです。今回は、Tokyo CabinetのテーブルデータベースをTokyo Tyrantを使ってデータベースサーバとして利用する方法について述べます。 とりあえず使ってみる Tokyo CabinetとTokyo Tyrantの最新版(1.4.4と1.1.12)がリリースされていますので、インストールしておいてください。またも社員名簿を作ってみましょう。まずは、TTのサーバを実行します。データベースファイルの接尾辞には「.tct」を指定して、テーブルデータベースファイルと接続します。 ttserver casket.tct 別の端末でクライアントを操作して、"put" コマンドで社員を登録しましょう。「-sep」は、コラムのキーと値を区切る文字を指定するオプションです。"|" 以外でも任意の区切り文字を

    DBMによるテーブルデータベース その参 - mixi engineer blog
  • Tokyo Tyrantによるリアルタイム検索 - mixi engineer blog

    どうぶつの森にハマって、たぬきち商店が早終いする関係で退勤時間もめっさ早くなったmikioです。今回は、Tokyo TyrantのキャッシュとLua拡張を使って超お手軽にリアルタイム検索システムを作る方法について述べます。 ユースケース 高い頻度で更新されるWeb上のテキストをリアルタイムに検索したいと思ったことはありませんか? mixi日記や各種のブログサービスやRSSリーダなどで扱う大量のコンテンツを安価かつ簡単に検索したいと思ったことはありませんか? 私は結構あります。要件を箇条書きすると以下のような感じでしょうか。 最新データの合計100万件くらいを検索できればよく、古いデータは自動的に消えてほしい。 ただし、更新はリアルタイムにして、書いた瞬間に検索結果に反映されてほしい。 サーバ1台で更新1000qpsおよび検索100qpsは処理したい。 再現率よりも精度とリアルタイム性を重視

    Tokyo Tyrantによるリアルタイム検索 - mixi engineer blog
  • mixi Engineers’ Blog >> Tokyo (Cabinet|Tyrant)の新機能

    アロハシャツとショートパンツとビーサンで出勤してスネ毛が美しくないと評判のmikioです。さて今回は、Tokyo Cabinet(TC)とTokyo Tyrant(TT)のそれぞれ最新版でサポートされた新機能についてご紹介します。 固定長データベース 最終ログイン時刻データベースをTTで管理する仕組みについての記事を以前書きましたが、それに対して「各レコードを固定長にすればlseek一発で参照できるよ」という趣旨のご指摘をいただきました。全くその通りで、最終ログイン時刻の値に必要な領域は各ユーザ毎に10バイトもあれば十分ですし、検索キーはユーザID(mixiにおいては1からの連番)なので、それを添字に使えば二次元配列としてデータベースを表現することができます。 ただし、yamazさんも指摘しているように、ログイン時刻データベースのスループット限界はwriteがブロックすることにより訪れるの

    mixi Engineers’ Blog >> Tokyo (Cabinet|Tyrant)の新機能
  • 1