Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Redmine全文検索システムの実際

 Redmine全文検索システムの実際

Open source Redmine full text search system with Groonga.
Indexed full-text search for 33.3 billion and 100 billion multi-byte characters takes 3 sec or less (Avg per 1 search).
Search into files such as attachments and repositories.

Download this slides as PDF: https://akahane92.page.link/fts20191102pdf

Transcript

  1. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved Redmine全文検索の実際

    〜1,000億文字を平均3秒以内に検索できる、 サクサクなRedmine全文検索の作り方〜 第1版 2019年 8月31日 第20回 Redmine大阪 第2版 2019年11月 2日 第17回 Redmine東京 株式会社島津ビジネスシステムズ(SBS) 赤羽根 州晴 kakahane@sbs.shimadzu.co.jp
  2. ありがとう。 Thanks a lot. Danke schön. Merci beaucoup. 2

  3. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved お話しすること

    3 1)Redmineの全テキストデータを横断検索する仕組みと機能 2)Redmineの実運用環境への導入手順、ベンチマーク結果 3)Redmine全文検索のオープンソース化 Download this slides as PDF: https://akahane92.page.link/fts20191102pdf
  4. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved ご注意

    4 本発表の内容には様々な情報や設定が含まれていますが、 ご利用は自己責任でお願い致します。 参考になさった場合に生じたいかなる損害も補償できません。 あらかじめご了承下さい。
  5. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 目次

    5 第1部 背景と要求 第2部 全文検索システム 第3部 導入手順 第4部 ベンチマーク 第5部 まとめ 5
  6. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 株式会社

    島津製作所 2019年3月31日現在 創 業| 設 立| 資 本 金| 従 業 員 数 | 3,912億円 (2019年3月期) グループ売上高| 社 是|科学技術で社会に貢献する 経営理念|「人と地球の健康」への願いを実現する 6 12,684名 (連結) 明治8(1875)年 大正6(1917)年 約266億円
  7. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 事業領域

    産業機器 航空機器 医用機器 分析・計測機器 7
  8. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 8

    背景と要求|Redmine標準の全文検索の限界 1. 処理時間 • Redmine4.0標準のSQL-Like文による全文検索は30万チケット( 5億文字)を超えたあたりで検索が遅くなり始め、複数人が同時に 検索を実行するとRedmineが無応答になってしまう時もある。 • 将来的なデータ増加で使えなくなってしまう。また、添付ファイ ル/リポジトリの内容検索を実現しようとすると、このままでは 実現が難しい。 2. 検索結果の精度 • 大量の情報が蓄積されると、SQL検索では探している情報が埋も れてしまい、見つけるまでに時間がかかってしまう。 3. 検索の対象制約 • 添付ファイルとリポジトリ内容の検索機能が無いため、ソースコ ードやドキュメントの検索ができず効率が悪いだけでなく、情報 資産を生かせない。
  9. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 9

    背景と要求|Redmine文字数増加の経年変化* 0 1 2 3 4 5 6 2016年 2017年 2018年 2019年 億文字 チケット 題名 Wiki チケット注記 コミットログ 調査日 2019/8 累計 2016年 2億7千万文字 2019年 5億1千万文字 3年でおおよそ2倍 * SBSのデータ
  10. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 0

    100 200 300 400 500 600 700 800 900 1,000 0 10,000 20,000 30,000 40,000 50,000 60,000 2010 2011 2012 2013 2014 2015 2016 2017 2018 チケット発行数 説明欄文字数(平均) 近似曲線(線形) 背景と要求|チケット説明欄の文字数変化* 10 2011年 529文字 2018年 725文字 調査日 2019/1 文字 チ ケ ッ ト 毎 の 記 録 文 字 数 チ ケ ッ ト 発 行 数 * SBSのデータ チケット発行数 累計 34万件 55,800/年 4,600/月
  11. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 0

    0.2 0.4 0.6 0.8 1 1.2 1.4 0 10,000 20,000 30,000 40,000 50,000 60,000 70,000 2010 2011 2012 2013 2014 2015 2016 2017 2018 チケット発行数 添付ファイル数 背景と要求|添付ファイル数の経年変化* 11 ファイル 調査日 2019/1 累積 2017年 26万3千 ファイル 2018年 35万8千 ファイル チ ケ ッ ト 毎 の 添 付 フ ァ イ ル 数 チ ケ ッ ト 発 行 数 / 添 付 フ ァ イ ル 数 * SBSのデータ
  12. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 背景と要求|FTS*1ベンチマーク計測結果*2

    12 調査日 2019/8 *1 FTS; Full Text Search 全文検索(索引型/非索引型) *2 SBSの実データ10万チケットを複写して200万チケットのデータを作成し、耐用試験や性能試験を行うためのデータで計測した Redmine4.0 非索引型 全文検索 チケット数 No Cache Full Cache 10万 5.6 0.2 20万 9.9 0.3 30万 14.2 0.4 50万 25.6 0.7 70万 35.0 1.0 100万 50.0 1.3 150万 78.5 2.0 200万 105.8 2.8 合計 324.6 8.7 検索対象ワード3種をそれぞれ2並列で1回実行した平均値 計測値単位: 秒(sec) 0 50 100 150 200 250 300 350 No Cache Full Cache 全 文 検 索 平 均 所 要 時 間 ( 積 算 ) キャッシュ状態 10万 20万 30万 50万 70万 100万 150万 200万 秒
  13. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 13

    調査日 2019/8 Redmine4.0 非索引型 全文検索 チケット数 No Cache Full Cache 10万 5.6 0.2 20万 9.9 0.3 30万 14.2 0.4 50万 25.6 0.7 70万 35.0 1.0 100万 50.0 1.3 150万 78.5 2.0 200万 105.8 2.8 合計 324.6 8.7 検索対象ワード3種をそれぞれ2並列で1回実行した平均値 計測値単位: 秒(sec) 0 50 100 150 200 250 300 350 No Cache Full Cache 全 文 検 索 平 均 所 要 時 間 ( 積 算 ) キャッシュ状態 10万 20万 30万 50万 70万 100万 150万 200万 秒 *1 FTS; Full Text Search 全文検索(索引型/非索引型) *2 SBSの実データ10万チケットを複写して200万チケットのデータを作成し、耐用試験や性能試験を行うためのデータで計測した Redmine4.0標準の全文検索はデータ量の増加とともに遅くなる 実運用環境34万チケットの実測値は平均20秒なので合致 背景と要求|FTS*1ベンチマーク計測結果*2
  14. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 14

    背景と要求|Redmine全文検索への要求 1. 機能要求 • Redmineのテキストデータを全て(添付ファイル、リポジトリフ ァイル)を検索したい。 • 欲しい情報を短時間で入手できる検索精度 • 更新情報は即時、検索結果に反映 • 情報閲覧の権限制御を検索においても維持 2. 性能要求 • このままデータが増え続けても平均3秒以内に横断検索できる。 3. 非機能要求 • 高負荷環境で盤石の安定性 • 運用・保守コストの低減
  15. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 15

    背景と要求|要約 1. 島津製作所グループはRedmineを10年間使用 2. 蓄積データ*はチケット34万で約5億文字、添付ファイ ルは35万に到達 3. Redmine4.0標準の全文検索(SQL Like文)では限界 4. 今後も使い続けるには、全文検索の機能、性能、精度 に対策が必要 * SBSのデータ
  16. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 目次

    16 第1部 背景と要求 第2部 全文検索システム 第3部 導入手順 第4部 ベンチマーク 第5部 まとめ 16
  17. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 17

    全文検索システム|実現選択肢*1 組込み連携型 外部独立型 方式 Redmineプラグインを中心として、 検索エンジンと連携 外部システムが中心となり、Redmine をHTTPプロトコルでクロール(crawl) 例示 Groonga / Elasticsearch*2 Fess / ほか 長所 • 変更を検索結果に即時反映できる • 情報閲覧制御 閲覧権限の無い情報が1ワードも検 索結果に含まれない • 導入が容易 パッケージインストールと設定のみで 稼働させることが可能 • 仕組みの作り込みや開発は基本的に 不要 短所 • Redmineと連携させる仕組みの作 り込みが必要 • 変更が検索結果に反映されるまで時 間がかかる場合がある • 情報閲覧制御が完全でない場合があ る • 1. Redmine本体への内蔵型も候補にあったが性能上の理由でDeclineになったので選択肢から外れた。 • 2. Elasticsearchは多くのプロプライエタリコードを含んでおり、独自ライセンスのためOSSと言い切れないため 選択肢から外れた。
  18. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 組込み連携型

    外部独立型 方式 Redmineプラグインを中心として、 検索エンジンと連携 外部システムが中心となり、Redmine をHTTPプロトコルでクロール(crawl) 例示 Groonga / Elasticsearch*2 Fess / ほか 長所 • 変更を検索結果に即時反映できる • 情報閲覧制御 閲覧権限の無い情報が1ワードも検 索結果に含まれない • 導入が容易 パッケージインストールと設定のみで 稼働させることが可能 • 仕組みの作り込みや開発は基本的に 不要 短所 • Redmineと連携させる仕組みの作 り込みが必要 • 変更が検索結果に反映されるまで時 間がかかる場合がある • 情報閲覧制御が完全でない場合があ る 18 全文検索システム|実現選択肢*1 • 1. Redmine本体への内蔵型も候補にあったが性能上の理由でDeclineになったので選択肢から外れた。 • 2. Elasticsearchは多くのプロプライエタリコードを含んでおり、独自ライセンスのためOSSと言い切れないため 選択肢から外れた。 今回の選択
  19. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 19

    全文検索システム|機能 # 名称 説明 1 Redmine全テキストデータ 大容量検索 Redmineに蓄積された全てのテキストデータを高速に横断検索が可能 になった。索引方式の採用によって大容量化に対応しておりデータ量 の増加による検索時間の変化はあまりない 2 スコアベース検索 高精度検索を実現。関連性の高い情報に点数を付け、検索結果の上位 に浮上させることで探している情報を短時間で見つけられるようにす る 3 ドリルダウン検索 属性等を指定して「たたみ込む」ように結果を絞り込み、探している 情報を短時間で見つけられるようにする 属性:トラッカー、ステータス、担当者、拡張子、データ種別、 論理条件:AND / OR / NOT 4 添付ファイル検索 全ての添付ファイルの内容からテキストを抽出して検索対象にする。 圧縮ファイルも、ロックされていなければ対象 5 リポジトリファイル内容検索 全てのリポジトリの最新リビジョンのファイルを取り寄せて、テキス トを抽出して検索対象にする。圧縮されていても、ロックされていな ければ対象になる 6 更新データ即時検索 情報の追加変更を検索結果に即時反映(100ms前後)(添付ファイルやリ ポジトリデータはサイズによって反映時間が変動) 7 Job永続化、優先Job制御 Delayed Jobによる「頼まれたことを忘れない」「優先度に従い処理 順序を遵守」
  20. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 20

    全文検索システム|特徴(非機能) # 特徴点 説明 1 安定性 • 実運用環境をフル稼働させたまま、並行してデータ数375万のテキスト抽 出を無停止で実行し、333億文字を5日で抽出する安定性 2 信頼性 • 高負荷の事業用途に耐える全文検索のサービス水準(MTBF 8,364時間(348 日)、MTTR 15時間、稼働率 99.8%) • Redmineの標準データベーステーブル構造を一切変更しない設計とし、依 存と影響の範囲を絞り込んだ。例えば検索プラグインのフォルダを除去し てRedmineを再始動すると、迅速かつ安全にRedmine標準へ戻せる 3 持続利用性、費用性 • 全てOSSで構成し、利用ライセンスを無償かつ長期的に担保できる • 自由なソフトウェア。ベンダーロックインフリー 4 移植性 • LinuxとMySQL以外にもWindowsやPostgreSQLの利用が可能 5 機密秘匿性 • 技術情報を扱う知識基盤システムや業務システムが要求する、検索セキュ リティー水準を満たす • 閲覧権限が無い情報は1ワードも検索結果や抄録に含まれない • 情報流通の利点と、機密秘匿の達成水準のトレードオフ最適均衡点 6 完全性 • テキスト抽出Jobの永続化による、抜け漏れのない検索網羅の完全性を維持 • 検索用データは全て別テーブルに複写。元となるデータには手を加えない • 第三者検証(査察、監査、認証)の要求を満足させる 7 可用性 • VMやコンテナ技術の利用により仮想計算機基盤での冗長性を確保可能
  21. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 21

    全文検索システム|仕組み 環境構成 OS CentOS7 (64bit) Ruby 2.5 (2.6) Rails5.2 Redmine 4.0 DBMS MySQL 5.7 (BP 8GB) HTTP Apache 2.4 vMemory 16GB vCPU 4cores VMware ESXi 6.5 【CPU】Intel Xeon E5-2670 2.3GHz x2 (24Cores/48Threads) , 【Memory】256GB, 【SSD】8.7TB SAS RAID6, 【HDD】6TB 10K RPM SAS RAID6 VCS Subversion1.9 vSSD/HDD vNIC Groonga 9.0.7 Mroonga 9.0.5 FTSプラグイン Passenger6 Delayed_Job プラグイン ※ Docker ※ テキスト抽出 chupa-text- server ※ (コンテナ) ※ 青色枠は拡張オプション。無くても動作する。 Systemd サービス Job Worker 優先・通常※ ※ 赤色枠は動作に不可欠なソフトウェア
  22. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 目次

    22 第1部 背景と要求 第2部 全文検索システム 第3部 導入手順 第4部 ベンチマーク 第5部 まとめ 22
  23. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 23

    導入手順|1/4 Redmine4が動作する環境 OS CentOS7 (64bit) Ruby 2.5 (2.6) Rails5.2 Redmine 4.0 DBMS MySQL 5.7 (BP 8GB) HTTP Apache 2.4 vMemory 16GB vCPU 4cores VMware ESXi 6.5 【CPU】Intel Xeon E5-2670 2.3GHz x2 (24Cores/48Threads) , 【Memory】256GB, 【SSD】8.7TB SAS RAID6, 【HDD】6TB 10K RPM SAS RAID6 VCS Subversion1.9 vSSD/HDD vNIC Passenger6 Systemd サービス
  24. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 24

    OS CentOS7 (64bit) Ruby 2.5 (2.6) Rails5.2 Redmine 4.0 DBMS MySQL 5.7 (BP 8GB) HTTP Apache 2.4 vMemory 16GB vCPU 4cores VMware ESXi 6.5 【CPU】Intel Xeon E5-2670 2.3GHz x2 (24Cores/48Threads) , 【Memory】256GB, 【SSD】8.7TB SAS RAID6, 【HDD】6TB 10K RPM SAS RAID6 VCS Subversion1.9 vSSD/HDD vNIC Groonga 9.0.7 Mroonga 9.0.5 FTSプラグイン Passenger6 Systemd サービス Full text searchプラグインが動作する環境 導入手順|2/4 ※ 赤色枠は動作に不可欠なソフトウェア
  25. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 25

    OS CentOS7 (64bit) Ruby 2.5 (2.6) Rails5.2 Redmine 4.0 DBMS MySQL 5.7 (BP 8GB) HTTP Apache 2.4 vMemory 16GB vCPU 4cores VMware ESXi 6.5 【CPU】Intel Xeon E5-2670 2.3GHz x2 (24Cores/48Threads) , 【Memory】256GB, 【SSD】8.7TB SAS RAID6, 【HDD】6TB 10K RPM SAS RAID6 VCS Subversion1.9 vSSD/HDD vNIC Groonga 9.0.7 Mroonga 9.0.5 FTSプラグイン Passenger6 Delayed_Job プラグイン ※ Systemd サービス Job Worker 優先・通常※ Job永続化、Jobの優先処理が動作する環境 ※ 拡張オプション。無くても動作する。 導入手順|3/4
  26. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 26

    OS CentOS7 (64bit) Ruby 2.5 (2.6) Rails5.2 Redmine 4.0 DBMS MySQL 5.7 (BP 8GB) HTTP Apache 2.4 vMemory 16GB vCPU 4cores VMware ESXi 6.5 【CPU】Intel Xeon E5-2670 2.3GHz x2 (24Cores/48Threads) , 【Memory】256GB, 【SSD】8.7TB SAS RAID6, 【HDD】6TB 10K RPM SAS RAID6 VCS Subversion1.9 vSSD/HDD vNIC Groonga 9.0.7 Mroonga 9.0.5 FTSプラグイン Passenger6 Delayed_Job プラグイン ※ Docker ※ テキスト抽出 chupa-text- server ※ (コンテナ) ※ 拡張オプション。無くても動作する。 Systemd サービス Job Worker 優先・通常※ より多くのファイル形式からテキストを抽出できる環境 導入手順|4/4
  27. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 導入手順|詳細

    <基本構成> 27 リンク先が各ソフトウェアの導入手順書になっています。 Download this slide as PDF : https://akahane92.page.link/fts20191102pdf <基本構成> ・MySQL 5.7 ・Groonga 9.0.7 ・Mroonga 9.0.5 ・Ruby 2.5, 2.6 ・Redmine 4.0 ・Redmine プラグイン(Full text search plugin 1.0.4以降 )
  28. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved <オプション:Job永続化>

    ・Redmine プラグイン(delayed_job) ・Systemd サービス (job-worker、 High-priority job-worker) <オプション:テキスト抽出対象の追加> ・docker19.03 ・docker-compose1.24 ・chupa-text-docker <オプション:Jobエラー通知> ・Redmineプラグイン(email_command) 導入手順|詳細 <オプション> 28
  29. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 目次

    29 第1部 背景と要求 第2部 全文検索システム 第3部 導入手順 第4部 ベンチマーク 第5部 まとめ 29
  30. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved ベンチマーク|評価対象データ*

    30 * SBSで実運用中のデータ。 調査日 2019/11 テキスト抽出 対象種別 333億文字 1,000億文字 処理件数 抽出文字数 処理件数 抽出文字数 Journal (注記、履歴) 1,396,373 174,864,711 644,512 31,477,006 Issue (チケット) 348,754 242,169,288 119,544 128,015,425 WikiPage (Wiki) 9,934 51,982,271 12,926 37,661,316 CustomValue (カスタムフィールド) 382,678 1,836,090 426 208 Project 166 5,077 426 35,760 News 208 120,241 320 336,279 Document (文書) 126 45,097 11 7,809 Message (会議室) 5 853 754 352,446 Attachment (添付ファイル) 358,323 20,125,630,906 118,259 15,481,536,154 Changeset (VCSリビジョン) 269,177 11,371,254 860,697 32,286,330 Change (VCSファイル) 987,566 12,696,661,162 4,808,515 84,391,618,717 合計 3,753,310 33,304,686,950 6,566,390 100,103,327,450
  31. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved ベンチマーク|導入所用時間の計測*

    31 調査日 2019/8 全文検索プラグイン導入時のインデックス作成処理の進捗推移 実施日程: 2019/08/19~8/24 所用期間:5日 5時間47分16秒 処理件数: 375万 Jobs 処理速度: 10,946件/時間(平均) * SBSの実運用中のデータ。終了プロジェクト分を含まない。 0 5 10 15 20 25 30 35 0 20 40 60 80 100 120 140 160 180 2019/8/19 2019/8/20 2019/8/21 2019/8/22 2019/8/23 2019/8/24 2019/8/25 万 万 残Job数 処理件数/1時間
  32. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved ベンチマーク|導入所用時間の計測*

    32 調査日 2019/8 全文検索プラグイン導入時のインデックス作成処理の進捗推移 * SBSの実運用中のデータ。終了プロジェクト分を含まない。 0 5 10 15 20 25 30 35 0 20 40 60 80 100 120 140 160 180 2019/8/19 2019/8/20 2019/8/21 2019/8/22 2019/8/23 2019/8/24 2019/8/25 万 万 残Job数 処理件数/1時間 実施日程: 2019/08/19~8/24 所用期間:5日 5時間47分16秒 処理件数: 375万 Jobs 処理速度: 10,946件/時間(平均) 実運用環境をフル稼働させたまま、並行して375万データからのテキス ト抽出を無停止で実行し、333億文字を5日と6時間で抽出
  33. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 33

    計測条件 ① 検索キーワード3種に対してそれぞれ2並列で1回アクセスして得られた計測値を平均 する。 ② 上記①を下記のキャッシュ状態を切り替えて計測 全キャッシュクリア → DBMS再起動後 → Fullキャッシュ ③ 上記②の全キャッシュクリア、 DBMS再起動後、Fullキャッシュの計測値3種を採用 ④ 上記①~③を、SBSのRedmine環境で実施 検索キーワード 1. Parts (AND) Number 2. WIP (AND) +order 3. module (NOT) –test 調査日 2019/8 ベンチマーク| FTS* 応答性能計測 * FTS; Full Text Search 全文検索(索引型/非索引型)
  34. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 34

    ベンチマーク| FTS応答性能計測 * 数値の単位はすべてms (ミリ秒) キャッシュ状態 Cash status parts (AND) Number WIP (AND) +order module (NOT) – test 平均 AVG 333 億文字 No Cash 5,906 2,156 2,044 3,369 DB Restart 2,104 1,689 1,652 1,815 Full Cash 117 124 143 128 1,000 億文字 No Cash 4,524 2,754 1,832 3,037 DB Restart 2,003 2,550 1,622 2,058 Full Cash 165.3 121.7 222.2 170 0 3,000 6,000 9,000 12,000 No Cash DBMS Restarted Full Cash No Cash DBMS Restarted Full Cash module (NOT) –test WIP (AND) +order parts (AND) Number 333億文字 1,000億文字 >2,138 >2,548
  35. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 35

    ベンチマーク| FTS応答性能計測 * 数値の単位はすべてms (ミリ秒) キャッシュ状態 Cash status parts (AND) Number WIP (AND) +order module (NOT) – test 平均 AVG 333 億文字 No Cash 5,906 2,156 2,044 3,369 DB Restart 2,104 1,689 1,652 1,815 Full Cash 117 124 143 128 1,000 億文字 No Cash 4,524 2,754 1,832 3,037 DB Restart 2,003 2,550 1,622 2,058 Full Cash 165.3 121.7 222.2 170 0 3,000 6,000 9,000 12,000 No Cash DBMS Restarted Full Cash No Cash DBMS Restarted Full Cash module (NOT) –test WIP (AND) +order parts (AND) Number 333億文字 1,000億文字 >2,138 >2,548 • Redmine4.0に全文検索システムを導入し、全テキストデータ が333億文字、1,000億文字の実運用環境において、日常的に使 用するRedmineプロジェクト内検索は1秒未満、全プロジェク トの横断検索でも平均3秒以内で検索可能。 • Redmine4.0標準のSQL Like文による検索は、5億文字で平均 20秒。文字数と検索時間の相関比較では440倍速くなる。 Indexed full-text search for 33 and 100 billion multi-byte characters takes 3 sec or less (Avg per 1 search).
  36. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 36

    ベンチマーク| FTS応答性能計測 * 数値の単位はすべてms (ミリ秒) キャッシュ状態 Cash status parts (AND) Number WIP (AND) +order module (NOT) – test 平均 AVG 333 億文字 No Cash 5,906 2,156 2,044 3,369 DB Restart 2,104 1,689 1,652 1,815 Full Cash 117 124 143 128 1,000 億文字 No Cash 4,524 2,754 1,832 3,037 DB Restart 2,003 2,550 1,622 2,058 Full Cash 165.3 121.7 222.2 170 0 3,000 6,000 9,000 12,000 No Cash DBMS Restarted Full Cash No Cash DBMS Restarted Full Cash module (NOT) –test WIP (AND) +order parts (AND) Number 333億文字 1,000億文字 >2,138 >2,548 • 現時点では333億文字、1,000億文字の横断検索が平均3秒以内 で検索可能となっているが、その内訳を見るとアクセスチェック と結果出力の処理にさらなる高速化の余地がある。 • 0.2秒 全文検索 • 1.5秒 アクセスチェック • 0.5秒 結果の出力(ハイライト、ドリルダウン、ソート等) • 次回のRedmine大阪 (2020/3/xx) をお楽しみに
  37. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 目次

    37 第1部 背景と要求 第2部 全文検索システム 第3部 導入手順 第4部 ベンチマーク 第5部 まとめ 37
  38. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 38

    まとめ|本開発のOSS成果物 • 株式会社クリアコードと、株式会社島津製作所の共同開発 • 本開発成果物は全てオープンソースソフトウェアとして公開 • 本開発において新規に作成し、オープンソースソフトウェアとして公開済みの成果物 1. Redmineプラグイン delayed_job ( Redmine4のActive JobをメモリベースからDBMSベースへ切替え) email_command ( Jobの実行時エラーをRedmineの設定を使ってメールで通知) • 本開発において機能追加や改善パッチを提供したオープンソースソフトウェア 1. Redmineプラグイン Full text search (Redmine組込み連携型 全文検索エンジン) 2. Redmine本体 5件 2019-05-20: Patch #31402 Add support for customization by block to IssueCustomField.generate! 2019-05-27: Patch #31457 Add support for reloading plugin assets automatically 2019-05-31: Patch #31485 Add support for :sql ActiveRecord::Base.schema_format in redmine:plugins:migrate 2019-06-03: Patch #31498 Add redmine_plugin_migration generator 2019-08-31: Patch #31987 Add rake task which synchronize all revisions in repositories related with all active projects 3. その他 Groonga, Mroonga (全文検索エンジン) chupa-text-server(テキスト抽出サーバー) 2019-06-09: Puma 1件(Ruby web server) 2019-08-05: Delayed_Job 1件(Rails 非同期バックグラウンド処理)
  39. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved まとめ|お話ししたこと

    39 1)Redmineの全テキストデータを横断検索する仕組みと機能 2)Redmineの実運用環境への導入手順、ベンチマーク結果 3)Redmine全文検索のオープンソース化
  40. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 40

    まとめ 実際 1. Redmine全文検索の性能問題を解決する方法が実証され、懸念 が解消した 2. 添付ファイル、リポジトリファイルが検索対象として追加され、 Redmineの全てのテキストデータを検索・抽出できる 3. 索引付きの検索方式により、情報量が増加しても性能が低下し にくく、安心して長期利用できる 4. オープンソースソフトウェアとして公開。オープンソースライ センスなのでどなたでも安心して業務用途として長期的に利用 できる 今後の課題 • 検索速度と精度の向上 • 2,000億文字での耐用試験 • テキスト抽出時間の短縮 • テキスト抽出対象の種類を追加 • 耐障害性の向上
  41. Copyright (C) Shimadzu Business Systems Corporation. All Rights Reserved 41

    Redmine全文検索システムの未来は… ここにあります → 株式会社クリアコード 須藤功平さん スライド https://slide.rabbit- shocker.org/authors/kou/redmine-tokyo-17/ 映像(音声解説付) https://youtu.be/556_kQtzA-A • Redmine検索技術の現状と未来像を解説 • 1,000億文字の横断検索を1秒以下にし たい • Milkode のようなコードに特化した検索 機能をRedmine検索に組み込みたい • 検索の高精度化(機械学習など)
  42. 終 Special Thanks to ブログ等で技術情報を公開して下さったみなさま 柴田 雅之さん、西川 撒さん My Family.