LoginSignup
7
7

More than 5 years have passed since last update.

oplog tailingを使ったリアクティブウェブ

Posted at

リアクティブウェブはウェブアプリケーション開発者の桃源郷だ、と考えるのは僕だけではないと思う.参考: Trigger と Stream ベースの Reactive スタイルについて考える

Meteor 0.7.1: oplog support for complex queries, Meteor developer accounts

リリースされた0.7.1で、実践環境のMongoDBでよく使われるクエリのほとんどをoplog driverが対応した.

The 0.7.1 release extends the set of MongoDB queries supported by the oplog driver to cover most of the common queries needed in production apps.

以前のMeteorでは、複雑なクエリに関してはポーリングすることでサーバーサイドの変更をクライアントサイドに通知していた.今回の変更で、登録されたクエリに関連する変更差分のみがサーバーサイドからプッシュすることが出来るようになった.ポーリングはリアルタイム性の観点でプッシュに劣り、さらに無駄な負荷を生む事になるためスケーリングの障害になりうるため、これは非常に大きい前進だ.Meteorではこの機構を、

  1. MongoDBのoplogtailing(監視)
  2. 変更差分を独自のセレクタ(minimongoの一部)を使ってオンメモリでクエリ
  3. 該当変更差分のみをプッシュ

というやり方で実装している.(ソースを流し読みしただけなので間違っている部分があるかもしれません.その場合はご指摘お願い致します:))

また、同じくリアクティブウェブを指向したデータ同期を目指すプロジェクトにcloudup/mydbがある.

参考: Introducing MyDB MyDB の紹介

MyDBでは、まだ複雑なクエリに対して変更差分を送るのではなくネームスペース単位でoplogをクライアントサイドに通知している.(ただしオンメモリでのクエリライブラリcloudup/mongo-queryがすでにあるので、これを今後組み込むことはあり得る.)

補足

プロジェクトを長期的に考えると一つ一つの機能はなるべく薄くあって欲しい.その点フルスタックのmeteor.jsよりもcloudupのやり方がデベロッパーフレンドリーだと思う.好みのテンプレートバインディングに加えて、監視(cloudup/oplog)と軽量のクエリシステム(cloudup/mongo-querylogicalparadox/filtrnedb)などを組み合わせて自前のリアクティブウェブを実現出来る.

とはいえ上記のようなやり方(oplog tailing+query)はまだまだ洗練されていない.より原始的に、プロキシのようなものを介して変更を検知し、ネームスペース(または権限)ごとに変更が起きたことをクライアントサイドに伝えて再クエリする、というのが現状の現実路線だろう.

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7