ActiveGroongaを使ってみる (2)

今関わっている某プロジェクトでGroongaを採用したいと思って、色々と読んだりいじったりしています。
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の ActiveGroongaRroonga の中身を調べたところ、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 にパイプする方法を使って出力を整形しています。

$ 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

Popular posts from this blog

TFS: 別PCでのチェックアウトを取り消す

WPF の RichTextBox に文字列を設定する&取り出す

WPFアプリにアニメーションGIFを表示させる