BloGroonga

2014-12-29

Groonga 4.0.9リリース

今日は今年最後の肉の日ですね!Groonga 4.0.9 をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

今回の主な変更点は次の通りです。

  • 非互換な変更
    • データベースのパーミッションが 0666 から 0644 に変わる
  • 改良
  • 実験的な改良
  • バグ修正
    • インデックスを張った値を一気に削除するとクラッシュするようになることがあるバグを修正

今回は非互換の変更が1つあります。多くの人にとって問題はない変更なはずですが、念のため、アップグレード前に確認してください。

クラッシュバグの修正もあります。インデックスを張った値を一気に削除するとクラッシュするようになる、という方はアップグレードしてみてください。

他にも、groonga-httpdが実験的機能扱いではなく正式機能扱いになっています。これは、安定して動いているという報告をいくつかもらったためです。

それでは、いくつか簡単に紹介します。

非互換な変更 - データベースのパーミッションが 0666 から 0644 に変わる

umask0 の状態でGroongaを使っている時、新しく作成するファイルのパーミッションが 0666 (誰でも読み書きできる)から 0644 (ファイルのオーナーだけが読み書きできて他の人は読み込みだけできる)に変わりました。

groonga コマンドをサーバーとして使っている人はこの変更の影響はありません。

groonga-httpd をデーモンモードで使っている人はこの変更の影響があります。これまでは groonga-httpd が作成したデータベースは誰でも書きこめましたが、このバージョンからはオーナーしか書き込めなくなります。

セキュリティーのことを考えると変更後の挙動の方が適切なため、非互換になりますがこの変更をいれました。

改良 - TokenFilterStemがMySQL互換ノーマライザーと一緒に使えるようになった

これまでの TokenFilterStem はすべて小文字に正規化されたトークンにしか対応していませんでした。今回からすべて大文字に正規化されたトークンにも対応しました。

これで何がうれしいかというと、MySQL互換ノーマライザーでも使えるようになることがうれしいのです。Groongaが標準で提供しているノーマライザーは小文字に正規化しますが、MySQL互換ノーマライザーは大文字に正規化するのです。

この改良により、MySQLでも TokenFilterStem を使えるようになりました。

MySQLでの TokenFilterStem の使い方はMroongaでGroongaの機能を使いこなす高度なテーブル設計をする方法 - CreateField Blogを参考にしてください。

改良 - truncateコマンドがカラムに対応した

これまでは truncate コマンドはテーブル単位でしか指定できなかったのですが、このバージョンからカラム単位で指定できるようになりました。特定のカラムが壊れたときにそのカラムだけ作りなおすことができます。

カラムが壊れているかどうやったら判断できるのか?と思ったことでしょう。そのために、後述する grndb 実行ファイルが追加されています。

改良 - clearlockコマンドがlock_clearコマンドになった

clearlock コマンドが lock_clear コマンドに名前を変えました。これまで通り clearlock コマンドも使えますが、非推奨です。新しく使うときは lock_clear を使ってください。

どうして名前を変えたかというと名前付けの一貫性のためです。

Groongaのコマンドは #{カテゴリー}_#{操作} という名前付けになっています。例えば、 table_createtable カテゴリーの create という操作です。

実験的な改良 - grndb実行ファイルを追加

実験的な機能として、Groongaのデータベースを管理する機能を提供する grndb 実行ファイルを追加しました。

現在のところ、 grndb は次の機能を提供しています。

  • データベースが壊れているかチェックして報告する機能
  • 壊れたデータベースを復旧する機能

例えば、データベースが壊れているかどうかをチェックするには次のようにします。

% grndb check /path/to/db

壊れていれば壊れているテーブルやカラムを報告し、0以外の終了ステータスで終了します。

データベースを復旧する場合は次のようにします。

% grndb recover /path/to/db

復旧できたあるいは復旧する必要がなかったら終了ステータス0で終了します。復旧できなかった場合は0以外の終了ステータスで終了します。

現在のところ、インデックスカラムが壊れているだけの場合のみ復旧できます。この場合はインデックスを作成しなおして復旧します。

なお、 grndb を使う場合は他のプロセスでは同じデータベースを触らないようにしてください。データベースが壊れる可能性があります。詳細はgrndbのドキュメントを参考にしてください。

実験的な改良 - request_cancelコマンドを追加

request_cancel コマンドは、実行中のリクエストを途中で止めるコマンドです。例えば、重いクエリーを実行しているリクエストを止めるために使えます。

request_cancel コマンドにはいくつか制限事項があります。例えば、次のような制限事項です。

  • マルチスレッドで1つのデータベースを共有して使っている
  • キャンセルしたらすぐに止まるわけではない

詳細はrequest_cancelのドキュメントを確認してください。

バグ修正 - インデックスを張った値を一気に削除するとクラッシュするようになることがあるバグを修正

インデックス更新時の処理に考慮漏れのケースがあったため修正しました。これは大量のレコードを一気に削除すると発生しやすくなります。インデックスを張った値を一気に削除するとクラッシュするようになる、という方はアップグレードしてみてください。

お願い

福岡市近辺のGroongaユーザーとWindows上でGroongaを使っているユーザーにお願いがあります。

まずは福岡市近辺のGroongaユーザーへのお願いです。

2015年1月23日(金)の夜に福岡市でGroongaイベントを開催してもらえませんか?理由はGroonga開発者の1人がその日に福岡市に行くからです。詳細を確認の上、開催してくれる人はメーリングリストまたは@groongaに連絡をおねがいします。

次にWindows上でGroongaを使っているユーザーへのお願いです。

Windows版Groongaのストレージ使用効率向上の変更をテストしてもらえませんか?詳細を確認の上、確認結果をメーリングリストまたは@groongaに報告してください。

Windows版の改善にご協力よろしくお願いします!

さいごに

4.0.8からの詳細な変更点は 4.0.9リリース 2014-12-29 を確認してください。

今年はGroongaでガンガン検索できましたか?来年もGroongaでガンガン検索してください!