[groonga-dev,01221] [ANN] groonga 3.0.1

Back to archive index

HAYASHI Kentaro hayas****@clear*****
2013年 2月 28日 (木) 10:24:40 JST


林です。


2/9に3.0.0をリリースしたばかりなのに!と思われるかも知れませんが、
今月末は29日がないので、28日にリリースすることにしました。

まずはじめに、利用事例の記事を書いてくれる人募集のお知らせです。

  これまでも、groonga.orgにて利用事例 http://groonga.org/ja/users/ を
  紹介してきましたが、それとは別に、 http://gihyo.jp/ にgroonga関連の記事を書く
  という取り組みもはじめようかと検討しています。
  まだgroongaを知らない人にもWeb記事を通じて知ってもらいたいというのが動機です。
  (似たような動機で、毎週木曜にQiitaでのgroonga関連の情報提供もはじめました!)

    http://qiita.com/users/groonga

  詳細は「groonga普及のための協力のお願い」を参照していただきたいと思いますが、
  実際に使っているユーザーのみなさんに利用事例を書いてもらえたらいいなぁと思っています!

    http://sourceforge.jp/projects/groonga/lists/archive/dev/2013-February/001186.html

  すでに何名かの方から応募いただいていますが、まだまだ募集中です!!

groonga 3.0.1をリリースしました!
  http://groonga.org/ja/docs/news.html#release-3-0-1

それぞれの環境毎のインストール方法はこちらを見てください。
  http://groonga.org/ja/docs/install.html

今回のリリースではデータベースのファイル形式は互換性があるのでデータベースを作りなおす必要はありません。

今月2/9に肉の日記念でメジャーバージョンアップデートしたばかりなので、
直接ユーザさんに影響するような大きな変更は入っていませんが、
3.0.0には間に合わなかった不具合修正などが入っています。

今回のリリースの主なトピックは2つあります。

* loadコマンドによりBoolであっても参照カラムに設定可能
* ネストしたインデックスに対してもAND検索可能に 

○ loadコマンドによりBoolであっても参照カラムに設定可能

これまで、loadコマンドでテーブルにレコードを追加する場合に
参照カラムがBool型のキーのテーブルを参照していると、
値を正しく設定することができませんでした。

例えば以下のようなスキーマとデータを投入してみます。

  table_create Bools TABLE_HASH_KEY Bool

  table_create  Entries           TABLE_HASH_KEY ShortText
  column_create Entries published COLUMN_SCALAR  Bools

  load --table Entries
  [
  {"_key": "Special news!",  "published": true},
  {"_key": "Supprise news!", "published": false}
  ]

投入した結果確認するためにselect Entriesを実行すると以下のようになります。

  [
    [
      [2],
      [
        ["_id","UInt32"],
        ["_key","ShortText"],
        ["published","Bools"]
      ],
      [1,"Special news!",false],
      [2,"Supprise news!",false]
    ]
  ]

loadしたはずの値が設定されていないことがわかります。

Boolsテーブルの内容を確認すると実際に値が設定されていないことがわかります。

  [
    [
      [0],
      [
        ["_id","UInt32"],
        ["_key","Bool"]
      ]
    ]
  ]

これが、今回のリリースで修正され、loadコマンドでBool型のキーのテーブルを参照している
参照カラムに対しても正しく機能するようになりました。

select Entriesを実行すると以下の結果が返ってきます。

  [
    [
      [2],
      [
        ["_id","UInt32"],
        ["_key","ShortText"],
        ["published","Bools"]
      ],
      [1,"Special news!",true],
      [2,"Supprise news!",false]
    ]
  ]

select Boolsを実行すると参照カラムで指定した値が設定されていることがわかります。

  [
    [
      [0],
      [
        ["_id","UInt32"],
        ["_key","Bool"]
      ],
      [1,true],
      [2,false]
    ]
  ]

○ ネストしたインデックスに対してもAND検索可能に

今回のリリースでは、ネストしたインデックスに対してもAND検索が可能になりました。

どんな風になったかをサンプルで示します。

以下は例で使うスキーマとデータです。

  table_create Users TABLE_PAT_KEY ShortText
  column_create Users birthday COLUMN_SCALAR Time

  table_create Files TABLE_PAT_KEY ShortText
  column_create Files owner COLUMN_SCALAR Users

  column_create Users files_owner_index COLUMN_INDEX Files owner

  table_create Birthdays TABLE_PAT_KEY Time
  column_create Birthdays users_birthday COLUMN_INDEX Users birthday

  load --table Users
  [
  {"_key": "Alice",  "birthday": "1992-02-09 00:00:00"},
  {"_key": "Bob",    "birthday": "1988-01-04 00:00:00"},
  {"_key": "Carlos", "birthday": "1982-12-29 00:00:00"}
  ]

  load --table Files
  [
  {"_key": "/home/alice/.zshrc",                  "owner": "Alice"},
  {"_key": "/home/bob/.bashrc",                   "owner": "Bob"},
  {"_key": "/home/calros/public_html/index.html", "owner": "Carlos"}
  ]

ファイルの所有者の誕生日に応じて特定のファイルを絞り込む場合を考えてみます。
カラムインデックスを張ってあるので、FilesテーブルとUsersテーブルはネストした
インデックスとして関連付けられているので、以下のようなクエリで
絞り込むことができると思うかも知れません。3.0.0で実行すると以下の結果になります。

  select Files \
  --filter 'owner.birthday >= "1988-01-04 00:00:00" && owner.birthday < "1992-02-09 00:00:00"' \
  --output_columns '_key, owner, owner.birthday'

  [
    [
      [2],
      [
        ["_key","ShortText"],
        ["owner","Users"],
        ["owner.birthday","Time"]
      ],
      ["/home/bob/.bashrc","Bob",568220400.0],
      ["/home/alice/.zshrc","Alice",697561200.0]
    ]
  ]

この結果をみると、最初の条件のみで検索していて、&&以降の条件はまったく無視されている
ように見えます。(Bobがヒットしているのは正しいが、Aliceは対象外になっていないといけない)

これは従来AND検索はできず、最初の条件のみ評価されてしまっていたのが原因です。

今回のリリースではAND検索が可能になったので、きちんと絞り込むことができるようになりました。

  [
    [
      [1],
      [
        ["_key","ShortText"],
        ["owner","Users"],
        ["owner.birthday","Time"]
      ],
      ["/home/bob/.bashrc","Bob",568220400.0]
    ]
  ]

 && owner.birthday < "1992-02-09 00:00:00" 部分もきちんと適用して
結果を絞り込んでいることがわかります。

○ 変更点

さて、3.0.0からの変更点は以下の通りです。
  http://groonga.org/ja/docs/news.html#release-3-0-1

3.0.1リリース - 2013/02/28
--------------------------

修正


    * loadコマンドでデータをロードするときに参照カラムに対するBoolの設定をサポートしました。
    * ネストしたインデックスに対してAND検索できるようになりました。
      この変更で、"COLUMN1.COLUMN2 >= 1 && COLUMN1.COLUMN2 <=3"という検索ができるようになります。
      ただし、"1 <= COLUMN1.COLUMN2" という表記はまだサポートしていません。
      これを指定すると、"COLUMN1.COLUMN2 <= 1"とみなします。
    * インデックスの張られていない要素に対するソートをサポートしました。
      この変更は --sortby geo_distance(...) のようにインデックス化されていない要素を
      ソートしようとしたときに結果が抜け落ちてしてしまう場合に影響します。
    * 参照カラムの範囲検索をインデックスを使って検索できるようにした。
      この変更でTABLE_PAT_KEYやTABLE_DAT_KEYを使ったネストしたインデックスの
      _key に対しても範囲検索できるようになった。
    * [rpm][centos] MeCab 0.995をサポート。
    * [doc] column_rename や truncate コマンドのドキュメントを追加。

修正

    * grn_index_cursor_next() が意図せずNULLを返す不具合を修正しました。
      このせいで要素を削除した後に不正なインデックスを返していました。
      この不具合はmroongaをストレージモードで動かしたときに発生します。 [groonga-dev,01192] [b senbokuさんが報告]
    * geo_distance() をインデックスを使ってソートしようとするときに落ちる不具合を修正しました。
      この不具合は見付けたレコードのカウントが正しくないことで発生します。
    * [httpd] データベースのオーナー/グループのデフォルト設定がgroongaとなっている箇所を有効にしました。

感謝

    b senbokuさん

-- 
HAYASHI Kentaro <hayas****@clear*****>




groonga-dev メーリングリストの案内
Back to archive index