<aside> <img src="/icons/document_gray.svg" alt="/icons/document_gray.svg" width="40px" /> 原文
How Notion build and grew our data lake to keep up with rapid growth
</aside>
作成者 XZ Tie、Nathan Louie、Thomas Chow、Darin Im、Abhishek Modi、Wendy Jiao著
約12分で読めます
過去3年間で、ユーザーとコンテンツの増加によりNotionのデータは10倍に拡大し、6〜12か月ごとに倍増しています。この急速な成長を管理し、重要な製品と分析のユースケース、特に最近のNotion AI機能のデータ需要の増加に対応するために、Notionのデータレイクを構築してスケーリングしました。ここでは、その方法をご紹介します。
Notionで見るすべてのもの—テキスト、画像、見出し、リスト、データベース行、ページなど—は、前端の表現や動作が異なるにもかかわらず、バックエンドで「ブロック」エンティティとしてモデル化され、Postgresデータベースに一貫した構造、スキーマ、および関連するメタデータとともに保存されています(Notionのデータモデルについて詳しくはこちらをご覧ください)。
Notionのすべてはブロックであり、これらのブロックは大量のデータで構成されています。
これらすべてのブロックデータは、ユーザーの活動とコンテンツ作成によって、6〜12か月ごとに倍増しています。2021年初頭には、Postgresに200億以上のブロック行がありましたが、現在では2,000億以上のブロックに成長し、圧縮しても数百テラバイトのデータ量となっています。
データの成長を管理しながらユーザーエクスペリエンスを向上させるために、Postgresインスタンス1つからより複雑なシャーディングアーキテクチャに戦略的にデータベースインフラを拡張しました。2021年には、Postgresデータベースを32の物理インスタンスに水平的にシャーディングし、それぞれ15の論理シャードを含む方法で開始し、2023年には物理インスタンスの数を96に増やし、インスタンスごとに5つの論理シャードを持つ方法を継続しました。これにより、480の論理シャードを維持しながら、長期的なスケーラブルなデータ管理と取得能力を確保しました。
2021年までには、Postgresはオンラインユーザーのトラフィックからさまざまなオフラインデータ分析や機械学習のニーズまでを処理する、私たちのプロダクションインフラの中核を形成していました。オンラインとオフラインのデータの需要が増加する中で、オンライントラフィックに干渉せずにオフラインデータを処理するための専用のデータインフラを構築することが重要であると認識しました。
2021年には、Postgres WAL(Write Ahead Log)からSnowflakeへのデータの取り込みにFivetranというサードパーティツールを使用し、480のシャードごとに480の1時間ごとのコネクタを設定して同じ数の生Snowflakeテーブルに書き込むという単純なELT(Extract, Load, and Transform)パイプラインを使用して、この専用データインフラを開始しました。次に、これらのテーブルを1つの大きなテーブルにマージし、分析、レポート、機械学習のユースケースに使用しました。