ActiveGroongaを使ってみる (2)
今関わっている某プロジェクトでGroongaを採用したいと思って、色々と読んだりいじったりしています。
Railsアプリケーションに組み込みたいと思っているので、ActiveGroongaを使うのがよさそうだと思って試し始めたのですが、リファレンスがまだComing soonでわからないところがたくさんあったりするので、コードを読みながらちまちまと進めていることをまとめておくことにしました。
この検証では Rails 4.1.5 を使っています。別バージョンだとこの方法では動かないかもしれませんのであしからず。
今回はマイグレーションについて書いています。
ということで色々なデータ型のカラムを追加してみました。
Groonga関連のRakeタスクは、普段データベース操作に利用する
以前 groonga インタプリタは出力が一行にまとまっていて見づらいとぼやいていた時に教えていただいた、jq にパイプする方法を使って出力を整形しています。
Railsアプリケーションに組み込みたいと思っているので、ActiveGroongaを使うのがよさそうだと思って試し始めたのですが、リファレンスがまだComing soonでわからないところがたくさんあったりするので、コードを読みながらちまちまと進めていることをまとめておくことにしました。
この検証では Rails 4.1.5 を使っています。別バージョンだとこの方法では動かないかもしれませんのであしからず。
今回はマイグレーションについて書いています。
マイグレーションスクリプトの定義
前回 の手順でSampleモデルを生成すると、db/groonga/migrate ディレクトリにマイグレーションスクリプトが生成されます。class CreateSamples < ActiveGroonga::Migration
def up
create_table(:samples) do |table|
table.timestamps
end
end
def down
remove_table(:samples)
end
end
create_tableの中の書き方(何メソッドを呼べばいいのか)がわからなかったのでGitHubの ActiveGroonga と Rroonga の中身を調べたところ、create_table のブロックの引数に渡される table には、Groonga::Schema::TableDefinition のインスタンスが入っている事が判明。Groonga::Schema::TableDefinitionのメソッド を呼び出してテーブルのスキーマを定義できるようです。ということで色々なデータ型のカラムを追加してみました。
class CreateSamples < ActiveGroonga::Migration
def up
create_table(:samples) do |table|
table.boolean :c01
table.integer8 :c02
table.unsigned_integer8 :c03
table.integer16 :c04
table.unsigned_integer16 :c05
table.integer32 :c06
table.unsigned_integer32 :c07
table.integer64 :c08
table.unsigned_integer64 :c09
table.float :c10
table.time :c11
table.short_text :c12
table.text :c13
table.long_text :c14
table.tokyo_geo_point :c15
table.wgs84_geo_point :c16
table.timestamps
end
end
def down
remove_table(:samples)
end
end
マイグレーションスクリプトの実行
マイグレーションスクリプトが定義できたので、実行してDBに反映してみます。Groonga関連のRakeタスクは、普段データベース操作に利用する
db:*
タスクのプレフィックスを groonga:
に変えたものになっています。マイグレーションスクリプトは groonga:migrate
で実行できます。bin/rake groonga:migarte
元に戻したい時はbin/rake groonga:rollback
でロールバックできます。テーブルスキーマの確認
マイグレーションスクリプトの内容が正しく反映されているか確認してみます。以前 groonga インタプリタは出力が一行にまとまっていて見づらいとぼやいていた時に教えていただいた、jq にパイプする方法を使って出力を整形しています。
@shoutakenaka ここが参考になると思います! http://t.co/WiLoFQqsLh ここには書いていませんが、 groonga select | jq .とかできるので、jq http://t.co/PS5jyyHTDq も便利です!
— Groonga (@groonga) September 2, 2014
$ groonga db/groonga/development/db select --table samples | jq .
[
[
0,
1411969873.28279,
0.0023350715637207
],
[
[
[
0
],
[
[
"_id",
"UInt32"
],
[
"c01",
"Bool"
],
[
"c02",
"Int8"
],
[
"c03",
"UInt8"
],
[
"c04",
"Int16"
],
[
"c05",
"UInt16"
],
[
"c06",
"Int32"
],
[
"c07",
"UInt32"
],
[
"c08",
"Int64"
],
[
"c09",
"UInt64"
],
[
"c10",
"Float"
],
[
"c11",
"Time"
],
[
"c12",
"ShortText"
],
[
"c13",
"Text"
],
[
"c14",
"LongText"
],
[
"c15",
"TokyoGeoPoint"
],
[
"c16",
"WGS84GeoPoint"
],
[
"created_at",
"Time"
],
[
"updated_at",
"Time"
]
]
]
]
]
マイグレーションスクリプトの内容がちゃんと反映されてますね :D
Comments
Post a Comment