主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

データベース再考(GoogleAppEngine データストア)

                
tags:
 GoogleAppEngineでデータ保管に使われるデータストア。いわゆるデータベースなんだけど、リレーショナルでなくノンリレーショナル。近年FacebookやTwitter、日本ではmixiで使われていて普及してきたNoSQLというやつ。有名なNoSQLデータベースだとカサンドラなんてのがある。『北斗の拳』を読んでいた僕は、カサンドラと聞いたら『ウイグル獄長』を思い出すんだけども。

 さて、このNoSQLであるGoogleAppEngineのデータストアの特徴とちょっとした使い方をまとめておく。

 まずなんといっても知りたいのはメリットだ。実はGoogleAppEngineでは試験的にMySQLが提供されている。このポピュラーなMySQLを差し置いてデータストアを使う理由はなんだろか。データストアなら、検索結果が100エンティティ(いわゆるレコード)になるクエリならば、あとは検索対象のエンティティ数が膨大になろうともパフォーマンスが落ちないと。

 デメリットは上記の裏返しで、上記のことを達成するためにクエリ機能を多少絞っていることだ。複数のエンティティのプロパティ(いわゆるカラムの値)に不等号フィルタをかけられないとか、like検索がないといったところだろう。つまりキーワード検索を行いたければ、基本的に完全一致を使わねばならない。

 like検索がないのはちょっと不便かもしれないと思ったが、ListPropertyを使えばその問題もある程度解消できる。データストアはレコードの値としてPythonのリストオブジェクトを保存できる。このリストが以下だったとする。
["Albert Camus", "Hermann Hesse", "Dosetoevsky"]
これがauthorというカラムに入っていたとすると以下のクエリでこのカラムを持つレコードを返せる。
"SELECT * WHERE author = 'Hermann Hesse'"
これをより実用的にするために、キーワードをより分割すればいい。
["Albert", "Camus", "Hermann", "Hesse", "Dosetoevsky"]
これで"Hesse"をキーワードにしてもレコードを取得できる。つまり、キーワード検索を使いたければ、キーワードをインデックス化しておけばいいわけだ。

 英語をはじめとした欧州の言葉の単語はスペースで区切られる。これはインデックスを作るにはとても明瞭で素晴らしい。この点、日本語は不便だ。このために『形態素解析』を導入しなければならない。ただこれを導入してListPropertyをうまく使いこなせれば、データストアも案外不便ではなくなってくる。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。