SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

大規模解析サービスを支えるGCP活用事例

大規模解析サービスのためのデータベース構成 ~BigTable/BigQueryの弱点をどう補うか?

大規模解析サービスを支えるGCP活用事例 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Realtime CalculationでのDB構成

 二つ目の仕事は、リアクションシステムのためのリアルタイムでの評価計算です。KARTEではパーソナライズ(ユーザーの行動履歴の解析結果によってサーバーのレスポンスを変更すること)を実現するために、リクエストごとに必要なAggregation等の計算結果を、高速に読み書きできるBigTableに格納し、利用しています。下記にKarteでのざっくりとした構成図を示します。

 trackプロセスは、よりシビアにレイテンシをコントロールするため、Google Pub/SubではなくRedisを利用しています。そこからAggregationなどの評価計算を行うanalyzerプロセスが数百ms以内にBigTableに書き込みます[2]。その情報をtrackプロセスは読み出し、パーソナライズされたレスポンスを返します。

 また、これらの解析結果(KARTEでは主に「ユーザー」として扱われます)は、trackにおいては単純に一つの結果を取得できれば良いですが、管理画面ではさまざまな見方をしたくなります。ですが、BigTableは単純なクエリ以外は書くことができません。そこで、BigTableにデータ本体を書き出す際、同時にMongoDBの方に管理画面で使うクエリに合わせたIndexのみのCollectionを、TTLを設定して書き出しておきます。こうすることで、高速な読み書きの要求と、複雑なクエリーの要求の両方に対応することが可能です。

[2] analyzerプロセスは低レイテンシのセミバッチMapReduce処理を行うKARTEのコア機能ですが、本連載では範囲外なので説明しません。

全体でのDB構成

 最後に全体のDB構成をまとめてみます。

 かなり簡略化しましたが、案外スッキリシンプルに構成できることがわかるかと思います。面白いのは右(Realtime)も左(Batch)もスケーラビリティをBigTableとBigQueryで確保しつつ、クエリの柔軟性やレイテンシを他のデータベースで補完していることです。また、負荷コントロールにQueueを利用しているところも一緒です。

まとめ

 本稿では大規模解析サービスのためのデータベース構成について紹介しました。解析サービスにおける重要な2つの仕事Batch AggregationRealtime Calculationについて紹介し、それぞれに合ったデータベース構成の1例を紹介しました。また、その時に考慮すべきデータベースの特性と組み合わせによってスケーラビリティが高いデータベースの短所をカバーするテクニックを紹介しました。

 一般論からはみ出た議論も多かったと思いますが、KARTEの開発で培ったデータベースの活用法の面白い部分の一端を紹介できたのではないかと思います。BigQueryにおけるスキーマの自動管理、RedisのBitmapを利用したaggregationなど、ここでは紹介できなかったテクニックもあります。これらはプレイドのエンジニアブログなどで紹介できれば、と思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
大規模解析サービスを支えるGCP活用事例連載記事一覧

もっと読む

この記事の著者

柴山 直樹(株式会社プレイド)(シバヤマ ナオキ)

 東京大学工学部にて神経科学、同大学院にて分散環境における機械学習の研究に従事。2009年未踏本体採択。2013年同大学院博士をドロップアウトし、CTOとして参画。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10455 2017/11/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング