#スキーマ設計をやってみる
スキーマ設計とは
良い感じに検索できるようにtableとcloumnを定義する事
スキーマ設計手順
1.まずは何が返ってきて欲しいかを決める
記事、コメント、電子書籍など
2.何で検索したいかを決める
記事、コメントなど
3.返ってきて欲しいもののtableを作る
電子書籍ならBooks
記事ならPosts
など
4.検索したいものをcolumnにする
書籍ならtitle
著者ならauthor
など
例題の設計
例題
ユーザーが広告を検索するケースを想定
広告データの情報:ID,名前、説明、画像など
1.まずは何が返ってきて欲しいかを決める
広告のリストが返ってきて欲しい
2.何で検索したいかを決める
広告名と説明
3.返ってきて欲しいもののtableを作る
広告なのでAdsというtableを作成する
テーブルの選び方
Groongaにはテーブルがいくつかある
どのテーブルもID=レコードを識別する番号を持っている
- ハッシュテーブル:キーがある
- パトリシアトライ:キーがある
- ダブルアレイトライ:キーがある
- 配列(アレイ):キーはないがIDは持っている
→削除するとIDは使いまわされるので注意
後から消さないなら配列、後から消すならキーがあるものを選択する事。
テーブルについての資料
http://groonga.org/ja/docs/reference/tables.html
4.検索したいものをcolumnにする
まず説明で検索できるように
descというcolumnを作成する
カラムの種類
スカラー:単体の値、今回説明は一個しかないのでこちらを使う
ベクター[配列]:タグなど複数の値の場合に利用する
例題を実際に検索してみる
※下記などを参考にGroongaがインストールされている事。
http://groonga.org/ja/docs/install/mac_os_x.html#homebrew
1. テーブル作成とカラム作成
create.txt
table_create --name Advs --flags TABLE_HASH_KEY --key_type UInt32
column_create --table Advs --name desc --flags COLUMN_SCALAR --type Text
- type:テーブルの型など
- Groongaのコマンドのルールは上記のように
「操作対象 操作」となっている - マニュアルhttp://groonga.org/ja/docs/reference/commands/table_create.html
- マニュアル[]がついているものは省略可能なもの
$ groonga -n ./advs.db < create.txt
2. データをロード
load.txt
load --table Advs
[
{"_key": 1, "desc":"美味しいピザ" },
{"_key": 2, "desc":"美味しいピザ2" },
{"_key": 3, "desc":"美味しいピザ3" },
{"_key": 4, "desc":"美味しいピザ4" },
]
$ groonga advs.db < load.txt
3. 確認
$ groonga advs.db dump
table_create Advs TABLE_HASH_KEY UInt32
column_create Advs desc COLUMN_SCALAR Text
load --table Advs
[
["_key","desc"],
[1,"美味しいピザ"],
[2,"美味しいピザ2"],
[3,"美味しいピザ3"],
[4,"美味しいピザ4"]
4. 検索
$ groonga advs.db select --table Advs --query desc:@ピザ3
[[0,1444999444.82913,0.00431203842163086],[[[1],[["_id","UInt32"],["_key","UInt32"],["desc","Text"]],[3,3,"美味しいピザ3"]]]]
その他メモ
- idはどのテーブルもUint32
- 広告の情報とは別に出しても良いテーブルがある場合
→出しても良いものだけをテーブルに入れる形が高速、n件取得したいなどの要件を満たせる。