Hey Wrigley,
du musst dir den Server und die App losgelöst voneinander vor Augen halten.
Wie viele Leute nutzen deine App? Sicherlich mindestens 28.000.000. Das will doch jeder erreichen.
Doch: wie viele Leute nutzen deine App je Gerät?
Bei dem Spreadsheet ist das schwer zu sagen, aber da alle Browser vermutlich auf ein und dasselbe Dokument zugreifen werden rechnen wir mal ganz optimistisch geschätzt mit 28.000.000 Nutzern, die gleichzeitig auf das Dokument zugreifen.
(Sollte das passieren, plane lieber ein paar Tausend Euro mehr für das Datenbankhosting ein. +scnr+)
Natürlich haben alle 28.000.000 Nutzer auch eine App für iPhone oder Android.
Und hier ist dann der Knackpunkt. Wie viele Nutzer hast du pro iPhone/Android? Exakt: 1 Nutzer. Ein Einziger. In Worten: eins.
Auf dem Server mit 28.000.000 Nutzern fliegt dir die SQLite Datenbank im Idealfall jede Nanosekunde drei mal um die Ohren. Auf den Geräten mit einem Nutzer im Idealfall nie (Man muss es natürlich richtig implementieren, damit nix abschmiert. Ich hätte mich bei Android früher mit den Content Providern auseinandersetzen sollen. +husthust+)
Deshalb hast du auf dem Server eben eine vernünftige Multiuser-Datenbank laufen.
Wie du DIE jetzt einstellst, DAS wird spannend für die Zukunft. Du könntest alles mit einem User machen. Das würde ich nicht tun. Denn ein User kann maximal 1x pro Tabelle agieren, der Gewinn ist nicht viel höher als bei SQLite.
Du könntest für jeden Nutzer einen Datenbankuser anlegen. Dann hast du einen ungeheuren Verwaltungsaufwand aber unglaublich gut granulierte Zugriffs- und Sicherheitsoptionen und jeder könnte prima in deiner Datenbank agieren. Gut, beim Schreiben von Daten kann es unter Umständen zu Problemen kommen, doch die dürften unglaublich selten auftreten.
Der Mittelweg wäre ein User je Gruppe. Wir hatten jetzt drei Gruppen definiert. Webuser, iPhone User und Android User. Nun hast du deine 28.000.000 Nutzer in drei Gruppen geteilt: Web mit 28.000.000, Android mit 21.000.000 und iOS mit 7.000.000 Nutzern.
Puh, das war harte Arbeit.
Und wir haben ein Problem...
Wir haben eine MySQL Datenbank im Netz, auf die dein SpreadSheet zugreift.
Und wir haben 28.000.000 Datenbanken auf mobilen Endgeräten, auf die je eine installierte App zugreift.
Wie kommen jetzt die Daten vom Einen zum Andern?
Dafür ist es zunächst wichtig zu wissen, was genau wie und wo bearbeitet werden soll.
Sind die Smartphone Apps nur für den lesenden Zugriff gemacht und im SpreadSheet wird eingetragen, dann ist es weniger eine Synchronisation als viel mehr ein Datendownload. Der von [matthias] und [Funtik] umrissene Ansatz funktioniert da schon sehr gut.
Eventuell gehst du sogar noch einen Schritt weiter und lässt zu festen Zeiten einfach die Daten vom Server exportieren, so dass die Geräte gar nicht an die Informationen in der Datenbank ran müssen.
(Meinetwegen ein Veranstaltungskalender. Der muss ja nicht minütlich aktualisiert werden. Vor Allem, wenn Änderungen anderweitig zur Verfügung gestellt werden reicht auch einmal täglich. Oder finale Spielauswertungen sind nur nach dem Spiel sinnvoll, müssen also nur ein einziges Mal bereit gestellt werden. Je nach Anwendungsfall)
Vermutlich möchtest du aber, dass auch die Apps in die Datenbank auf dem Server schreiben können.
Hier kommt dann Musik ins Spiel, denn das wird alles Andere als trivial.
Erstens ist JSON, SOAP, REST, XML und keine Ahnung was noch alles ein relativ großer Datenhaufen. Für (nahezu) Echtzeitsynchronisation wird das extremer Overhead.
Zweitens wirst du bei 28.000.000 Usern 19 Stunden am Tag kaum was bekommen und an 5 Stunden überschlagen sie sich fast gleichzeitig mit Einträgen.
Du musst also nicht nur dafür sorgen, dass diese Eintragungen allesamt fehlerfrei durchgehen (Transactions!!!) sondern musst dir auch überlegen in welchem Intervall die Daten auf den Endgeräten aktualisiert werden sollen. Vielleicht wenn eine Minute lang keine Einträge mehr kamen und mindestens 10 Änderungen einflossen eine Push Notification senden oder sowas...
Sagte ich schon, dass Echtzeitsynchronisation alles Andere als trivial ist?
Wie dem auch sei, fang einfach mal an. Datenbank erstellen, Ansteuerungsskript(e) erstellen und mal ein bisschen herumspielen.
Die Komplexität und Probleme kommen dann später von ganz allein. Ich hoffe, ich konnte dir ein bis drei kleine Stolpersteine aufzeigen, auf dass du sie nachher identifizieren kannst, wenn du über sie gefallen bist.