今日のお知らせは、 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.parseInt
や Float.parseFloat
に比べて、 2 倍以上スピードアップしました。
util-urlparsing は GitHub または maven.org よりダウンロード可能です。
また、スタートガイドとして、使用例なども記載したドキュメンテーションも利用可能です。ご質問の場合は Q&Aforum にて、 Indeed のオープンソース Java 機能についてもご覧いただけます。
Indeed のログ・レポジトリについて、さらに学びたい!という場合は
2014 年 1月に行われた “Logrepo: Enabling Data-Driven Decisions.” の
動画とスライドを是非ご覧ください!