2012-10-29 2 views
8

Ich möchte eine Anwendung erstellen, die das Meteor-Framework verwendet, das für längere Zeit (mehrere Stunden) vom Netzwerk getrennt wird. Ich glaube, Meteor speichert lokale Daten im RAM in einem Mini-Mongodb js Struktur. Wenn der Benutzer den Browser schließt oder die Seite aktualisiert, gehen alle lokalen Änderungen verloren. Es wäre schön, wenn lokale Änderungen auf der Festplatte beibehalten würden (localStorage? indexedDB?). Irgendeine Chance, die bald für Meteor kommt?Getrennte Meteor-Anwendung

Verwandte Frage ... Wie geht Meteor mit Dokumentenkonflikten um? Mit anderen Worten, wenn 2 Benutzer dasselbe MongoDB JSON-Dokument bearbeiten, wie wird dieser Konflikt gelöst? Optimistische Verriegelung?

Antwort

4

Konfliktlösung ist "letzter Schreiber gewinnt".

Genauer gesagt, jede MongoDB-Operation zum Einfügen/Aktualisieren/Entfernen auf einem Client wird einem RPC zugeordnet. RPCs von einem bestimmten Client werden immer in der richtigen Reihenfolge wiedergegeben. RPCs von verschiedenen Clients werden auf dem Server ohne besondere Bestellgarantie verschachtelt.

Wenn ein Client versucht, RPCs bei getrennter Verbindung auszustellen, werden diese RPCs so lange in die Warteschlange gestellt, bis der Client die Verbindung wieder herstellt, und dann in der richtigen Reihenfolge auf dem Server wiedergegeben. Wenn mehrere Clients Offline-RPCs ausführen, hängt die Reihenfolge, in der sie schließlich auf dem Server ausgeführt werden, in hohem Maße davon ab, wann jeder Client die Verbindung erneut herstellt.

Für einige Offline-Mutationen wie MongoDB $inc und $addToSet funktioniert dieses Modell ziemlich gut wie es ist. Aber viele gängige Modifikatoren wie $set werden sich über lange Disconnects hinweg nicht sehr gut verhalten, da die Mutation wahrscheinlich mit intervenierenden Änderungen von anderen Clients in Konflikt gerät.

Das Erstellen von "Offline" -Apps ist also mehr als das Behalten der lokalen Datenbank. Sie müssen auch RPCs definieren, die eine Art von Konfliktlösung implementieren. Schließlich hoffen wir auf schlüsselfertige Pakete, die verschiedene Auflösungsschemata implementieren.

+0

Wenn Meteor OT als Bündel hinzufügen kann (zB sharejs), dann können Konflikte besser gelöst werden. – TiansHUo

+0

Ich schätze die Antwort auf den zweiten Teil .. Wie wäre es mit einem Anwendungsfall für eine Tablet-App für Name/E-Mail-Sammlung auf einer Expo mit No/Poor Wireless? In diesem Fall sind es nur Einfügungen in eine Sammlung. Wie würde man bei der lokalen Speicherung bestehen bleiben oder müsste man sogar? –