Slide 1

Slide 1 text

検 索 番 長 の お し ご と 2 0 1 6 / 1 1 / 2 5

Slide 2

Slide 2 text

1 植竹 剛人 (うえたけ たけひと) 株式会社 一休 技術基盤部 エンジニア • パフォーマンスのことなんかは高い比率で携 わります。 • 情報セキュリティ責任者だったり。 • なんかいろいろやります。 SNSとか • Twitterはやっていないので、本名でFBとかさ がすと出てきます。 自己紹介

Slide 3

Slide 3 text

2 もともとはDBエンジニア パフォーマンス・チューニングの人です 自己紹介

Slide 4

Slide 4 text

3 社内では無鉄砲と評判。 自己紹介

Slide 5

Slide 5 text

4 会社紹介

Slide 6

Slide 6 text

5 会社紹介 予約サービス + EC

Slide 7

Slide 7 text

6 会社紹介 類似競合サービス

Slide 8

Slide 8 text

7 会社紹介 オンプレ Windowsプラットフォーム • クラウドに移行中。 → の人々と日々楽しく過ごしています 今年からヤフーグループに入りました。

Slide 9

Slide 9 text

ここまでで30秒の予定

Slide 10

Slide 10 text

9 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ 今日話したいこと

Slide 11

Slide 11 text

10 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ 今日話したいこと 今日は宿泊の検索を中心に

Slide 12

Slide 12 text

11 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ

Slide 13

Slide 13 text

12 条件検索がタイムアウトするんだけど!

Slide 14

Slide 14 text

13 条件検索がタイムアウトするんだけど! 背景 • 大規模リプレイス • リアルタイムの在庫、料金を参照した検索にした。 • これに伴ってメインの検索のSQLが長大に • 試しにA4用紙に小さいフォントで印字すると7mになっていた。

Slide 15

Slide 15 text

14 条件検索がタイムアウトするんだけど! 問題 • SQLクエリタイムアウト(30秒)が頻発。 • 他の検索でも10秒くらいかかるのが多数。

Slide 16

Slide 16 text

15 宿泊予約データ構造 宿泊施設 部屋 プラン 日別料金 日別在庫

Slide 17

Slide 17 text

16 条件検索がタイムアウトするんだけど! 解決方法 • 札束でひっぱたく。 • Masterマシンには ViolinMemoryを導入。 • Slaveマシン全台に IoDriveを導入。 • ひとまず金で延命。

Slide 18

Slide 18 text

17 条件検索がタイムアウトするんだけど! 解決方法 • 札束でひっぱたく。 • Masterマシンには ViolinMemoryを導入。 • Slaveマシン全台に IoDriveを導入。 • ひとまず金で延命。 オンプレならIoDriveは買い。

Slide 19

Slide 19 text

18 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ

Slide 20

Slide 20 text

19 キーワード検索の内容がおかしい!

Slide 21

Slide 21 text

20 キーワード検索の内容がおかしい! 背景 • 大規模リプレイス • このタイミングで、Solr1.3を導入。 • 辞書メンテを嫌って n-gramで実装 • 検索結果が不思議。

Slide 22

Slide 22 text

21 キーワード検索の内容がおかしい! 問題 • TDRを検索して、四国の施設がマッチする。 • 「蓼科」を探したら軽井沢の施設がでてきたと、創業社長が怒った。

Slide 23

Slide 23 text

22 キーワード検索の内容がおかしい! 解決方法 • 形態素解析に移行。辞書はひとまず手動メンテ。 • ノイズになりうる情報をフィールドから除外。 • ユーザーの求める形に合わせていった。 • スキーマに含めるフィールドの見直し • 重み付けの調整 • 上位1000キーワードまで検証しながら調整

Slide 24

Slide 24 text

23 キーワード検索の内容がおかしい!

Slide 25

Slide 25 text

24 キーワード検索の内容がおかしい! ユーザーが何を欲しているかをよく知って 辞書や重み付けでコントロール

Slide 26

Slide 26 text

25 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ

Slide 27

Slide 27 text

26 最安値が更新されないんだけど!

Slide 28

Slide 28 text

27 最安値が更新されないんだけど! 背景 • 最安値はバッチで算出 • バッチサーバと呼ばれる単一マシンにデータをもってきて加工していた。 • 宿泊施設様は競合を意識して値付けをすることもあるわけで、更新が遅いとチャン スロスにもなりえる。

Slide 29

Slide 29 text

28 最安値が更新されないんだけど! 問題 • 最安値がデータ更新をしてから3時間経過しても検索結果画面に反映されない。

Slide 30

Slide 30 text

29 最安値が更新されないんだけど! 解決方法 • 最安値の算出を検索Slave側で分散同時並行実行するようにバッチ処理を再作成 • 処理をデータの近くに寄せて、大量のデータをネットワーク越しにやりとりし ないようにした。 • → 結果、3時間 → 8分にまで処理時間を短縮。

Slide 31

Slide 31 text

30 最安値が更新されないんだけど! 解決方法 • 最安値の算出を検索Slave側で分散同時並行実行するようにバッチ処理を再作成 • 処理をデータの近くに寄せて、大量のデータをネットワーク越しにやりとりし ないようにした。 • → 結果、3時間 → 8分にまで処理時間を短縮。 ・データの近くに処理を寄せる ・処理の同期並列化

Slide 32

Slide 32 text

31 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ

Slide 33

Slide 33 text

32 条件検索でまだタイムアウトエラーがでるんだけど!! 背景 • 予約可能期間がビジネス起因で半年から1年に伸びた。 • 日別系データの量が増大 • 新規事業が立ち上がり、施設数がごっそり増えた。 • パーソナライズ検索の導入。

Slide 34

Slide 34 text

33 条件検索でまだタイムアウトエラーがでるんだけど!! 問題 • 大エリア検索で遅いときに11秒程度かかる。平均でも5秒くらい。 • IOの急激な増大。 • 有効活用されないクエリキャッシュ、データキャッシュ。 • 冗長なデータ構造による、無駄なIOの発生。 • もう、SQLチューニングやインデックス付与などの小手先対応では逃げられない。

Slide 35

Slide 35 text

34 条件検索でまだタイムアウトエラーがでるんだけど!! 解決方法 • 条件検索をまるごとSolr5.4に移行。 • 在庫、料金がリアルタイムに検索結果と同期している必要はない。 • 日別情報をダイナミックフィールドとして横持ちすることで、データの冗長化 を抑制。スキーマレス万歳。 • 結果として日別料金のテーブルだけで130GBあったが、移行後のSolrスキーマ は2GBしかない。IOも極小。

Slide 36

Slide 36 text

35 条件検索でまだタイムアウトエラーがでるんだけど!! 解決方法 • 条件検索をまるごとSolr5.4に移行。 • 在庫、料金がリアルタイムに検索結果と同期している必要はない。 • 日別情報をダイナミックフィールドとして横持ちすることで、データの冗長化 を抑制。スキーマレス万歳。 • 結果として日別料金のテーブルだけで130GBあったが、移行後のSolrスキーマ は2GBしかない。IOも極小。 11秒 → 1秒以内 RDBは検索が不得意と認識する。

Slide 37

Slide 37 text

36 サイト内検索周りの課題解決 • 条件検索がタイムアウトエラーするんだけど! • キーワード検索の内容がおかしい! • 最安値が更新されないんだけど! • 条件検索でまだタイムアウトエラーがでるんだけど!! まとめ

Slide 38

Slide 38 text

37 まとめ IOが大きい キーワード検索 大量データ処理 大量データからの検索 オンプレならIODrive入れる 辞書を作ってユーザーニーズに マッチさせる データの近くに処理を持っていく 検索をRDBにやらせる必要がなけ れば、SolrやESに移行する。

Slide 39

Slide 39 text

ご静聴ありがとうございました!