Mroongaを社内クラウド的なMySQLプラットフォームに標準搭載している話 #groonga

263 Views

April 03, 15

スライド概要

https://groonga.doorkeeper.jp/events/15816
全文検索エンジンGroongaを囲む夕べ5 で発表した資料です。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Mroongaを社内クラウド的な MySQLプラットフォームに標準搭 載している話 ヤフー株式会社  吉野彰真 2015/04/03

2.

$  whoami P2 • 吉野  彰真(よしの  あきまさ) • @y055ie • 2011年年  ヤフー株式会社  中途⼊入社 データインフラ開発部所属 • Oracle  /  MySQL  のプロフェッショナル集 団 • RDBの共通環境・集約環境を社内に提供 • 好きなキーボード配列列:DVORAK Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

3.

社内クラウド的なMySQL プラットフォーム? Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

4.

構成 P4 SLAVE SLAVE SLAVE SLAVE mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld 本番環境:これ(クラ スタ)×8セット MASTER MASTER MASTER mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld ClusterWare Shared-‐‑‒Storage 開発環境:単品サー バ/ローカルディスク ×数台 各サーバ内で複数の MySQLデーモンを起 動 ⾃自家製Webコンソー ルで管理理 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

5.

いろんなサービスで使われてます! サーバ台数  =  100台超   規模感 インスタンス数=  400近く   Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

6.

全台に Mroonga⼊入ってます Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

7.

Mroonga導⼊入までのみちのり • 2012/7〜~  機能検証・負荷検証 • 2013/3〜~  開発・本番環境リリース Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止 P7

8.

負荷検証結果 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

9.

テスト環境 P9 サーバ Xeon  L5520  2.27GHz×2(16C)/    24GB  Mem  /SAS   146GBx2  /Raid  1   OS   Oracle  Enterprise  Linux  5.5   MySQL   Percona  Server  5.1.51   照合順序 uS8_general_ci     Groonga   2.0.6   Mroonga   2.0.6   mecab   mecab-­‐0.994     (分かち書き辞書:mecab-­‐ipadic-­‐2.7.0-­‐20070801)   Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

10.

テストデータ P10 ・Wikipediaの記事サマリー(abstract) http://dumps.wikimedia.org/   ・タイトルと本⽂文の⼀一段落落⽬目のデータ   ・xmlをSQL(INSERT⽂文)に整形   ・正味テキスト量量:約128MB   ・レコード件数:約80万⾏行行 mysql> desc wikidb.article; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | title* | varchar(255) | YES | MUL | NULL | | | abstract*| text | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ *フルテキスト索索引を作成(複合キー) Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

11.

テスト⽅方法 P11 ・ApacheJMeterで20/40Threadsで実⾏行行 select        match(title,abstract)  against  ('+${searchword}'  in   boolean  mode)  as  score      ,id      ,title      ,abstract from 単語をリストから⼊入⼒力力    article where    match(title,abstract)  against  ('+${searchword}'  in   boolean  mode)   order  by  score  desc Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

12.

結果:SELECT Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止 P12

13.

結果:レスポンス Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止 P13

14.

結果:UPDATE  &  SELECT Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止 P14

15.

結論論: 使える! 使おう! Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

16.

こういう感じで提供してます P16 ・開発環境 ・全サーバにPackageインストール済 ・Webコンソールから開発者がセルフでイン スタンス構築できるので… 外せないチェックボックス! ・本番環境 ・全サーバにPackageインストール済 ・インスタンスは相談ベースで構築 ・全⽂文検索索利利⽤用希望の場合のみ、インスタン スにプラグインをインストールして提供 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

17.

使われ⽅方 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

18.

利利⽤用例例  (1) P18 ・某トップページ関連サービス ・個⼈人ページのパーソナライズ機能で、エン ドユーザが、RSSのタイトルと詳細を検索索す る部分に使⽤用 ・某UGC系サービス ・グループ機能で、エンドユーザがグループ のタイトルや説明⽂文を検索索する部分に使⽤用 ・某社内サービス ・運⽤用者がDB内に格納されたログ(ASCII)を 検索索する。 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

19.

利利⽤用例例  (2) P19 ・某情報提供サービス     ・商品レビュー(20万件)の検索索をlikeで 実装したが、パフォーマンスが出ない&CPU負 荷が⾼高い →  Mroongaを導⼊入し、検索索⽤用テーブルを作 成することで、10ms以下のレスポンスに改 善! Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

20.

使われ⽅方のまとめ P20 ・わりとカジュアルな使われ⽅方が多い     メタデータ的なものやログの検索索 ・トークナイザは全てBigram      ⇒  ⼤大規模なテキストや精度度の⾼高い(ローカ ライズされた)形態素解析が必要な場合は、専 ⽤用の全⽂文検索索プラットフォームへ ・今のところ性能⾯面で不不満が出たこと はない Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

21.

良良かったところ Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

22.

良良かった点 P22 • 速い •楽 • サーバに導⼊入してしまえば、DDL/ SQLですべて完結できるので、管 理理者・利利⽤用者(開発者)双⽅方にとっ て楽 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

23.

苦労した(している)ところ Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

24.

苦労(1) P24 • ビルドがたいへん • Percona  Server  5.1/5.5    ×  Oracle   Enterprise  Linux  5/6なので… 毎回ソースからビルド  (オレオレSPEC) • アップグレードがたいへん • Mroonga  3.0.0/4.0.3が混在 • クラスタ単位で⼀一⻫斉に上げないといけな いのでメンテ調整がたいへん • インデックスやデータベースの再構築が 必要な⾮非互換性の出現に怯える⽇日々… Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

25.

苦労(2) P25 • (まれに)落落ちる • (例例)スレーブインスタンスごと落落ちて再起動を繰り返す /usr/sbin/mysqld(my_print_stacktrace  0x35)[0x7ac7e5]   /usr/sbin/mysqld(handle_fatal_signal  0x4a4)[0x688084]   /lib64/libpthread.so.0[0x340420f500]   /usr/lib64/libgroonga.so.0(grn_column_truncate  0xed)[0x36bbe3b06d]   /usr/lib64/libgroonga.so.0(grn_table_truncate  0x2a3)[0x36bbe57713]   /usr/lib64/mysql/plugin/ha_mroonga.so(_ZN10ha_mroonga16storage_truncateEv  0x33)[0x7f2a269d16e3]   /usr/sbin/mysqld(_Z12mysql_deleteP3THDP10TABLE_LISTP4ItemP10SQL_I_ListI8st_orderEyy  0x305)[0x76a525]   /usr/sbin/mysqld(_Z21mysql_execute_commandP3THD  0x2f65)[0x58c7e5]   /usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state  0x333)[0x58e483]   /usr/sbin/mysqld(_ZN15Query_log_event14do_apply_eventEPK14Relay_log_infoPKcj  0xe48)[0x72ed48]   /usr/sbin/mysqld(_Z26apply_event_and_update_posP9Log_eventP3THDP14Relay_log_info  0x125)[0x52b445]   /usr/sbin/mysqld[0x52f787]   /usr/sbin/mysqld(handle_slave_sql  0x949)[0x530bb9]   /lib64/libpthread.so.0[0x3404207851]   /lib64/libc.so.6(clone  0x6d)[0x3403ee894d]   :   Trying  to  get  some  variables.   Some  pointers  may  be  invalid  and  cause  the  dump  to  abort.   Query  (7f2900008210):  DELETE  FROM  `ar5cles_for_search`   Connec5on  ID  (thread  ID):  2   Status:  NOT_KILLED binlog_̲formatパラメータを MIXED  ⇒  STATEMENT に変更更することで 起きなくなった。 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

26.

まとめと今後の展望 Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

27.

P27 • まとめ • Mroonga導⼊入で、MySQLプラット フォームの提供価値を向上できまし た • 今後の展望 • 更更なる布教! • 社内独⾃自の形態素解析エンジン⽤用の プラグイン(初期バージョンリリース 済み) Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止

28.

ありがとうございました! Copyright  (C)  2015  Yahoo  Japan  Corpora5on.  All  Rights  Reserved.  無断引用・転載禁止