読者です 読者をやめる 読者になる 読者になる

CaramelTrip

家族で海外を旅するフリーランス・プログラマーのログ

イベント[クローリングのスペシャリストが語る、クローラー運用の裏側]の資料公開

f:id:parsetree:20161230215753p:plain

イベント[クローリングのスペシャリストが語る、クローラー運用の裏側]

ちょっと前のイベントになりますが、横浜関内のmassmassフーチャーセンターにて「クローリングのスペシャリストが語る、クローラー運用の裏側」というイベントを実施し、壇上させていただきました。

bayside-tech-bridge.connpass.com


今回は、その時発表した「検索のスピードアップ」の資料と内容をご紹介します!

資料はスライドシェアにアップしてありますのご自由にご覧ください。

www.slideshare.net


今回のイベントの経緯

このイベントは"Bayside Tech Bridge"が運営するイベントの1つです。

parsetree.jp

今後もエンジニアやデザイナーといったテクノロジーに関わる全ての方々に向けたイベントや情報を共有していきます。

横浜を中心に活動しておりますので、興味のある方はお気軽にご参加ください。


  

「検索のスピードアップ」

私が発表させていただいた内容は題名の通りで、検索のスピードアップにおけるポイントです。

今回はポイントを3つに絞りました。

  1. クロールとAPI

  2. どこでスピードアップ?

  3. 解析処理でスピードアップするポイント

この辺のポイントを掻い摘んでご紹介します。


  

1. クロールとAPI

WEB上のデータを取ってくる時は、HTML検索かAPI検索の2パターンがほとんどです。

ここでのポイントは、

"APIを積極的に使い検索をスピードアップしましょう"という事です。

APIを使うメリットは大きいです。

  • 速い

  • レウアウト変更がない

  • API側で何らかのアクションがある場合は連絡が来る

現在では、ほんとに色んな企業がAPIを提供してくれています。

もし、あなが欲しいデータがあり、これからクロールを行おうとしているなら、まずAPIが存在するか確認して下さい。

そしてAPIが提供されているならAPIを使いましょう!


  

2. どこでスピードアップ?

検索を行う際には、検索を行う一連の流れがあります。

  • データ取得から始まり

  • データの解析処理

  • DBやストレージへの保存

検索のスピードアップを行おうとした時は、これらの処理ごとにスピードアップさせる方法は違ってきます。

また、それぞれの方法によって工数や費用も違います。

例えば、データ取得の場合は、

  • サーバーの増設

  • 検索処理の並列に実行する並列化


データの解析処理であれば

  • 開発言語の選択

  • 解析ライブラリの模索


最後のDBやストレージへの保存だと、

  • DBのチューニングや最適化

  • キャッシュサーバー、インメモリーデータストアの導入

など、各セクションによってスピードアップ方法や、導入コスト、作業工数や難易度もバラバラです。

ご自分の検索システムをスピードアップさせる場合には、どの部分で検索スピードをアップさせるがベストなのかを確認しましょう!

f:id:parsetree:20161230220333p:plain

  


3. 解析処理でスピードアップするポイント

では実際にスピードアップを行う際に、比較的簡単にスピードアップできるテクニックをご紹介します。

具体的には、"SAX"という解析手法を使います。API検索をする際には特に有効です。

Simple API for XML - Wikipedia


最近の解析ツールはすごい便利で、簡単に導入して解析処理を行うことができます。

XPATHやCSSセクタを指定すればデータを取得できちゃいます。

が、遅いんですよね。

これは解析ツールの仕組みがボトルネックになっています。

ほとんどのツールがそうだと思いますが、XPATHやCSSセクタで指定する度にXMLソースを最初から検索します。

例えば、こんなXMLがあったとします。

<XML>
    <data>
        <hoge1>fuga1</hoge1>
        <hoge2>fuga2</hoge2>
        <hoge3>fuga3</hoge3>
    </data>
</xml>

これをCSSセクタ検索するとこんな感じになります。

  1. "hoge1"を取得する → 解析ツールはタグから読み、次にタグ、でようやくタグに辿り着きます。

  2. "hoge2"を取得する → 解析ツールはまた最初のタグから読み込みを開始します。

これが遅い原因です。

これを解消できるのがSAXです。

SAXの場合は上から下まで順に実行されます。

  1. SAXでXMLを読み込む

  2. hoge1タグの取得イベントが発生

  3. hoge2タグの取得イベントが発生

といった具合にXMLを呼び込んだ順にデータを取得する事が可能になり、結果大幅なスピードアップを実現できます。

f:id:parsetree:20161230220359p:plain


まとめ

  1. 使えるならAPIを使おう

  2. どこをスピードアップさせるか見極めよう

  3. XML解析ならSAXもありだよ。

検索するシステムは様々で、世の中の色んな場面で活用されています。

あなたもご自身の検索システムのスピードアップにチャレンジされては如何でしょうか?