Successfully reported this slideshow.
Your SlideShare is downloading. ×

企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
SPEEDAインフラ運営
SPEEDAインフラ運営
Loading in …3
×

Check these out next

1 of 32 Ad

More Related Content

Slideshows for you (19)

Similar to 企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘 (20)

Advertisement

Recently uploaded (20)

企業・業界データサービスSPEEDAの開発における複雑怪奇なデータとの格闘

  1. 1. 企業・業界データサービスSPEEDA の複雑怪奇なデータとの格闘 2015/4/23 株式会社ユーザベース SPEEDAエンジニア 北内 啓
  2. 2. SPEEDAとは
  3. 3. 世界最大級の企業・業界情報データベース ●  SPEEDAは企業データと業界データを一括で取得する ことができる世界最大級のデータベースです ●  企業データは180ヶ国100万社超(非上場含む)、業界 データは550以上の詳細分類(更に地域別)をカバーし ています ●  業界レポートは、SPEEDA専属のアナリストが執筆を 担当し、業界動向等をクイックに把握できます SPEEDAとは
  4. 4. 今日から使える圧倒的な使いやすさ ●  既存のサービスと比べて使いやすく、マニュアル、ト レーニング、インストール、全て不要です ●  初めての方にも、既にお使いのパソコンで、すぐに直 感的にご利用いただけます SPEEDAとは
  5. 5. お客様に専属のコンサルタントを ●  サポートデスクは、専属のコンサルタントが必ず30分 以内に返答します(平日9時∼19時半) ●  質問への電話回答に留まらず、データの取得や加工ま で、期待の一歩先を行くサービスでお客様をサポート します(基本的に追加料金無し) SPEEDAとは
  6. 6. 1.  サービスの扱う分野の専門性が高い 2.  コードベースとDBが拡大し続けている 3.  データが大規模かつ複雑 開発者から見たSPEEDAの特徴
  7. 7. 1. サービスの扱う分野の専門性が高い
  8. 8. 1. サービスの扱う分野の専門性が高い
  9. 9. 1. サービスの扱う分野の専門性が高い 様々な専門分野のメンバーが密接に連携しながら開発 技術チームビジネス チームアナリスト チーム 翻訳 チーム カスタマー サポート チーム
  10. 10. 1. サービスの扱う分野の専門性が高い ユーザベース 7つのルール 1.  自由主義で行こう 2.  創造性がなければ意味がない 3.  ユーザーの理想から始める 4.  スピードで驚かす 5.  迷ったら挑戦する道を選ぶ 6.  渦中の友を助ける 7.  異能は才能
  11. 11. 2. コードベース、DBが拡大し続けている コミット数の変化 ※Bitbucket移行後(2014年8月∼)
  12. 12. コードベースの拡大 ●  開発初期のコードはテストがないなど技術的負債が蓄 積されており、リファクタリングしにくい ●  たくさんの箇所から呼ばれている複雑な共通処理を改 良しにくい 2. コードベース、DBが拡大し続けている
  13. 13. DBの拡大 とあるテーブルのとあるカラム名 idst_id → IDの何かのID?? 2. コードベース、DBが拡大し続けている
  14. 14. DBの拡大 とあるテーブルのとあるカラム名 idst_id → IDの何かのID??       industry ID のことだった!       (入社1ヶ月後に知る) 2. コードベース、DBが拡大し続けている
  15. 15. 3. データが大規模かつ複雑
  16. 16. データの拡充 ●  約1年半前から海外に進出し、各国の企業・財務データ を拡充 ●  日本の企業データも大幅に拡充 3. データが大規模かつ複雑
  17. 17. 3. データが大規模かつ複雑 2015/2/16 ニュースリリース
  18. 18. SPEEDAのデータの特徴 ●  各企業の1件あたりのデータサイズが大きい 役員、株主、IRデータ、財務データ… ●  特に企業の財務データの件数が膨大 A社の {2012, 2012, ...}年の {年度末, Q1, Q2, ...}の {売上高, 経常利益, 広告宣伝費, EBITDA, ...} 3. データが大規模かつ複雑
  19. 19. 各検索手法の特徴 3. データが大規模かつ複雑 RDB (MySQL) 検索エンジン (Elasticsearch) オンメモリ (HashMap) 1カラムの完全一致検索の速度 △ △ ⃝ 複数カラムのAND/OR検索の速度 △ ⃝ X 文字列の中間一致検索速度 X ⃝ X 検索結果データの転送速度 X X ⃝ アプリケーションサーバのメモリ消費量 ⃝ ⃝ X 運用、対障害性 ⃝ ◯ X
  20. 20. ユースケースに応じた検索手法の選択例 3. データが大規模かつ複雑 大量データの 文字列の中間 一致検索 検索対象の カラム数 表示する データ量 Yes No >= 2 >= 1 全文検索エンジン RDB RDB オンメモリ 大量 少量 複数の検索手法の組み合わせ(例: 企業名で検索した企業の様々なデータを表示したい場合) 1. 大量データの中間一致検索をElasticsearchで実行し、レコードIDのリストを取得 2. レコードIDをキーとして、表示する大量データをMySQLで取得
  21. 21. 様々なサプライヤのデータをSPEEDAのDBに投入し、一つの世界観で見せる 3. データが大規模かつ複雑 TSV (Tab Separated) サプライヤDB SPEEDA DB
  22. 22. 様々なサプライヤのデータをSPEEDAのDBに投入し、一つの世界観で見せる 3. データが大規模かつ複雑 TSV (Tab Separated) サプライヤDB SPEEDA DB 様々な 取得方法 様々な フォーマット 様々な 内容 データの誤り を確認
  23. 23. 様々なサプライヤのデータをSPEEDAのDBに投入し、一つの世界観で見せる 3. データが大規模かつ複雑 TSV (Tab Separated) サプライヤDB SPEEDA DB 企業を業界 に紐付ける サプライヤ 間の企業の 名寄せ サプライヤ の優先順位
  24. 24. データクレンジング ●  電話番号、設立年月日のフォーマットを統一する ●  正しい企業名はなにか? 名寄せ ●  サプライヤXの企業AとサプライヤYの企業Bは同じ企業なのか? ●  同じ企業の場合、各データについてどのサプライヤの情報を表示すべきか? 3. データが大規模かつ複雑 サプライヤ 企業名 電話番号 設立年月日 X Sato Software Co., Ltd. +65 12345678 2/26/1980 Y Satou software corporation (65) 1234 5679 Feb 26 1980 ... ... ... ...
  25. 25. 今後の予定: ETLツールの導入検討 TSV (Tab Separated) サプライヤDB データ 抽出 データ 加工 データ 投入 Extract Transformation Load 二次元配列 に変換 コード化 形式の チェック 複数カラム への分割 各テーブル に投入
  26. 26. Embulkためしてみた ●  Treasure Data社が開発するOSS ●  プラグインアーキテクチャ ●  入力ファイルの各カラムの形式を推測 ●  高速な並列・分散処理 ●  リトライ、レジューム機能 Embulk
  27. 27. プラグインアーキテクチャ Embulk プラグインの種類 ●  Input ●  File Decoder ●  File Parser ●  Filter ●  Executor ●  File Formatter ●  Output
  28. 28. Embulkのインストール Embulk $ sudo wget http://dl.embulk.org/embulk-latest.jar -O /usr/ local/bin/embulk $ sudo chmod +x /usr/local/bin/embulk $ cat try1/example.yml in: type: file path_prefix: "/Users/tau/tmp/try1/csv/sample_" out: type: stdout 設定ファイルの記述
  29. 29. 入力ファイルの各カラムの形式を推測 Embulk $ embulk guess ./try1/example.yml -o config.yml 入力ファイルのフォーマットや 各カラムの型の情報などが追記される
  30. 30. Embulk $ cat config.yml in: type: file path_prefix: /Users/tau/tmp/try1/csv/sample_ parser: charset: UTF-8 newline: CRLF type: csv delimiter: ',' quote: '"' escape: '' skip_header_lines: 1 columns: - {name: id, type: long} - {name: account, type: string} - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'} - {name: purchase, type: timestamp, format: '%Y%m%d'} - {name: comment, type: string} exec: {} out: {type: stdout}
  31. 31. ETLのバッチ処理を実行 Embulk $ embulk run config.yml 現状のEmbulkの制限事項 ●  複数テーブルへの分割ができない 複数レコードを1レコードにまとめることは可能 ●  バッチ処理のスケジューリングはcronで実行 バッチ処理間の依存関係を定義できない
  32. 32. 1.  サービスの扱う分野の専門性が高い 2.  コードベースとDBが拡大し続けている 3.  データが大規模かつ複雑 最後に SPEEDAの複雑怪奇なデータと格闘したい方は ぜひユーザベースへ!

×