Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【PHPerKaigi2022】Mongo に溜まった約1.6億件の記事データを BigQuery へ …

【PHPerKaigi2022】Mongo に溜まった約1.6億件の記事データを BigQuery へ …

2022/04/09 ~ 11 に開催された PHPerKaigi 2022 の発表時の資料です。

kazunari.ueeda

April 28, 2022
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • 植江田 和成 (ウエエダ カズナリ) • 2020年 ハッカソン新卒入社 •

    2021年8月上旬頃より WebClipping 開発リーダー • Swift、SwiftUI、Goも書きます! • 好きなもの - ゲーム - 去年FF7をやって感動しました。 - エルデンリングがめっちゃやりたい - アニメ, 映画, ドラマ鑑賞 - ブルーピリオド - マイ・インターン - イカゲーム
  2. 何を話すの? • MongoDB に溜まった約1.6億件、データ量約1TBの記事データを BigQuery へ 移行した件について • WebClipping とは?

    ◦ どのようなサービスかざっくりと紹介 ◦ どこに MongoDB が使われているのか ? どのような構成か? • そもそもなぜこの作業をやることに? • どのように移行する? • 今後の進展 • 学べたこと
  3. BigQuery へ投入できなかった原因その3 • カラムの順番が固定されていなかった。 ▪ bq load した時に、例えば int 型の

    field に string を入れようとしているエ ラーがでたので、気づいた。 ▪ 配列の構造を固定した。
  4. そのエラー内容は? • Cannot return an invalid timestamp value of 1552896131000000000

    microseconds relative to the Unix epoch. The range of valid timestamp values is [0001-01-01 00:00:00, 9999-12-31 23:59:59.999999]; ◦ タイムスタンプの範囲が無効になっていました。 つまり、この範囲を超えた1万年後のデータがいたのでは? ◦ 最大値は、253402300799999999
  5. 今後の進展 • 定時実行できるようにしたい。 ◦ 今もなお Mongo にはデータが増え続けている。 ◦ 1日約10万件のペースで …

    • もっと速さを追い求めたい 🔥 ◦ ファイル作成処理を早くする方法はないかな?
  6. 学べたこと • ファイル操作 • PHPの Stream Wrapper が便利。 ◦ 圧縮や拡張など

    Wrapper を付与するだけで行える。 https://www.php.net/manual/ja/wrappers.compression.php
  7. • BigQuery に関しての知識 ◦ s3は2020/12/3に「強い書き込み後の読み込み整合性」がサポートされ、待たず とも転送ができるようになったはずですが、転送できない場合がありました。なの でs3から転送するには10分ほど待ってから実行が望ましい? ▪ AWS s3

    整合性モデル https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.ht ml#ConsistencyModel ◦ bq コマンドの使い方 ▪ bq コマンドラインツールの使用 https://cloud.google.com/bigquery/docs/bq-command-line-tool?hl=ja • ちゃんとステップを踏めば、難しい作業ではない。
  8. 参考文献 • BigQuery に関して ◦ https://cloud.google.com/bigquery/docs?hl=ja • php:// さまざまな入出力ストリームへのアクセス ◦

    https://www.php.net/manual/ja/wrappers.php.php • タイムスタンプの許容範囲 ◦ https://stackoverflow.com/questions/51648970/bigquery-error-cannot -return-an-invalid-timestamp-value-of-6328502092800000000 • AWS SDK for PHP ◦ https://aws.amazon.com/jp/sdk-for-php/
  9. 最後にPR TIMESの紹介 • プレスリリース配信件数で国内最多(自社調べ) • 月間PV数約5,800万 • 主にPHPで構築されています! https://prtimes.jp/ •

    PR TIMESでは今回発表したWebClippingやプレスリリース配信 などのサービスを主にPHPで開発しています! PHPエンジニア募集中です!! 「PR TIMES 採用情報」で検索! https://herp.careers/v1/prtimes/ePCFEMomxCoA ご清聴ありがとうございました。