Ich arbeite derzeit an einer mobilen / Desktop- / verteilten App mit genau den gleichen Anforderungen und Problemen.
Erstens sind diese Anforderungen nicht an sich für mobile Apps, sondern für alle getrennten / verteilten Client-Server-Transaktionen (parallele Programmierung, Multithreading, Sie verstehen das). Als solche sind sie natürlich typische Probleme, die in mobilen Apps behoben werden müssen.
Im Allgemeinen läuft alles darauf hinaus, dass Sie einen potenziellen Datensatz haben, der an n Clients verteilt wird, die ihn gleichzeitig bearbeiten können. Was Sie brauchen, ist
- einen ordnungsgemäßen Versionskontroll- / Sperrmechanismus,
- eine ordnungsgemäße Rechte- / Zugriffsverwaltung,
- eine richtige Synchronisations- / Caching-Strategie
Für (1) können Sie einige Muster anwenden: Es gibt zwei häufig verwendete Sperrstrategien : Optimistisches Offline- Sperren und Pessimistisches Offline- Sperren . Einige davon werden in verschiedenen Versionskontroll- "Mustern" angewendet, z. B. " MultiVersion Concurrency Control" (MVCC), bei der für jeden Datensatz ein Zähler (eine Art sehr einfacher "Zeitstempel") verwendet wird, der bei jeder Änderung des Datensatzes aktualisiert wird .
(2) und (3) sind sehr weit gefasste Themen, die unabhängig von (1) behandelt werden müssen. Einige Ratschläge aus meiner Erfahrung:
Verwenden Sie eine Client-Server-Technologie, mit der die meisten Probleme für Sie beseitigt werden. Ich empfehle dringend eine Web-Technologie wie CouchDb , die (1) über Optimistic Offline Locking + MVCC, (2) über Web-API und (3) über HTTP-Caching sehr gut verarbeitet.
Versuchen Sie, Dinge nicht selbst zu erfinden, wenn Sie sich auf bewährte Technologien und Ansätze verlassen können. Ich bin der Meinung, dass jede Stunde, die Sie mit der Erforschung und dem Vergleich vorhandener Technologien / Muster verbringen, weitaus besser ist als der Versuch, Ihre eigenen Systeme zu implementieren.
Verwenden Sie möglichst homogene Technologien. Mit "homogen" meine ich Technologien, die nach denselben Grundsätzen erstellt wurden, z. B. Web 2.0-Nutzungsszenarien. Ein Beispiel: Die Verwendung eines geeigneten CouchDb- und REST-Clients (Web-API) mit einer lokalen Caching-Strategie ist die bessere Wahl als die Verwendung von SQL für mobile Apps.
Ich rate dringend von der Verwendung von MySQL ab, da es sich um eine Technologie handelt, die nicht explizit für solche Verwendungsszenarien entwickelt wurde. Es funktioniert, aber mit einem Datenbanksystem, das bereits den Stil der Webkommunikation und der Parallelität (wie z. B. vielen NoSQL-Datenbanken) unterstützt, sind Sie viel besser dran.
Übrigens habe ich mich für CouchDb mit einem benutzerdefinierten lokalen Client entschieden, der gegen die CouchDb-APIs arbeitet, die einwandfrei funktionieren und skalieren. Ich habe von MSQL + (N) Hibernate gewechselt und einen hohen Preis dafür bezahlt, dass ich nicht die richtige Wahl getroffen habe (was bedeutet, dass ich nicht genug recherchiert habe).