ThriftDBを試してみました

こんばんは。笹亀です。

最近、運動も兼ねて近くのバッティングセンターへ通うことを心がけています。
野球はあまりやったことないですが、120kmくらいでしたらストレートのみですが、
ボールに当てることはできました。結構な打ち込みをするので、2日間くらい筋肉痛がひどいです。

さて、本日は先日にWebサイトをまわっていると気になる記事を見つけました。
「ThriftDB」というプラットフォームです。簡単に説明するとNoSQLを使った全文検索ができるプラットフォームです。現在のところ提供方法はAPIのみの提供となっておりますが、アプリケーションなどに容易に組み込めることを売りにしております
。今後はオープンソースで公開する予定になっており、それぞれのサーバへも簡単に設置して内部で動かすこともできるようなるではないでしょうか。ものすごく気になったので早速使ってみましたので、使用方法などを解説させていただきます。

注意:英語サイトしか、なので頑張って読みましょう。
専用のサイトは下記になります。
http://www.thriftdb.com/

1.まずはβ用のアカウントを登録しましょう
https://www.thriftdb.com/beta/request

2.登録したメールアドレスにβアカウント作成用のURLが記載されているのでクリックしてアカウントを作成しましょう
こんなメールが送られてくる


Thanks for requesting a ThriftDB beta account. Click on this link to create your new account:
--URL--
Have fun and let us know what you think!
Thanks,
The ThriftDB Team

3.アカウントを作成できたらBucketを作成する(test_bucketを作成)
バケットを作成するのはAPIを使用したいサーバでcurlを使用してアクセスをする必要があります。
また作成したアカウント情報を使用して、作成をする必要があります


curl -X PUT "http://{username}:{password}@api.thriftdb.com/test_bucket"

成功すると下記のようなレスポンスを返します

4.Collectionに使用する定義ファイルを作成する
ドキュメントに記載があるので、こちらを参考に作成を試みる


{
    "__class__": "StructSchema",
    "make": {
        "__class__"    : "AttributeDescriptor",
        "thrift_index" : 1,
        "datatype"     : {"__class__": "StringType"}
    },
    "model": {
        "__class__"    : "AttributeDescriptor",
        "thrift_index" : 2,
        "datatype"     : {"__class__": "StringType"}
    },
    "year": {
        "__class__"    : "AttributeDescriptor",
        "thrift_index" : 3,
        "datatype"     : {"__class__": "IntegerType"}
    },
    "description": {
        "__class__"    : "AttributeDescriptor",
        "thrift_index" : 4,
        "datatype"     : {"__class__": "TextType"}
    },
    "color": {
        "__class__"    : "AttributeDescriptor",
        "thrift_index" : 5,
        "datatype"     : {"__class__": "StringType"}
    }
}

適当な名前を付けて保存する(car-schema.json)

5.Collectionを作成するコマンドを作成したスキーマを実行する


curl -d @car-schema.json -X PUT "http://{username}:{password}@api.thriftdb.com/test_bucket/cars"

成功すると下記のようなレスポンスを返します

6.次にデータのitemを追加するための定義ファイルを作成します。
ドキュメントに記載があるので、こちらを参考に作成を試みる
一つだけだとあまり楽しくないので「car1, car2, car3」までのデータを作ってみます。

cars_1.json


{
    "make": "ホンダ",
    "model": "ODYSSEY",
    "year": 1994,
    "description": "オデッセイ(Odyssey)は、本田技研工業が生産・発売するミニバン型の乗用車である。",
    "color": "black"
}

cars_2.json


{
    "make": "トヨタ",
    "model": "PRIUS",
    "year": 1997,
    "description": "プリウス(Prius)は、トヨタ自動車が1997年に製造・発売を開始した世界初の量産ハイブリッド専用車である。現在、世界44ヶ国で販売されていて、車名はどの国においてもプリウスを名乗る。",
    "color": "white"
}

cars_3.json


{
    "make": "ニッサン",
    "model": "SERENA",
    "year": 1991,
    "description": "セレナ (SERENA) は、日産自動車が販売するミニバン。初代には商用モデルの「カーゴ」もあった。C25型は日産車体が製造を担当していたが、C26型では日産自動車九州工場で製造を担当する。なお、C25型以降は「ランディ」としてスズキへOEM供給されている。",
    "color": "black"
}

7.itemを作成するコマンドを作成したスキーマを実行する
curl -d @cars_1.json -X PUT "http://{username}:{password}@api.thriftdb.com/test_bucket/cars/1"
curl -d @cars_2.json -X PUT "http://{username}:{password}@api.thriftdb.com/test_bucket/cars/2"
curl -d @cars_3.json -X PUT "http://{username}:{password}@api.thriftdb.com/test_bucket/cars/3"

成功すると下記のようなレスポンスを返します

8.serachAPIを利用して登録されたitemを検索してみる
ドキュメントに記載があるので、こちらを参考に検索を試みる
いろいろなパターンで検索がかけれるようですが、ここでは基本の全体からの検索を例にします。

http://{username}:{password}@api.thriftdb.com/test_bucket/cars/_search?q=販売
 ※複数件の結果が返る文字列にします

簡単なPHPを作成してAPI経由でアクセスして検索処理をします。
JSON形式で結果が返ってくるのでPHPの関数(json_decode)でデコードします。


$result = file_get_contents('http://{username}:{password}@api.thriftdb.com/test_bucket/cars/_search?q=%E8%B2%A9%E5%A3%B2');
print_r(json_decode($result));

実行結果

ここまでの処理で一通りの作業は完了です。まだどのくらいのレスポンスで本当に高速なのかは試せていませんが、βからリリースされたときにはレスポンスの検証なども実際にできると思います。更に自サーバ上に簡単に設置ができるようになったら、頻繁に使われるものになるのではないかと期待しております。

今後の動向も追っていきたいとおもっております。

またこのブログは、TechCrunch様の記事を参考にさせていただきました。
 http://jp.techcrunch.com/archives/20110524thriftdb-wants-to-be-the-amazon-web-services-of-search/