浴衣の女の子は大好きですが、僕が近づくと逃げいていきます。 Keitaです。 さて、ちょっと前にNet_TokyoTyrantを公開しましたがぽつぽつと修正をかけて いたります。外国の方もちょくちょくTokyoTyrantを使ってる人がいるようで、2,3回 バグ報告をいただきました。Openpearに移動し誰でもコミットできるような状態になっ てますのでバグとか見つけたりしたら、遠慮なくコミットしてください。 さて、とある方にPHPのストリームラッパが結構簡単に書けることを教えていただいたのでTokyoTyrantで試してみたいと思います。 簡単に説明すると以下のようにファイルとしてfopenとかfile_get_contentsが使うための仕組みががPHPで簡単にできます。 <?php //こんなphpのコードをあらかじめ書き込んでおいて $test1 ='put('test1.php'
本当にやりたいのはこれじゃないのだけど TokyoTyrantのphp拡張が出た imagickの作者の人がつくってるやつ。よくできてる。 さっと見た感じ sessionハンドラがある fileのところtokyotyrantとか書き換えるとできる tableのほうのストレージを使ってる とすると、今考えてる、key valueなやつもまだニーズはありそう queryを作るときにチェーンできる $ttt->addCond('hoge', 'huga')->addCond('mge', 'moga'); 俺がサボってた大きい数値とか型とかがきちんとできてるっぽい あとで調べる マニュアルがすでに充実 翻訳する場合githubで送ることになるの? パフォーマンス比較してみたい tokyo_tyrantって名前でいいのか? phptの使い方覚えよう さて、Net_TokyoTyrantをある程度け
やったこと2件 http://petewarden.typepad.com/searchbrowser/2009/06/how-to-get-tokyo-tyrant-working-in-php.html この指摘について対応した以外は変更なし。 手元では再現しない気がする。 候補となってるのはまだリリースしてないから こっちは変更点は RDB的な実装に対応した コメントがんばってつけてる 英語わからね。 といったところ 悩んでいるのが本家のRubyのライブラリの動きをそのまま移植しているため、はたしてこの動作がPHPっぽいかというあたりをまだ考えてないので、もうちょっと精査してから出したい。 あと、id:k1LoWさんの作成しているhttp://github.com/k1LoW/tokyotyrant_php/もおおいに参考にさせていただいたのでこの場を借りてお礼申し上げたい。 うーノ
まだピクミン2をクリアしてないのでケジメ的に新作ゲームを買えないmikioです。今回は、Tokyo Cabinetを使って激烈簡単に特定サイトの専用の検索機能を設置する方法について説明します。クローリングから検索までを10分くらいの作業で可能にします。 特定サイトの検索エンジン Web全体の検索機能を作るのは、途方もない技術力と設備を持っているGoogleやMicrosoftなどのビッグプレーヤでないと難しいのが現実です。でも、自分が気に入っているいくつかのサイトを対象とした検索エンジンを作るのであれば個人だってできます。また、インターネットから手が届かないイントラネットのコンテンツの検索機能は自分達で手がけないと構築できません。 ということで、企業用の検索システムが数多く売られていますし、LuceneやGroongaやHyper Estraierなどのオープンソース製品も世に多数存在しま
相対性理論のボーカルが頭から離れないmikioです。熱いわっふるの声に応えて今回はTokyo Cabinetのテーブルデータベースにおける検索機能の実装について語ってみたいと思います。とても長いのですが、最後まで読んだあかつきには、自分でも全文検索エンジンを作れると思っていただければ嬉しいです。 デモ モチベーションをあげていただくために、100行のソースコードで検索UIのデモを作ってみました。Java 6の日本語文書を対象としているので、「stringbuffer」とか「コンパイル」とか「倍精度浮動小数」とかそれっぽい用語で検索してみてください。 インデックスがちゃんとできていれば、たった100行で某検索エンジン風味の検索機能をあなたのデータを対象にして動かすことができます。ソースコードはこちら(テンプレートはこちら)です。 でも、今回はUIの話ではないのです。ものすごく地味に、全文検索
Webアプリケーションと言えばデータベースが大抵使われるが、本当にRDBMSである必要があるのだろうか。そもそも構造的に管理する必要がなかったり、非効率的になってしまうこともある。そのような場合に考えたいのがキー/バリュー型のDB導入だ。 ベンチマーク データを細かく管理するよりもオブジェクトごとキー/バリューデータベースに放り込んでしまうという方法がとれる。ここ数年で幾つかのソフトウェアが登場したが、それらを統合して利用できるようにするのがMonetaだ。 今回紹介するオープンソース・ソフトウェアはMoneta、各種キー/バリュー型DBの共通インタフェースだ。 Monetaが対応しているのはファイル、Memcached、メモリ、DataMapper、Amazon S3、Berkeley DB、Redis、SDBM、Tokyo CabinetそしてCouchDBとなっている。各DBごとにラ
ついに発売されたスト4のコンシューマ機版をやりたくてしょうがないけど筐体を買ってもらえないので、駅前のゲーム屋のディスプレー前で垂涎するばかりのmikioです。今回は連載の最終回で、各種スクリプト言語を使ってお手軽にテーブルデータベースを操作する方法について説明します。 TokyoCabinet::TDB まずは、TCのPerlバインディングとRubyバインディングの最新版を入手してください。それぞれテーブルデータベースを扱うための TokyoCabinet::TDB というクラスが加わっています。以下のようなIDLによるガイドラインに準拠したインターフェイスが提供されますので、使い方は言語にかかわらず同じようになるはずです。 module TokyoCabinet { interface TDB { boolean open(in string path, in long omode);
遅めの夏休みで那須塩原に行ってきたmikioです。牧場でアルパカに触ってきたのですが、めちゃかわいかったです。さて今回は、Tokyo Tyrant(TT)にスクリプト言語Luaの処理系を組み込んで使う方法について解説します。 つか、Luaって何? Lua(公式サイトによると「るーあ(LOO-ah)」と発音)という言語の名前は聞いたことがあっても、数あるマイナー言語のひとつと思って特に気にかけていない人も多いと思います。私もそうでした。しかし、今では、C言語使いの第2言語・第3言語として使うにはとても有望な言語だと思っています。 Luaに関する日本語の情報はまだ多くはないのですが、以下のサイトを順に読むとだいたいの雰囲気が掴めると思います。 Lua で組んでみる Lua 5.1 リファレンスマニュアル Luaは言語仕様が小さいので、とても習得しやすいです。上記のリファレンスマニュアルだけ読め
来年のバレンタインデーに、正確には「2009-02-14T08:31:30+09:00」に、UNIX時間が「1234567890」を迎えることを発見してちょっと嬉しいmikioです。さて、今回は高効率ハッシュデータベースサーバTokyo Tyrantを用いてHAハッシュデータベースを構築する手法についてご紹介します。ちょっと難しいし非常に長い内容なのですが、最後までお付き合いくださいませ。 可用性と保全性 HA(High Availability:高可用性)とは、可用性(Availability)が高いことです。それでは説明になっていないので詳しく言い替えますと、システムに障害が起きにくくすることと、たとえ障害が起きたとしてもできるだけ迅速に復旧できるようにすることです。データベース系のシステムはユーザのデータを管理するという中核的役割を担うため、可用性を高めることは最も重要な課題となりま
DSのスターフォックスというゲームにはまりまくりのmikioです。最近社内外で「俺ストレージサーバ」を作るのが流行っているようなので私も参戦してみました。今回はDBMのネットワーク層をほぼスクラッチで作った話をします。 Tokyo Tyrant Tokyo Tyrant(以下TT)はTokyo Cabinet(以下TC)をラップしてネットワーク越しに操作できるようにするツールです。キャビネット(内閣)を傀儡にするタイラント(僭主)ということで名付けました。ダウンロードはこちら。 TCは高性能なDBMで、マルチスレッドモデルで高い並列性を実現していますが、逆にマルチプロセスモデルだとファイルロックがかかるので並列性が低くなってしまいます。つまり、書き込みモードでデータベースにアクセスしているプロセスがいると、その間は他のプロセスがデータベースに接続しようとするとブロックされることになります。
どうぶつの森にハマって、たぬきち商店が早終いする関係で退勤時間もめっさ早くなったmikioです。今回は、Tokyo TyrantのキャッシュとLua拡張を使って超お手軽にリアルタイム検索システムを作る方法について述べます。 ユースケース 高い頻度で更新されるWeb上のテキストをリアルタイムに検索したいと思ったことはありませんか? mixi日記や各種のブログサービスやRSSリーダなどで扱う大量のコンテンツを安価かつ簡単に検索したいと思ったことはありませんか? 私は結構あります。要件を箇条書きすると以下のような感じでしょうか。 最新データの合計100万件くらいを検索できればよく、古いデータは自動的に消えてほしい。 ただし、更新はリアルタイムにして、書いた瞬間に検索結果に反映されてほしい。 サーバ1台で更新1000qpsおよび検索100qpsは処理したい。 再現率よりも精度とリアルタイム性を重視
OpenSocialとかC++0xとか世の中の流れが早すぎて、いろいろと勉強しなきゃなと焦りつつも、ついついピクミン2にはまってしまうmikioです。今回はTokyo Tyrant(TT)を使ってユーザ独自のストレージシステムを簡単に構築する方法について説明します。 プラグインとは オブジェクト指向プログラミングに慣れた人にとっては、インターフェイスと実装を分離することによってプログラムの拡張性や保守性を向上させる技法(データ抽象)は常識ですよね。その考えをさらに進めると、インターフェイスのみをプログラムに記述しておいて、具体的な実装は実行時に割り当てるという、いわゆるプラグイン(plug-in)という技法に至ります。プラグインでカスタマイズできる能力をプラガブル(pluggable)などと言ったりもします。 例えばTokyo Cabinet(TC)では、レコードの挿入、削除、参照といった
皆さんopenpearしてますか! 最近、インフルエンザの予防接種を受けたKeitaです。 ずいぶん前にですが、PHPからTokyoTyrantをネイティブに操作するライブラリをopenpearにてリリースしたので、簡単に紹介したいと思います。 Net_TokyoTyrantとは? PurePHPで書かれた、TokyoTyrantのネイティブなインターフェースを叩くライブラリです。 memcache互換のインターフェースなどとは違い、TokyoTyrantのLUA拡張などTokyoTyrant本来の機能をほぼすべて使えるというのが特徴です。 インストール PEARライブラリとして公開されているので非常に簡単にインストール可能です。 openpearのチャンネルを追加します。 pear channel-discover openpear.org PEARコマンドでインストールを
連休中はWiiのマリオカートをやりまくってやっとVR7000越えたmikioです。愛車はマッハ・バイクとインターセプターです。さて今回は、分散ハッシュデータベースサーバTokyo Tyrantでmixiの最終ログイン時刻を管理するようにした時の苦労話を書きます。 ログイン処理は負荷地獄 mixiでは、全てのユーザについて、各々の最終ログイン時刻を管理しています。「マイミクシィ一覧」や「お気に入り」などの画面で、友人が近い時間にログインしていてコミュニケーションがとりやすい状態にあるかどうか確認できるようにするためです。 mixiのほぼ全てのページはログインしないと見られないページなので、ほぼ全てのページにアクセスされるたびにログイン確認が行われます。したがって、最終ログイン時刻はほぼ全てのページにアクセスされる度に更新されることになります。mixiの中で最も重いデータベースのひとつとして「
インストール TokyoCabinet % wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.3.27.tar.gz % tar zxvf tokyocabinet-1.3.27.tar.gz % cd tokyocabinet-1.3.27 % ./configure --prefix=/usr/local % make % make check % sudo make install TokyoCabinet Ruby API % wget http://tokyocabinet.sourceforge.net/rubypkg/tokyocabinet-ruby-1.18.tar.gz % tar zxvf tokyocabinet-ruby-1.18.tar.gz % cd tokyocabinet-ruby-1.18 %
郵便番号を tokyo-tyrant にいれてみた 郵便番号データをそのまま tokyo-tyrant にいれ、取り出してみた。 次の順でコードを示そう。 1. 郵便番号の格納 (ruby で) 2. ruby, jruby で 値をとりだす。 1. 郵便番号の格納 (ruby で) ===================== - http://www.tuyudaku.net/sqlite/import.html > SQLite - CSVファイルのインポート を参考にして utf8 にした csv ファイルを取り出す。 そのあと、 ruby で行単位に tokyo-tyrant に登録する $ cat tt-zip.rb Start server: # sudo /usr/local/sbin/ttserver start $KCODE = 'utf8' require 'rub
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く