Groonga

Groonga用のMariaDBのutf8mb4_uca1400照合順序互換ノーマライザー

Mroongaの開発をしている須藤です。MroongaはMySQL/MariaDB/Percona Serverからいい感じにGroongaを使えるようにするストレージエンジンです。Groongaは全文検索エンジンなので、MySQL/MariaDB/Percona Serverだけで(ゼロETLで!っていうとナウいんでしょ!?)Elasticsearchとかなしにいい感じに高速高機能全文検索機能を実現できます。

そんなMroongaは10年くらい前からMariaDBにバンドルされています。MySQL・MariaDB作者のMontyさんがなんかの日本のイベントに来ていたときになんか話して「バンドルするか!」みたいな流れになったような気もするし、それとは別のところでなんやかんやしたような気もして、よく覚えていないのですが、バンドルされています。

なんだろう、思い出せないーと思ってインターネットを漁ってみたら、2014年のMyNA会で使った「MariaDBにバンドルされていないMroonga」になんか関連情報がありますね。歴史に興味がある人は眺めてみてね。

まぁ、そんなMroongaですが、MariaDBにバンドルされているMroongaの更新が大変で全然更新できていません。でも、それはまずいよねぇということでまた数年ぶりにチャレンジしています。で、今回はMroongaのコピーをMariaDBに入れるんじゃなくて、git submoduleでMroongaを入れようとしています。コピーだと、MariaDBが持っているMroongaの方にだけ最新MariaDBの対応が入って、本家のMroongaでは気づかずに「あれー新しいMariaDBでビルドできなくなってるー」みたいなことになるからです。

だいぶ前置きが長くなりましたが、MariaDBにバンドルするMroongaを更新するために、最新のMariaDBでも動くようにする作業をしています。

もっと読む

GroongaでApache Arrowフォーマットを使ってみるよ!

Apache Arrow東京ミートアップ2025に参加予定の阿部です。

GroongaはApache Arrowフォーマットでのデータロードと検索結果の取得に対応しています。 今回は実際にそれを使ってみる企画です。

Apache Arrowフォーマットのデータを作るところからやってみます。 次の流れで進めていきます。

  1. Apache Arrowフォーマットのデータを作る
  2. GroongaにApache Arrowフォーマットでデータをロードする
  3. Groongaで検索してApache Arrowフォーマットでデータを得る

もっと読む

Roaring bitmapsでビットより大きい情報を表現する方法

Groongaの結果セットにRoaring bitmapsを使えないか検討している須藤です。

以前、ClickHouseみたいにポスティングリストにRoaring bitmapsを使えないか検証しましたが、既存のPForDeltaの方がよかったのでやめました。しかし、結果セットには使えるかも?とは思っていました。ただ、Groongaの結果セットは「ヒットしたレコードはどれか」というビットで表現できる情報だけではなく、「ヒットしてレコードはどれで、それらのスコアはそれぞれいくつか」という「ヒットしたか」(ビットで表現できる)+「スコア」(64bit浮動小数点数で、ビットでは表現できない)というビットでは表現できない情報が必要です。そのため、使えるかも?とは思いつつ、じゃあどうやって?がわからずにそのままになっていました。

この間、なんとなくまたどうにかできないか調べてみたら、Roaring bitmapsのGo実装にはそれを実現する方法が含まれていることを見つけたので紹介します。まだGroongaでは検証していないので、Groongaで使いものになるかどうかはわかりません。

もっと読む

PGroongaの並列インデックス構築の並列度を最大にする方法

PGroongaのメンテナンスもしている堀本です。

PGroongaは4.0.0からPostgreSQL 17以降を使っている場合に限り、複数のCPUコアを活用してインデックスの構築を並列で実行できます。 (PostgreSQL 17より前のバージョンでは動作しないので注意してください。) 並列に実行するため、インデックス構築速度の高速化が期待できますが、場合によっては思ったほど高速にならない可能性もあります。

今回は、PGroonga 4.0.0を使ってもあまりインデックス構築が高速にならない人向けの記事です。

もっと読む

2025年のGroonga族の肉の日メジャーリリース!

Groongaの開発に参加している須藤です。今年も年に一度の肉の日(2月9日のこと)が来ましたね!例年通り、GroongaとMroongaはメジャーバージョンアップしました!今年はついでにPGroongaもメジャーバージョンアップしました!この一年でどのくらいGroonga・Mroonga・PGroongaがよくなったかを紹介します。

ちなみに、世間ではメジャーバージョンアップをすると互換性がなくなってアップグレードが大変!というソフトウェアが多いですが、Groonga・Mroongaは非互換なしなのでいつもどおり安心してアップグレードできます!PGroongaは非互換がありますが、普通は関係のない非互換なのでいつもどおり安心してアップグレードできます!そこらへんは後述します。

もっと読む

Groonga: パトリシアトライのキーをデフラグのバグ修正

Groongaのパトリシアトライについてちょっとわかってきたつもりの阿部です。

ちょっと前に意気揚々とパトリシアトライのキーをデフラグする機能を追加したことを紹介したのですが、その機能にバグがありました。かなしい。

本記事ではどのようなバグがあってどのように修正したのかを紹介します。

バグの説明をするためにパトリシアトライのレコード削除やレコードの再利用について知っておく必要があるので、はじめにその辺の説明をします。

前の記事の続編な内容なので、前回の記事を読んでから本記事を読んでもらえるとうれしいです。)

もっと読む

Groongaの並列オフラインインデックス構築

Groongaの開発に参加している須藤です。14.1.3で並列オフラインインデックス構築機能を実装したので実装内容を紹介します。

もっと読む

PGroongaの演算子に新しいデータ型のサポートを追加する方法

最近、PGroongaの演算子を改良した堀本です。 今回、正規表現を用いた検索で使う演算子に新しいデータ型のサポートを追加したので、どうやって追加したかを紹介します。

もっと読む

Groonga: パトリシアトライのキーをデフラグ

Groongaの開発をがんばっている阿部です。

最近はパトリシアトライのキーをデフラグする機能を実装したのでその機能について紹介します。

(わかりやすさを優先するため説明を割愛している部分や厳密には正確ではない説明も含まれますがご了承ください。)

もっと読む

index_column_diffコマンドのインデックス破損の誤検知を解消

最近、Groongaindex_column_diffコマンドの誤検知を解消した児玉です。 index_column_diffはインデックスの破損を検出するコマンドですが、 このコマンドが誤検知を起こすケースがあったので解消しました。

この記事では、index_column_diffの詳細と誤検知の原因およびその解消方法を紹介します。

ここから先は、Groongaのインデックスの仕組みを理解していることを前提として進めていきます。 インデックスの仕組みを知らないよという方は、次の記事を読んだ後に戻ってくると理解しやすいと思います。

もっと読む