util-urlparsing を活用して 効率的にクエリ文字列を パースする方法

今日のお知らせは、 util-urlparsing のオープンソース化についてです!

util-urlparsing は、 Indeed が作成した Java ライブラリで、不要な中間のオブジェクト作成をせずに、 URL クエリ文字列のパースを可能にします。

これは ParseUtils の内部で数字をパースするメソッドを含んでおり、Java の同等のメソッドである Integer.parseInt や Float.parseFloat よりも高速です。

Java のバージョン 1.6 以下は、 String.substring メソッドを使用すると、非効率的なメモリーの消費を引き起こしてしまう、重大な欠陥を含んでいます。

Indeed のログ・レポジトリからデータを処理すると、イベントデータのキーと値 (key/value) のペアを含む、大きい文字列から、小さな部分文字列を抽出しなければいけないのです。

util-urlparsing 内の主要なクラスである QueryStringParser は、中間の文字列オブジェクトを生成することなく、効率的にこのデータをパースできるように書かれました。

これは、コールバックのメカニズムを通して行われるため、大きなクエリ文字列から必要なキーだけをパースすることが可能になります。

Indeed のクエリ・パースのベンチマークテストにおいては、著しくヒープ・スペースを制限した場合、String.split を使用した Java のナイーブな実装に比べて 4 倍近くスピードアップしました。そして、百万個の key-value のペアも、最大 64MB のヒープで、 3 秒以内にパースできます。数字をパースするベンチマークも、同等のメソッドである、 Integer.parseIntFloat.parseFloat に比べて、 2 倍以上スピードアップしました。

util-urlparsing は GitHub または maven.org よりダウンロード可能です。

また、スタートガイドとして、使用例なども記載したドキュメンテーションも利用可能です。ご質問の場合は Q&Aforum にて、 Indeed のオープンソース Java 機能についてもご覧いただけます。

Indeed のログ・レポジトリについて、さらに学びたい!という場合は

2014 年 1月に行われた “Logrepo: Enabling Data-Driven Decisions.”  の

動画とスライドを是非ご覧ください!