読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Meteorを使ったリアルタイムアプリのためのデータ構造

Meteor歴5年で今更感があるのですが。

Meteorといえばリアルタイムアプリがターゲットのウェブプラットフォームです。
クライアントとサーバーのDBの同期やリアクティブなレンダリングはとても重宝しています。

さて、MeteorのDBのクライアント-サーバ同期の単位は、コレクションのドキュメントのトップのフィールドです。
(これを確認するには、クライアント側でDDPの通信をモニタしてみるといいです)

例えばチャットアプリを考えてみましょう。
大きく分けて3つのデータ構造が考えられると思います。

  1. チャット1つずつをそれぞれドキュメントにする
  2. スレッドをドキュメントにして、チャットID(番号)をトップのフィールドにしてチャットをスレッドのドキュメントに追加していく
  3. ルームをドキュメントにして、chatsフィールドを配列にしてチャットを追加していく


先に説明した通り、同期の単位はコレクションのドキュメントのトップのフィールドなので、1と2はチャット毎にDDPで同期が取られますが、3はチャットが追加されるたびにchatsフィールドの内容すべてをDDPで送ることになります。

パフォーマンスに大きな影響があるかと思いますので、ご注意ください。