2012-10-29 14 views
8

。私は流星がローカルデータをRAMにmini-mongodb js構造で格納していると信じています。ユーザーがブラウザを閉じるかページを更新すると、すべてのローカル変更が失われます。ローカルの変更がディスクに永続化されているといいでしょう(localStorageindexedDB?)。すぐに流星のために来るどんなチャンスですか?切断流星アプリケーション

関連の質問...メテオはドキュメントの競合をどのように扱いますか?言い換えると、2人のユーザーが同じMongoDB JSONドキュメントを編集した場合、その競合はどのように解決されますか?楽観的なロック?

答えて

4

競合解決は「最終作者勝ち」です。

より具体的には、クライアント上の各MongoDBの挿入/更新/削除操作は、RPCにマップされます。特定のクライアントからのRPCは、常に順番に再生されます。異なるクライアントからのRPCは、特に注文保証なしにサーバー上でインターリーブされます。

クライアントが切断しながら、RPCを発行しようとすると、これらのRPCは、クライアントが再接続するまでキューに入れ、その後、順番に戻ってサーバに遊びます。複数のクライアントがオフラインRPCを実行しているとき、最終的にサーバー上で実行する順序は、各クライアントが再接続するタイミングに大きく依存します。

MongoDBの$inc$addToSetのようなオフライン変異の場合、このモデルは非常によく機能します。しかし、$setのような多くの一般的な修飾子は、突然変異が他のクライアントからの介在する変更と競合する可能性があるため、長い切断ではうまく動作しません。

"オフライン"アプリケーションを構築することは、ローカルデータベースを永続化すること以上のものです。何らかのタイプの競合解消を実装するRPCも定義する必要があります。最終的には、さまざまな解決策を実装するターンキーパッケージを用意したいと考えています。

+0

meteorがOTをバンドル(たとえばsharejs)として追加できる場合、競合はより良い方法で解決される可能性があります。 – TiansHUo

+0

2回目の回答への回答を高く評価しました..ワイヤレス/無線のないエキスポで、名前/電子メールの収集用のタブレットアプリのユースケースはどうですか?その場合、それはコレクションにのみ挿入されますか?どのようにローカルストレージに保存するか、または1つにする必要がありますか? –