公開日

ノーテーションは2000億のデータエンティティをどのように処理するのか。

著者

Notionのすべてはブロックです。テキスト、画像、リスト、データベースの行、そしてページもブロックです。

Image


ノーテーションのアーキテクチャは、独自のデータモデルをサポートするように設計されており、基本的な情報単位である「ブロック」を中心に構成されています。ブロックは、テキスト、画像、データベースエントリなどのさまざまな種類のコンテンツを表現できます。このアーキテクチャにより、柔軟でダイナミックなユーザーエクスペリエンスを実現し、ユーザーは高度にカスタマイズされた方法でデータを作成および操作できます。

ノーテーションのアーキテクチャの主な特徴

  1. ブロックベースのデータモデル
  • 全てがブロックである:ノーテーションでは、すべてのコンテンツはブロックとして扱われます。ブロックはノーテーションのLEGOです。これには、テキスト、画像、データベース行、さらにはページ全体も含まれます。各ブロックにはメタデータが関連付けられており、アプリケーション内で自由に変換または移動できます。

  • 柔軟性:このブロックモデルにより、ユーザーは厳格な制約なしに情報を整理できます。これにより、さまざまなユースケースやワークフローに適応しやすくなります。

  1. データベース設計
  • 関係データベース:ノーテーションは、PostgreSQLを基本的なデータベースシステムとして使用しています。初期には、単一のPostgreSQLインスタンスで動作していましたが、データ量の増加に伴い、シャーディングを使用したより複雑なアーキテクチャに進化しました。

  • シャーディング戦略:2023年中頃の時点で、ノーテーションのデータベースアーキテクチャは、96台のデータベースサーバーに分割され、ワークスペースIDに基づいて論理的にシャード化されています。これにより、特定のワークスペースに属するすべてのブロックが一緒に保存され、効率的なトランザクションと一貫性が保たれます。

  1. スケーラビリティとパフォーマンス
  • クラスタ化されたアーキテクチャ:クラスタ化されたサーバーの使用により、ノーテーションはデータベースを水平方向にスケールできます。各シャードは、PostgreSQLスキーマとして表現され、データ量の増加に伴いパフォーマンスを維持しながら管理できます。

  • APIのやり取り:クライアントアプリケーションは、Node.js Webサーバーを使用する専用のAPIサーバーを通じてデータベースとやり取りします。この設定により、コネクションプーリングを使用して効率的にコネクションを管理することでパフォーマンスが向上します。

  1. データ管理と成長
  • データレイクインフラストラクチャ:ノーテーションは、データ分析およびレポートのために、ELT(Extract、Load、Transform)パイプラインを実装しています。Fivetranなどのツールを使用して、PostgreSQLからSnowflakeへのデータを取り込み、さらに分析しています。

  • 急速なデータ成長:ノーテーションのブロックデータの量は、2021年の20億から2024年中頃の200億に急激に増加しました。この成長により、データ管理戦略の継続的な最適化が必要です。

ノーテーションでのデータベース設計

ノーテーションでのデータベースの作成は、簡単で、以下のステップを含みます。

  • データベースブロックの作成:ユーザーは、任意のノーテーションページで「/database」を入力して、インラインまたはフルページのデータベースタイプにアクセスできます。

  • 列とエントリの追加:ユーザーは、データベース内の各エントリにプロパティを定義できます。これには、テキスト、数値、日付などのタイプが含まれます。

  • ビューのカスタマイズ:ノーテーションは、ユーザーの好みに応じてデータを視覚化するための複数のビュー(テーブル、ボード、ギャラリー)をサポートしています。

  • データベースのリンク:ユーザーは、リンクされたプロパティを使用して、異なるデータベース間の関係を作成できます。これにより、データの相互接続性が向上します。

ノーテーションのアーキテクチャは、柔軟なブロックベースのモデルと堅固な関係データベース管理原則を組み合わせて、情報を整理するための強力なツールを作成します。スケーラブルなインフラストラクチャとユーザーに優しい設計により、ユーザーは複雑なデータセットを効果的に管理できます。また、カスタマイズとコラボレーションのための必要なツールも提供します。このユニークな組み合わせにより、ノーテーションは、個人用の生産性向上とチームコラボレーションシナリオの両方に適しています。

初期のノーテーションでは、すべてのブロックをPostgresデータベースに保存していました。

当時、Postgresデータベースは、オンラインユーザー トラフィックからオフライン分析および機械学習まで、すべてを処理していました。

2021年、ノーテーションは、Fivetranを使用してPostgresからSnowflakeへのデータを取り込み、480のコネクタを使用して480のシャードをSnowflakeのテーブルに書き込むという、シンプルなETLを開始しました。

しかし、このアプローチには、Postgresデータが増加したときにいくつかの問題がありました。

❌480のFivetranコネクタを管理することは、非常に困難です。

❌ノーテーションのユーザーは、新しいブロックを追加するよりも、ブロックを更新することが多いため、Snowflakeのデータ取り込みが遅くなり、コストが増加します。

❌データの消費は、より複雑で重いものになります(AIワークロード)

2022年、ノーテーションは、Debeziumを使用してPostgresからKafkaへのデータを取り込み、Apache Hudiを使用してKafkaからS3へのデータを書き込むという、インハウスのデータレイクアーキテクチャを導入しました。

日本語版は Ai 支援を使用しているため、小さな間違いが存在する可能性があることをご了承ください。

著者

Ai Base Network (ABN), ABN ASIAは、アカデミアに深く関わり、アメリカ、オランダ、ハンガリー、日本、韓国、シンガポール、ベトナムでの仕事経験を持つ人々によって設立されました。ABN ASIAは、学問とテクノロジーが機会と出会う場所です。最先端のソリューションと優れたソフトウェア開発サービスにより、ビジネスがレベルアップし、グローバルシーンに挑戦できるよう支援しています。 私たちの取り組み: より速く。 より良い。 より信頼性が高くなります。 ほとんどの場合、価格も安くなります。

いつでも、ITサービス、デジタルコンサルティング、既製のソフトウェアソリューション、または提案依頼書(RFP)をお探しの際は、お気軽にお問い合わせください。お問い合わせ先は[email protected]です。お客様のテクノロジーに関するニーズにお応えします。

ABNAsia.org

© ABN ASIA