SlideShare a Scribd company logo

Groonga族2015

Kouhei Sutou
Kouhei Sutou
Kouhei SutouFree Software Programmer at ClearCode

Groonga、Mroonga、PGroonga、Rroonga、Droongaなど、Groonga関連プロジェクトの概要と2015年現在の最新情報を紹介します。

Groonga族2015

1 of 185
Download to read offline
Groonga族2015 Powered by Rabbit 2.1.9
Groonga族
2015
須藤功平 株式会社クリアコード
Groonga Meatup 2015
2015-11-29
Groonga族2015 Powered by Rabbit 2.1.9
内容
Groonga族の概要
Groonga族の最新情報
Groonga族の今後の情報
Groonga族2015 Powered by Rabbit 2.1.9
Groonga族
総称
Groonga族2015 Powered by Rabbit 2.1.9
Groonga族
Groongaそのもの
Groongaと他のプロダクトを
つなぐプロダクト
名前がXroonga
Groonga族2015 Powered by Rabbit 2.1.9
つなぐプロダクト
MySQL
ライブラリー
Ruby
API
PostgreSQL 他のプロダクト
つなぐプロダクト
Groonga
SQL SQL
ポイント
Groongaはライブラリーとして他のプロダクトに埋め込める!
Groonga族2015 Powered by Rabbit 2.1.9
Groonga族:Groonga
ぐるんが

Recommended

MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
MroongaとPGroonga
MroongaとPGroongaMroongaとPGroonga
MroongaとPGroongaKouhei Sutou
 
初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報初心者向けMroonga・PGroonga情報
初心者向けMroonga・PGroonga情報Kouhei Sutou
 

More Related Content

What's hot

Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Kouhei Sutou
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29kenhys
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアKouhei Sutou
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as CodeTakuhiro Yoshida
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察貴仁 大和屋
 
Groonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーGroonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーNaoya Murakami
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Daisuke Kikuchi
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみようMichio Kataoka
 

What's hot (20)

Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェア
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as Code
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
Ingress on GKE/GCE
Ingress on GKE/GCEIngress on GKE/GCE
Ingress on GKE/GCE
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 
Groonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーGroonga改良型Ngramトークナイザー
Groonga改良型Ngramトークナイザー
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
 

Viewers also liked

三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数firewood
 
MySQLを通じた全文検索エンジンSenna/groongaの利用について
MySQLを通じた全文検索エンジンSenna/groongaの利用についてMySQLを通じた全文検索エンジンSenna/groongaの利用について
MySQLを通じた全文検索エンジンSenna/groongaの利用についてTasuku Suenaga
 
Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索yoyamasaki
 
全文検索エンジンgroongaの紹介@Solr勉強会
全文検索エンジンgroongaの紹介@Solr勉強会全文検索エンジンgroongaの紹介@Solr勉強会
全文検索エンジンgroongaの紹介@Solr勉強会Tasuku Suenaga
 
Ichii gree-crooz-20120126
Ichii gree-crooz-20120126Ichii gree-crooz-20120126
Ichii gree-crooz-20120126Takashi Ichii
 
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessElasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessShinsuke Sugaya
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 

Viewers also liked (8)

三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数
 
MySQLを通じた全文検索エンジンSenna/groongaの利用について
MySQLを通じた全文検索エンジンSenna/groongaの利用についてMySQLを通じた全文検索エンジンSenna/groongaの利用について
MySQLを通じた全文検索エンジンSenna/groongaの利用について
 
全文検索エンジンMroonga_エンジニア勉強会20140418
全文検索エンジンMroonga_エンジニア勉強会20140418全文検索エンジンMroonga_エンジニア勉強会20140418
全文検索エンジンMroonga_エンジニア勉強会20140418
 
Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索
 
全文検索エンジンgroongaの紹介@Solr勉強会
全文検索エンジンgroongaの紹介@Solr勉強会全文検索エンジンgroongaの紹介@Solr勉強会
全文検索エンジンgroongaの紹介@Solr勉強会
 
Ichii gree-crooz-20120126
Ichii gree-crooz-20120126Ichii gree-crooz-20120126
Ichii gree-crooz-20120126
 
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessElasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 

Similar to Groonga族2015

プログラマー
プログラマープログラマー
プログラマーKouhei Sutou
 
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込みKouhei Sutou
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
DroongaのはじめかたKouhei Sutou
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?Kouhei Sutou
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitSeiya Mizuno
 
リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要Kouhei Sutou
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索techtalkdwango
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニングKiyokazu Kaba
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29kenhys
 
Groongaの可変型Ngramトークナイザーについて
Groongaの可変型NgramトークナイザーについてGroongaの可変型Ngramトークナイザーについて
Groongaの可変型NgramトークナイザーについてNaoya Murakami
 
Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Yaboo Oyabu
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Tsuyoshi Yamamoto
 

Similar to Groonga族2015 (20)

プログラマー
プログラマープログラマー
プログラマー
 
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
Droongaのはじめかた
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 
HerokuでGroonga
HerokuでGroongaHerokuでGroonga
HerokuでGroonga
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
 
Groongaの特徴
Groongaの特徴Groongaの特徴
Groongaの特徴
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29
 
Groongaの可変型Ngramトークナイザーについて
Groongaの可変型NgramトークナイザーについてGroongaの可変型Ngramトークナイザーについて
Groongaの可変型Ngramトークナイザーについて
 
Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03
 
Google Product
Google ProductGoogle Product
Google Product
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
 

More from Kouhei Sutou

Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
株式会社クリアコード
株式会社クリアコード株式会社クリアコード
株式会社クリアコードKouhei Sutou
 
OSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateOSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateKouhei Sutou
 

More from Kouhei Sutou (20)

Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
株式会社クリアコード
株式会社クリアコード株式会社クリアコード
株式会社クリアコード
 
OSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateOSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS Gate
 

Groonga族2015

  • 1. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族 2015 須藤功平 株式会社クリアコード Groonga Meatup 2015 2015-11-29
  • 2. Groonga族2015 Powered by Rabbit 2.1.9 内容 Groonga族の概要 Groonga族の最新情報 Groonga族の今後の情報
  • 3. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族 総称
  • 4. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族 Groongaそのもの Groongaと他のプロダクトを つなぐプロダクト 名前がXroonga
  • 5. Groonga族2015 Powered by Rabbit 2.1.9 つなぐプロダクト MySQL ライブラリー Ruby API PostgreSQL 他のプロダクト つなぐプロダクト Groonga SQL SQL ポイント Groongaはライブラリーとして他のプロダクトに埋め込める!
  • 6. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族:Groonga ぐるんが
  • 7. Groonga族2015 Powered by Rabbit 2.1.9 Groongaのよいところ1 高速な 全文検索機能(全文検索エンジンなので当然)
  • 8. Groonga族2015 Powered by Rabbit 2.1.9 Groongaのよいところ2 即時更新
  • 9. Groonga族2015 Powered by Rabbit 2.1.9 即時更新 更新→すぐに検索可能 思想:新鮮なデータは高価値 新しいデータはすぐに入れて! 工夫:更新中も検索性能キープ 即時データ投入を妨げる理由を減少 実装:参照ロックフリー
  • 10. Groonga族2015 Powered by Rabbit 2.1.9 性能の傾向検索スループット 更新スループット Groonga 検索スループット 更新スループット 更新中は参照不可の エンジン 更新が増えても 検索性能は落ちない 更新が増えると 検索性能が落ちる
  • 11. Groonga族2015 Powered by Rabbit 2.1.9 Groongaのよいところ3 高速な集計処理
  • 12. Groonga族2015 Powered by Rabbit 2.1.9 高速な集計処理 集計処理 同一カラムの値を一気にアクセス 工夫:↑向けデータ構造を採用 高速な集計処理を実現 実装:カラムストア
  • 13. Groonga族2015 Powered by Rabbit 2.1.9 カラムストア カラム 行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 カラム 行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 Groonga カラム毎 RDBMSなど カラム 行 値の管理 行毎 得意なアクセス単位
  • 14. Groonga族2015 Powered by Rabbit 2.1.9 Groongaのよいところ3 手厚い 日本語サポート
  • 15. Groonga族2015 Powered by Rabbit 2.1.9 サポート例:RKサーチ ローマ字でカナを検索 Romaji to Kana prefix search 例:「ya」→「ヤキニク」 「や」・「ヤ」→「ヤキニク」も可 用意するもの カタカナでのヨミガナだけ (ひらがな・ローマ字はいらない) (ローマ字の訓令式・ヘボン式の差はGroongaが吸 収)
  • 16. Groonga族2015 Powered by Rabbit 2.1.9 RKサーチの利用例1 入力補助 例:タグの入力 同じことに違うタグをつけると検索精度があがらない 全体で一貫性があることは重要 既存のタグを入力補助することで同じことに同じタグを つけやすくする 使い所:妥当な値の集合がある タグ入力なら既存タグ
  • 17. Groonga族2015 Powered by Rabbit 2.1.9 RKサーチの利用例2 検索ボックスでの補完 Googleもやっているやつ ぐるなびはGroongaで実現
  • 18. Groonga族2015 Powered by Rabbit 2.1.9 ぐるなびでの利用例 「yu」→「ユウラクチョウ」→「有楽町」 出典:Groongaのサジェストで四苦八苦 by Walker https://speakerdeck.com/redfigure/ groongafalsesaziesutodesi-ku-ba-ku
  • 19. Groonga族2015 Powered by Rabbit 2.1.9 補完の使い方1 スキーマ作成 % groonga-suggest-create-dataset DB_PATH stations
  • 20. Groonga族2015 Powered by Rabbit 2.1.9 補完の使い方2 データ準備 [ { "_key": "有楽町", "kana": ["ユウラクチョウ"], "boost": 100 } ] boostを100以上にすること
  • 21. Groonga族2015 Powered by Rabbit 2.1.9 補完の使い方3 データロード % curl 'localhost:10041/d/load?table=item_stations' --header 'Content-Type: application/json' --data-binary @stations.json curlを使うときは--dataではなく--data-binaryを使うこと --dataは改行を削除するため
  • 22. Groonga族2015 Powered by Rabbit 2.1.9 補完の使い方4 補完 % curl 'localhost:10041/d/suggest' --get --data-urlencode 'types=complete' --data-urlencode 'table=item_stations' --data-urlencode 'column=kana' --data-urlencode 'query=yu' [ [...], {"complete": [[1],[...],["有楽町",101]]} ]
  • 23. Groonga族2015 Powered by Rabbit 2.1.9 Groongaのよいところ4 組み込める
  • 24. Groonga族2015 Powered by Rabbit 2.1.9 組み込める ライブラリーとして利用可能 =インターフェイスを変えられる =使いやすい方法で使える
  • 25. Groonga族2015 Powered by Rabbit 2.1.9 つなぐプロダクト MySQL ライブラリー Ruby API PostgreSQL 他のプロダクト つなぐプロダクト Groonga SQL SQL ポイント Groongaはライブラリーとして他のプロダクトに埋め込める!
  • 26. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族:Mroonga むるんが MySQL + Groonga
  • 27. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaのよいところ1 簡単に使える
  • 28. Groonga族2015 Powered by Rabbit 2.1.9 簡単 SQLで使える 全文検索の知識なしで 使い始められる
  • 29. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaを使う:スキーマ CREATE TABLE texts ( content TEXT, FULLTEXT INDEX (content) -- ↑と↓を追加 ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; ポイント:全文検索の索引を作ると言っているだけ
  • 30. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaを使う:検索 SELECT * FROM texts WHERE MATCH(content) AGAINST('*D+ キーワード1 キーワード2' IN BOOLEAN MODE); ポイント:Web検索エンジンと同様にクエリーを書ける
  • 31. Groonga族2015 Powered by Rabbit 2.1.9 なぜ知識なしで使えるの? 適切な デフォルト値
  • 32. Groonga族2015 Powered by Rabbit 2.1.9 デフォルト値 トークナイザー:可変長Bigram (トークナイザー≒検索キーワード抽出モジュール) 日本語+英語でもいい感じに動く ノーマライザー:MySQL互換 (ノーマライザー≒テキスト正規化モジュール) 一部非互換:🍣≠🍺
  • 33. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaのよいところ2 MySQLの機能を 使える
  • 34. Groonga族2015 Powered by Rabbit 2.1.9 MySQLの機能 レプリケーション ユーザー管理 クライアントライブラリー ...
  • 35. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaのよいところ3 速い!
  • 36. Groonga族2015 Powered by Rabbit 2.1.9 例:MySQL 5.7と比較ポイント:MySQL 5.7のInnoDBは日本語全文検索対応! クエリー 文字数 InnoDB mecab InnoDB bigram Mroonga bigram COUNT 1 2.62s N/A 0.74s COUNT 2 0.07s 1.74s 0.27s ORDER BY 1 2.78s N/A 0.83s ORDER BY 2 0.09s 2.72s 0.31s 出典:MySQLの全文検索に関するあれやこれや by yoku0825 http://www.slideshare.net/yoku0825/mysql-47364986 InnoDB mecabは遅いことがある Mroongaは安定して速い
  • 37. Groonga族2015 Powered by Rabbit 2.1.9 MySQL 5.7で日本語全文検索 CREATE TABLE texts ( content TEXT, FULLTEXT INDEX (content) WITH PARSER mecab -- ←がポイント ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; mecabの代わりにngramも指定できるが実用的ではなさそう mecabを使い場合は↑の他にMeCabの設定が必要 https://dev.mysql.com/doc/refman/5.7/en/fulltext-search- mecab.html
  • 38. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga vs MySQL 5.7 Mroonga デフォルトでいい感じに動く (選びたければ指定できる) 安定して速い MySQL 5.7 InnoDB パーサーを選ばないといけない (mecab?ngram?違いは?) 遅いこともある
  • 39. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaが速い理由:1 Groonga直結 ↓ Groongaが速いと Mroongaも速い
  • 40. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaが速い理由:2 ORDER BY LIMIT を最適化
  • 41. Groonga族2015 Powered by Rabbit 2.1.9 ORDER BY LIMIT最適化 SELECT * FROM texts WHERE MATCH(content1) AGAINST('...' IN BOOLEAN MODE) ORDER BY priority LIMIT 10; MySQLに先頭10件しか返さない ORDER BY LIMITをMySQLが処理するより Groongaが処理する方が速いので速くなる
  • 42. Groonga族2015 Powered by Rabbit 2.1.9 ORDER BY LIMIT最適化! SELECT * FROM texts WHERE MATCH(content) AGAINST('...' IN BOOLEAN MODE) AND n_likes < 100 -- 追加 ORDER BY priority LIMIT 10; Groonga:MATCH AGAINST以外も処理 MySQLが処理するよりGroongaが処理する方が速いので速くなる
  • 43. Groonga族2015 Powered by Rabbit 2.1.9 Mroongaが速い理由:3 必要なカラム のみ アクセス
  • 44. Groonga族2015 Powered by Rabbit 2.1.9 必要なカラムのみアクセス SELECT c1, c3, c5 FROM t; c2, c4にはアクセスしない →I/Oが減って速い
  • 45. Groonga族2015 Powered by Rabbit 2.1.9 Groongaはカラムストア 必要なカラムのみアクセスできる理由 カラム 行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 カラム 行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 Groonga カラム毎 RDBMSなど カラム 行 値の管理 行毎 得意なアクセス単位
  • 46. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族:PGroonga ぴーじーるんが PostgreSQL + Groonga
  • 47. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaのよいところ1 簡単に使える
  • 48. Groonga族2015 Powered by Rabbit 2.1.9 簡単 SQLで使える 全文検索の知識なしで 使い始められる
  • 49. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaを使う:索引 CREATE INDEX name ON texts USING pgroonga (content); ポイント:全文検索の索引を作ると言っているだけ
  • 50. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaを使う:検索 SELECT * FROM texts WHERE content @@ 'キーワード1 キーワード2'; ポイント:Web検索エンジンと同様にクエリーを書ける
  • 51. Groonga族2015 Powered by Rabbit 2.1.9 なぜ知識なしで使えるの? 適切な デフォルト値
  • 52. Groonga族2015 Powered by Rabbit 2.1.9 デフォルト値 トークナイザー:可変長Bigram (トークナイザー≒検索キーワード抽出モジュール) 日本語+英語でもいい感じに動く ノーマライザー:NFKC (ノーマライザー≒テキスト正規化モジュール) Unicode正規化形式の1つ
  • 53. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaのよいところ2 PostgreSQLの 機能を使える
  • 54. Groonga族2015 Powered by Rabbit 2.1.9 PostgreSQLの機能 トランザクション ユーザー管理 クライアントライブラリー ...
  • 55. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaのよいところ3 速い!
  • 56. Groonga族2015 Powered by Rabbit 2.1.9 例:pg_bigmと比較 ポイント:PostgreSQL標準では日本語全文検索非対応 ヒット数 PGroonga pg_bigm 368 0.030s 0.107s 17,172 0.121s 1.224s 22,885 0.179s 2.472s 625,792(*) 0.646s 0.556s データ:Wikipedia日本語版 約184万レコード・平均サイズ約3.8KB 詳細:http://www.clear-code.com/blog/2015/5/25.html (*) 他は検索語が3文字以上でこれだけ2文字 PGroongaは安定して速い!
  • 57. Groonga族2015 Powered by Rabbit 2.1.9 更新中も性能維持検索スループット 更新スループット Groonga 検索スループット 更新スループット 更新中は参照不可の エンジン 更新が増えても 検索性能は落ちない 更新が増えると 検索性能が落ちる
  • 58. Groonga族2015 Powered by Rabbit 2.1.9 GINと更新と参照 接続1 接続2 INSERT 開始 SELECT 開始 ブロック INSERT 完了 SELECT 完了 GINの場合 性能劣化! GINはpg_bigmが使っているPostgreSQL標準の転置索引実装
  • 59. Groonga族2015 Powered by Rabbit 2.1.9 PGroongaと更新と参照 接続1 接続2 INSERT 開始 SELECT 開始 INSERT 完了 SELECT 完了 PGroongaの場合 性能劣化なし! PGroongaはGroongaを使っているので参照ロックフリー
  • 60. Groonga族2015 Powered by Rabbit 2.1.9 ロード時間も速い 元データの ロード時間 索引 作成時間 PGroonga 索引 作成時間 pg_bigm 16分31秒 25分37秒 5時間56分15秒 データ:Wikipedia日本語版 約184万レコード・平均サイズ約3.8KB 詳細:http://www.clear-code.com/blog/2015/5/25.html pg_bigmより約14倍速い!
  • 61. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族:Rroonga るるんが Ruby + Groonga
  • 62. Groonga族2015 Powered by Rabbit 2.1.9 Rroongaのよいところ1 Rubyで書ける
  • 63. Groonga族2015 Powered by Rabbit 2.1.9 RubyでDB作成 Groonga::Database.create(:path => "/tmp/db")
  • 64. Groonga族2015 Powered by Rabbit 2.1.9 Rubyでテーブル定義 Groonga::Schema.define do |schema| schema.create_table("Users", :type => :hash) do |table| table.short_text("name") table.int8("age") end end
  • 65. Groonga族2015 Powered by Rabbit 2.1.9 Rubyでデータロード users = Groonga["Users"] users.add("alice", :name => "Alice", :age => 29)
  • 66. Groonga族2015 Powered by Rabbit 2.1.9 Rubyでデータロード users = Groonga["Users"] users.add("alice", :name => "Alice", :age => 29)
  • 67. Groonga族2015 Powered by Rabbit 2.1.9 Rubyで検索 twentys = users.select do |record| (record.age >= 20) & (record.age < 30) end twentys.each do |twenty| p twenty.name # => "Alice" end
  • 68. Groonga族2015 Powered by Rabbit 2.1.9 Rroongaのよいところ2 サーバーいらず
  • 69. Groonga族2015 Powered by Rabbit 2.1.9 サーバーいらず ローカルのDBを操作 SQLiteと同じ 向き不向き 向き:1台で扱えるデータ量 不向き:1台で扱えないデータ量
  • 70. Groonga族2015 Powered by Rabbit 2.1.9 Rroongaの利用事例1 Milkode ソースコード 検索http://milkode.ongaeshi.me/
  • 71. Groonga族2015 Powered by Rabbit 2.1.9 Mlikode 行指向のソースコード検索 grepの親戚 数万ファイルも余裕 grepだと遅いけど1台で扱える量 検索方法 Rroongaでファイル検索 →絞り込んだファイルをgrep ポイント:絞り込んだ後ならgrepでも速い!
  • 72. Groonga族2015 Powered by Rabbit 2.1.9 Rroongaの利用事例2 ROMA 分散KVShttp://roma-kvs.org/
  • 73. Groonga族2015 Powered by Rabbit 2.1.9 ROMA Rakuten/Ruby On-Memory Architecture Rubyで実装された分散KVS ストレージにGroongaを利用 Tokyo Cabinetも使える
  • 74. Groonga族2015 Powered by Rabbit 2.1.9 Rroongaの利用事例3 Droonga
  • 75. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族:Droonga どぅるんが Distributed Groonga 分散対応Groonga
  • 76. Groonga族2015 Powered by Rabbit 2.1.9 Droongaのよいところ1 分散機能
  • 77. Groonga族2015 Powered by Rabbit 2.1.9 分散機能 レプリケーション:実装済み ダウンタイムなしでノード追加可能 データ複製 参照性能・可用性向上 シャーディング:実装予定 データ分割 更新性能・最大データ量向上
  • 78. Groonga族2015 Powered by Rabbit 2.1.9 レプリケーション時の性能
  • 79. Groonga族2015 Powered by Rabbit 2.1.9 Droongaのよいところ2 Groonga互換API
  • 80. Groonga族2015 Powered by Rabbit 2.1.9 Groonga互換API Groongaと同じように使える Groongaからの移行手順あり http://droonga.org/ja/tutorial/groonga/ DroongaからGroongaも可 クライアント無変更で動く
  • 81. Groonga族2015 Powered by Rabbit 2.1.9 概要のまとめ Groonga:高速・日本語得意 Mroonga:高速・簡単 PGroonga:高速・簡単 Rroonga:高速・手軽 Droonga:高速・スケーラブル
  • 83. Groonga族2015 Powered by Rabbit 2.1.9 最新情報:Groonga ぐるんが
  • 84. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 1 groonga-httpdを 正式機能に
  • 85. Groonga族2015 Powered by Rabbit 2.1.9 groonga-httpd nginxにGroongaを組み込み Groonga族 nginxのモジュールとして実装 Groonga HTTPサーバー互換 ↑より高機能(HTTPサーバーとして) 認証・TLS・HTTP/2
  • 86. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 2 Windowsでの DBサイズ減少(1/3以下になるケースもあり)
  • 87. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 3 ドリルダウンの 高機能化
  • 88. Groonga族2015 Powered by Rabbit 2.1.9 ドリルダウンの高機能化1 集計処理を追加 既存: カウントのみ 追加: 合計・最小値・最大値・平均
  • 89. Groonga族2015 Powered by Rabbit 2.1.9 ドリルダウン+平均 グループでドリルダウンして グループ毎の平均年齢も計算 % curl 'localhost:10041/d/select' --get --data-urlencode 'table=users' --data-urlencode 'drilldown=group' --data-urlencode 'drilldown_calc_types=AVG' --data-urlencode 'drilldown_calc_target=age' --data-urlencode 'drilldown_output_columns=_key,_avg'
  • 90. Groonga族2015 Powered by Rabbit 2.1.9 平均の出力例 [... [ [100], # 100グループ [ ["_key", "ShortText"], ["_avg", "Float"] ], [ ["グループ1", 29.0], # 平均29.0歳 ["グループ2", 22.9], # 平均22.9歳 ... ]]]
  • 91. Groonga族2015 Powered by Rabbit 2.1.9 ドリルダウンの高機能化2 複数キーでのドリルダウン ↓ クロス集計 例:市と年齢でのクロス集計 市\年齢 20歳 21歳 札幌市 999人 100人 仙台市 500人 200人
  • 92. Groonga族2015 Powered by Rabbit 2.1.9 複数キードリルダウン例 市と年齢でドリルダウン % curl 'localhost:10041/d/select' --get --data-urlencode 'table=users' --data-urlencode 'drilldown[city_age].keys=city,age' --data-urlencode 'drilldown[city_age].output_columns= _value.city,_value.age,_nsubrecs'
  • 93. Groonga族2015 Powered by Rabbit 2.1.9 出力例 [... [ [100], # 100パターン [ ["city", "ShortText"], ["age", "Int8"] ["_nsubrecs", "Int32"] ], [ ["札幌市", 20, 999], # 札幌市の20歳は999人 ["札幌市", 21, 100], # 札幌市の21歳は100人 ["仙台市", 20, 500], # 仙台市の20歳は500人 ... ]]]
  • 94. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 4 リクエスト キャンセル 対応
  • 95. Groonga族2015 Powered by Rabbit 2.1.9 リクエストキャンセル % curl 'localhost:10041/d/select' --get --data-urlencode 'table=users' --data-urlencode 'request_id=XXX' & % curl 'localhost:10041/d/request_cancel' --get --data-urlencode 'id=XXX' 注:リクエストIDを重複無く付けることはクライアントの責任
  • 96. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 5 dumpの ストリーム対応
  • 97. Groonga族2015 Powered by Rabbit 2.1.9 dumpのストリーム対応 Before メモリー上で全部作ってから出力 大きなDBではメモリー使用量が多い After ダンプ内容を順次出力 大きなDBでもメモリー消費が少ない
  • 98. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 6 シャーディング 対応
  • 99. Groonga族2015 Powered by Rabbit 2.1.9 シャーディング対応 同一DB内 複数のホストにデータ分散ではない 目的 テーブルの最大レコード数制限突破 1テーブルあたり最大約2億レコード サポート 月・日でのシャーディング
  • 100. Groonga族2015 Powered by Rabbit 2.1.9 シャーディング:定義 % curl 'localhost:10041/d/table_create' --get --data-urlencode 'name=Logs_20151129' --data-urlencode 'flags=TABLE_NO_KEY' % curl 'localhost:10041/d/column_create' --get --data-urlencode 'table=Logs_20151129' --data-urlencode 'name=timestamp' --data-urlencode 'flags=COLUMN_SCALAR' --data-urlencode 'type=Time'
  • 101. Groonga族2015 Powered by Rabbit 2.1.9 シャーディング:ロード [ {"timestamp": "2015-11-29 00:00:29"}, {"timestamp": "2015-11-29 00:00:30"}, {"timestamp": "2015-11-29 00:00:31"} ]
  • 102. Groonga族2015 Powered by Rabbit 2.1.9 シャーディング:準備 % curl 'localhost:10041/d/plugin_register' --gets --data-urlencode 'name=sharding'
  • 103. Groonga族2015 Powered by Rabbit 2.1.9 シャーディング:検索 logical_select --logical_table Logs --shard_key timestamp --min "2015-11-29 00:00:00" --min_border "include" --max "2015-11-30 00:00:00" --max_border "exclude" --filter "..."
  • 104. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 7 正規表現対応
  • 105. Groonga族2015 Powered by Rabbit 2.1.9 正規表現 構文はRubyと同じ エンジンがRubyと同じだから 一部のパターンは索引を使える 前方一致:A#{リテラル} 中間一致:#{リテラル} 後方一致:#{リテラル}z
  • 106. Groonga族2015 Powered by Rabbit 2.1.9 正規表現:使い方 select --filter 'content @~ "AHello"' 演算子は@~ エスケープが煩雑なので注意
  • 107. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 8 カスタム スコア関数対応
  • 108. Groonga族2015 Powered by Rabbit 2.1.9 スコア関数 文書がどのくらいクエリーに 適合しているかの度合いを返す 関数 これまではTFのみ TF=単語の出現数 =単語の出現数がスコア
  • 109. Groonga族2015 Powered by Rabbit 2.1.9 新スコア関数 score_tf_idf TF-IDFベースのスコア関数 単語の出現数を単語の重要度で補正 score_tf_at_most 上限値付きTFベースのスコア関数 スパマー対策ならこれで十分
  • 110. Groonga族2015 Powered by Rabbit 2.1.9 スコア関数:使い方 select Logs --match_columns "scorer_tf_at_most(body, 3.0)" --query "keyword1 keyword2" match_columnsで指定
  • 111. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 9 ログ ローテーション 対応
  • 112. Groonga族2015 Powered by Rabbit 2.1.9 ログローテーション 使い方 groongaコマンドの起動オプション オプション --log-rotate-threshold-size --query-log-rotate-threshold-size
  • 113. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 10 キャッシュの 最大キーサイズ 増加
  • 114. Groonga族2015 Powered by Rabbit 2.1.9 キャッシュのキーサイズ Before 4KiB After 64KiB - 1
  • 115. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 11 io_flush追加
  • 116. Groonga族2015 Powered by Rabbit 2.1.9 io_flush メモリー上のデータを ディスクに書き込むコマンド 通常はOSに任せている 目的:クラッシュ対策 UNIX: プロセスが死んでもカーネル が生きていればいずれ書き込まれる Windows: プロセスが死ぬと書き込 まれない
  • 117. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 12 使った索引を ログ出力
  • 118. Groonga族2015 Powered by Rabbit 2.1.9 使った索引をログ出力 チューニングに便利 SQLのEXPLAINの不便バージョン サーバーのログを確認しないといけないから ログレベルに注意 デフォルトでは出力されない debugにすること
  • 119. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 13 Windows イベントログ 対応
  • 120. Groonga族2015 Powered by Rabbit 2.1.9 Windowsイベントログ 使い方 % groonga --use-windows-event-log
  • 121. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 14 スレッド数の 動的変更対応
  • 122. Groonga族2015 Powered by Rabbit 2.1.9 スレッド数変更 最大8スレッドに変更する例 % curl 'localhost:10041/d/thread_limit' --get --data-urlencode 'max=8'
  • 123. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 15 column_copy追加
  • 124. Groonga族2015 Powered by Rabbit 2.1.9 column_copy カラムの値をコピー サーバーサイドで実行 利用例 テーブル・カラム定義変更 新カラム作成→コピー→ 旧カラム削除→リネーム
  • 125. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 16 Pretty print 対応
  • 126. Groonga族2015 Powered by Rabbit 2.1.9 従来 % curl 'localhost:10041/d/status' [[0,...],{"alloc_count":248,...}]
  • 127. Groonga族2015 Powered by Rabbit 2.1.9 Pretty print % curl 'localhost:10041/d/status' --get --data-urlencode 'output_pretty=yes' [ [ 0, ... ], { "alloc_count": 248, ... } ]
  • 128. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 17 新コマンド
  • 129. Groonga族2015 Powered by Rabbit 2.1.9 新コマンド reindex 既存インデックスを再作成 schema スキーマを返す thread_limit 最大スレッド数を動的に変更
  • 130. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 18 新関数
  • 131. Groonga族2015 Powered by Rabbit 2.1.9 新関数 prefix_rk_search() ローマ字で検索 selectで補完できる
  • 132. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 19 Groonga Admin 進化
  • 133. Groonga族2015 Powered by Rabbit 2.1.9 Groonga Admin Groongaの新しい管理画面 旧:Webからコマンドを実行できる 新:詳細を知らずに使える 試せる http://packages.groonga.org:10041/
  • 134. Groonga族2015 Powered by Rabbit 2.1.9 最新情報:Mroonga むるんが MySQL + Groonga
  • 135. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 1 mroonga_boolean_mode_syntax_flags IN BOOLEAN MODEでの構文を変更 スクリプト構文→使える演算子が増加
  • 136. Groonga族2015 Powered by Rabbit 2.1.9 スクリプト構文 SET mroonga_boolean_mode_syntax_flags = "SYNTAX_SCRIPT"; SELECT * FROM memos WHERE MATCH(title) AGAINST('title @~ ".+roonga"' IN BOOLEAN MODE); 正規表現を使う例 他にも関数を使えたり比較演算子を使えたりする MATCHに指定していないカラムでも検索できる
  • 137. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 2 MariaDB カスタム パラメーター 対応
  • 138. Groonga族2015 Powered by Rabbit 2.1.9 インデックスパラメーター CREATE TABLE memos ( body text, FULLTEXT INDEX body_index (body) TOKENIZER='TokenMecab' NORMALIZER='NormalizerAuto' TOKEN_FILTERS='TokenFilterStopWord' -- ↑COMMENTに書かなくてよい! ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
  • 139. Groonga族2015 Powered by Rabbit 2.1.9 カラムパラメーター CREATE TABLE tags ( name VARCHAR(64) PRIMARY KEY ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; CREATE TABLE bugs ( tag VARCHAR(64) GROONGA_TYPE='tags' ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
  • 140. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 3 MySQL 5.7対応
  • 141. Groonga族2015 Powered by Rabbit 2.1.9 MySQL 5.7対応 MySQL 5.7でビルドできる JSON型対応
  • 142. Groonga族2015 Powered by Rabbit 2.1.9 JSON型 CREATE TABLE logs ( record JSON ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; INSERT INTO logs VALUES ('{"message": "start"}');
  • 143. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 4 MariaDB 10.1 対応
  • 144. Groonga族2015 Powered by Rabbit 2.1.9 最新情報:Droonga どぅるんが Distributed Groonga 分散対応Groonga
  • 145. Groonga族2015 Powered by Rabbit 2.1.9 Droonga: 1 ダウンタイム なしの ノード追加対応
  • 146. Groonga族2015 Powered by Rabbit 2.1.9 今年のまとめ Groonga:たくさん改良 Mroonga 使い勝手改良・最新対応 PGroonga: 今年デビュー Rroonga:最新対応 Droonga:可用性向上
  • 147. 今後
  • 148. Groonga族2015 Powered by Rabbit 2.1.9 ヒント 実現は保証しない 実現しようとはするよ! 実現可能性を高めるには… 開発に参加 コード・ドキュメントを書く・テストする・宣伝する 開発者が開発する時間を増やす 他のユーザーをサポート・情報公開・仕事を頼む
  • 149. Groonga族2015 Powered by Rabbit 2.1.9 今後:Groonga ぐるんが
  • 150. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 1 カラムストアをもっと活かす シーケンシャルサーチを速く! ソートを速く! ドリルダウンを速く! ↓ grn_ts(ぐるんたす)
  • 151. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 2 mrubyをデフォルト有効 プラグインをRubyで書ける 式を書き換えられる オプティマイザーを書ける
  • 152. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 3 プラグインエコシステム プラグイン管理コマンド提供 例:grn plugin install XXX プラグインリポジトリー提供 GoのようにGitから直接インストールでもいいかも 対応プラグイン Rubyで書かれたプラグイン
  • 153. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 4 位置指定マッチ対応 N番目のトークンならマッチ 例:1番目のトークンはhello? マッチする:hello world マッチしない:hey! hello world
  • 154. Groonga族2015 Powered by Rabbit 2.1.9 位置指定マッチ応用例1 正規表現の前方一致検索 Groongaでの構文:A 例:Ahello 実装: 1番目のトークンかチェック
  • 155. Groonga族2015 Powered by Rabbit 2.1.9 位置指定マッチ応用例2 ベクターのN番目の要素にマッチ { "rank": ["Alice", "Bob", "Chris"] } # rank[0] @ "Bob"→マッチしない # rank[1] @ "Bob"→マッチする
  • 156. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 5 selectで計算結果での ドリルダウン・ソートに対応 例 元データ:日時(2015-11-29 13:30) 計算結果:年月日(2015-11-29) ドリルダウン:計算結果を使用 (2015-11-29: 1件、2015-11-30: 2件)
  • 157. Groonga族2015 Powered by Rabbit 2.1.9 select例 select Logs --column[access_day].type Time --column[access_day].source 'time_floor_year(access_time)' --drilldown access_day
  • 158. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 6 JSONでのパラメーター指定 (も使えるようにする) メリット プログラムから指定しやすい ことがあるかもしれない デメリット クエリーログに残らない
  • 159. Groonga族2015 Powered by Rabbit 2.1.9 クエリーストリング 現行 % curl 'localhost:10041/d/select' --get --data-urlencode 'table=users' --data-urlencode 'limit=100'
  • 160. Groonga族2015 Powered by Rabbit 2.1.9 JSON % cat select.json { "table": "users", "limit": "100" } % curl 'localhost:10041/d/select' --header 'Content-Type: application/json' --data-binary @select.json
  • 161. Groonga族2015 Powered by Rabbit 2.1.9 Groonga: 7 ドキュメント改善 未ドキュメントな項目を書く 古いドキュメントを更新
  • 162. Groonga族2015 Powered by Rabbit 2.1.9 今後:Mroonga むるんが MySQL + Groonga
  • 163. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 1 ラッパーモードで ロールバック対応 現状:ロールバック非対応 (変更が残ってしまい検索結果に不整合発生) 今後:コミット時にまとめて更新 (ロールバックしても変更が残らない) 現状:トランザクション中に 更新データを検索可能 今後:検索不可能
  • 164. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 2 MariaDBで テーブルパラメーター対応 CREATE TABLE xxx ( ) ENGINE=Mroonga COMMENT='ENGINE "InnoDB"' -- ↑を↓と書ける WRAP ENGINE=InnoDB;
  • 165. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 3 generated column対応 MySQL 5.7で導入。MariaDBでいうvirtual column。 CREATE TABLE users ( first_name text, last_name text, full_name text AS (CONCAT_WS(' ', first_name, last_name)) STORED ) ENGINE=Mroonga;
  • 166. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 4 ネイティブパーテション対応 MySQL 5.7で導入。FULLTEXT INDEXを使えるようになる! CREATE TABLE memos ( created_time DATETIME, content text, FULLTEXT INDEX (content) ) ENGINE=Mroonga PARTITION BY RANGE (TO_DAYS(timestamp)) ( -- ... );
  • 167. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 5 JSONの全文検索対応 CREATE TABLE logs ( message JSON, FULLTEXT INDEX (message) ) ENGINE=Mroonga; SELECT * FROM logs WHERE MATCH(message) AGAINST('*D+ error' IN BOOLEAN MODE);
  • 168. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 6 同義語展開対応 SELECT * FROM memos WHERE MATCH(content) AGAINST(mroonga_expand_query('*D+ 焼き肉') IN BOOLEAN MODE); -- → AGAINST('*D+ 焼き肉 OR 焼肉' IN BOOLEAN MDOE) -- 同義語はMroongaのテーブルにして -- SQLで管理できるようにする
  • 169. Groonga族2015 Powered by Rabbit 2.1.9 Mroonga: 7 ドキュメント改善 Sphinx→GitHub Pages Sphinx・reSTはオーバースペック Markdownで十分 typoを見つけても正しく直せない
  • 170. Groonga族2015 Powered by Rabbit 2.1.9 今後:PGroonga ぴーじーるんが PostgreSQL + Groonga
  • 171. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 1 text @@ pgroonga.queryを導入 SET enable_indexscan = off; SET enable_bitmapscan = off; SELECT * FROM WHERE content @@ '全文検索'; -- ↑PostgreSQL組み込みの@@が使われる SELECT * FROM WHERE content @@ '全文検索'::pgroonga.query; -- ↑PGroonga提供の@@が使われる
  • 172. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 2 もっとGroongaを活かす PGroonga pg_bigm Groonga 0.646s 0.556s 0.085s ヒット数635,792、検索語は2文字 生Groongaは1桁速い! 詳細:https://github.com/groonga/wikipedia-search/issues/3
  • 173. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 3 同義語展開対応 body @@ pgroonga.expand_query('ネジ') -- ↓ body @@ 'ネジ OR ねじ OR ボルト'
  • 174. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 4 ステミング対応 found/finds→find CREATE INDEX index ON entries USING pgroonga (title) WITH (token_filters = 'TokenStem');
  • 175. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 5 重み対応 -- タイトルのほうが本文より10倍重要 body @@ ('title * 10 || body', 'ポスグレ')
  • 176. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 6 複合主キー対応 CREATE TABLE t ( c1 INT, c2 INT, PRIMARY KEY (c1, c2) ); CREATE INDEX index ON t USING pgroonga (c1, c2);
  • 177. Groonga族2015 Powered by Rabbit 2.1.9 PGroonga: 7 pg_dumpのWITH問題を解消 CREATE INDEX index ON t USING pgroonga (c) WITH (tokenizer = 'TokenMecab'); -- ↓pg_dump: クォートがとれる→小文字に正規化される CREATE INDEX index ON t USING pgroonga (c) WITH (tokenizer = TokenMecab);
  • 178. Groonga族2015 Powered by Rabbit 2.1.9 今後:Rroonga るるんが Ruby + Groonga
  • 179. Groonga族2015 Powered by Rabbit 2.1.9 Rroonga: 1 ドキュメント改善 Textile→Markdown 英語化 説明追加(主にコード例)
  • 180. Groonga族2015 Powered by Rabbit 2.1.9 今後:Droonga どぅるんが Distributed Groonga 分散対応Groonga
  • 181. Groonga族2015 Powered by Rabbit 2.1.9 Droonga: 1 シャーディング 対応
  • 182. Groonga族2015 Powered by Rabbit 2.1.9 Groonga族以外 キラーアプリが欲しい 世界規模で認知されたい Mroonga・PGroongaをきっかけに MroongaはMariaDBにバンドルされている 本を出したい 初心者向けのやつ
  • 183. Groonga族2015 Powered by Rabbit 2.1.9 まとめ Groonga族は今年も進化した Groonga族は来年も進化する 来年はもっと世界規模で ユーザーを増やしたい
  • 184. Groonga族2015 Powered by Rabbit 2.1.9 おしらせ1 Groongaで学ぶ全文検索 ↑で検索! 隔週金曜の夜開催 予習復習なしで時間内で 効率よく全文検索を学ぶ会 参加者のレベルは問わない 内容は毎回参加者に合わせて決める 全文検索を学びたい方はどうぞ!
  • 185. Groonga族2015 Powered by Rabbit 2.1.9 おしらせ2 MySQLとPostgreSQLと 日本語全文検索 来年2月9日(肉の日) DMM.comラボにて