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

Webシステムの検索を300倍に高速化した話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Webシステムの検索を300倍に高速化した話

第46回Elasticsearch勉強会
「Webシステムの検索を300倍に高速化した話」

Avatar for Hiroshi Yoshioka

Hiroshi Yoshioka

February 16, 2022
Tweet

More Decks by Hiroshi Yoshioka

Other Decks in Technology

Transcript

  1. 1 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    Webシステムの検索を300倍に高速化した話 Acroquest Technology株式会社 Senior Consultant / Full stack Elastic Certified 吉岡 洋 @Hirosh_Yoshioka Elasticsearch勉強会
  2. 自己紹介 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    • アクロクエストテクノロジー株式会社 • 吉岡 洋(@Hirosh_Yoshioka) • 業務:Elastic Stackのコンサルティング全般 (全文検索/ログ分析/セキュリティ分析/可視化) • その他 ◦ 世界初のElastic Certified Engineer (Elastic Certification 3種取得) ◦ 日本初のElastic社認定コンサルタント ◦ Elastic Contributor Silver(日本1位) ◦ Elastic User Group Tokyo運営
  3. Acroquest Technology株式会社 Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 1. オープンな社風が特徴のITベンチャー ① 働きがいのある会社ランキング日本1位(3回受賞) ② 『日本でいちばん大切にしたい会社』大賞 審査委員会特別賞 ③ 組織コンサルティング事業を展開 2. データ活用ビジネス ① Elastic Stack活用コンサルティング – 設計/構築/性能改善/運用支援など – Elastic認定資格者:8名 ② IoTデータ分析プラットフォーム ③ 機械学習/AI
  4. 目次 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. RDB検索の性能劣化 2. システム構成 3. 導入時のポイント 4. 性能改善効果
  5. システム状況(Before) Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. 検索が遅過ぎる • タスク管理システムでMySQLを使用 • 日々データが増加。3200万件。 • MySQLの検索が遅い(30~60秒) • 7000回/日の検索のうち、1割以上が 60秒以上かかってタイムアウト。 2. 性能改善に対する障害 • システム拡張の繰り返しでSQLが複雑化。 改修難易度が高い。 • DBスキーマから見直す必要があるが、 アプリ改修量も多くなり高コストになる
  6. RDB検索高速化サービス Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. Webシステムの検索速度を数十倍に • 検索速度の向上/業務効率大幅アップ 2. アプリ改修量を最小限に • 既存のシステム構成を大きく変更せず、 改修量を抑えることでリスクを低減 3. 日本語特有の表記ゆれに対応 • 旧字の表記/送り字の違いなど、 日本語特有の表記ゆれに対して、 適切なチューニングを実施。 https://www.endosnipe.com/ solution_rdbsearch
  7. システム構成(Elastic Stack導入前) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム WEBサーバ ①検索 ⑤検索結果 取得 ④SQL発行 RDB DBサーバ
  8. システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム Logstas h WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行 ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash
  9. Elastic Stack導入時のポイント① ~検索機能のみをElasticsearchに委譲する~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. 改修コスト ① DBスキーマに修正が発生するとSQL/アプリ改修が発生する(高コスト) 2. アプローチ ① RDBをリプレースするのではなく、検索機能のみをElasticsearchに委譲する ② RDBからElasticsearchにデータ同期を行い、Elasticsearchを検索する。 ③ DBスキーマの修正は不要。アプリの改修は「検索処理」のみ。
  10. Webシステム Logstash WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行

    ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash • Logstashが定期的にSQLを発行し、 更新データをRDBから取得。 • Elasticsearchにデータ投入 システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  11. Elastic Stack導入時のポイント② ~Logstashを利用して定期的にデータ同期を行う~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. RDBからのデータ取得(jdbc input) ① 定期的にSQLを発行してデータを取得(発行時刻/間隔を指定可能) ② SQLの条件文にレコードの更新時刻を利用する(更新レコードのみ同期) ③ 物理削除のレコードは同期できないので注意(論理削除にのみ対応可) 2. データ投入(output elasticsearch) ① フィールド値から一意となるDocument IDを生成すること。 ✓ デフォルトではDocument IDはランダム文字列。 ✓ 更新/削除時には対象ドキュメントを特定する必要がある。 ② 削除レコードを判定できるフラグをSQLで取得する必要あり。 ✓ 削除時はactionパラメータを「delete」にする。
  12. Elastic Stack導入時のポイント③ ~検索に必要な最小限のデータのみElasticsearchに同期する~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. 検索性能を向上させるヒント ① インデックス(Shard)を小さくする ② _source(検索結果)を小さくする ※理由:キャッシュが乗りやすい、_source取得/検索結果マージのコストが下がる 2. チューニングアプローチ ① 検索に必要なデータ:同期する ② 画面表示にのみ必要なデータ:同期しない ③ ElasticsearchはレコードIDのみを返却し、画面表示に必要なデータは RDBから取得する
  13. 【再掲】システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム Logstas h WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行 ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash
  14. 改善効果(タスク管理システム/MySQL) Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    3200 万件 60秒 →200ms 2480 時間 データ件数 業務メールデータを蓄積。 1日6万件増加。 検索時間の変化 Elastic Stack導入前は 1日7000回の検索のうち 1割以上がタイムアウト。 導入後は一切発生せず。 性能改善 検索待ち時間が大幅短縮。 月2480時間のコスト削減 に成功
  15. まとめ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. 「RDB検索高速化サービス」を活用すると、DBスキーマを修正せずに 「アプリ改修コストを抑えたRDB検索の高速化」が可能 2. RDB検索の高速化のポイント ✓ 検索機能のみをElasticsearchに委譲する ✓ Logstashを利用して定期的にデータ同期を行う ✓ Elasticsearchには検索に必要な最小限のデータのみ同期する 3. 性能改善効果 ✓ 数十秒かかる検索が1秒未満になる改善効果が得られた