Konzeptionelle Frage: SQLite <-> Onlinedatenbank

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Konzeptionelle Frage: SQLite <-> Onlinedatenbank

    Hallo Zusammen!
    Ich bin, wie so viele, neu im Bereich der iPhone Entwicklung
    unter Objective-C. Heute stellt sich mir die Frage welches Konzept am besten
    für eine externe Datenquelle geeignet wär.

    Vielleicht mal mein kurzes Fallbeispiel:
    Ich verwende eine SQLite über CoreData auf dem Device. Nun sollen alle
    Datensätze an eine Datenbank auf einem Webserver übertragen werden. Sprich Inserts
    und Updates an die Onlinedatenbank. Das gleiche mit selektierten Datensätzen
    auch Online -> lokal. ca. 250 User/täglich

    Was wäre hier die simpelste Methode bzw. das korrekte
    Konzept? Gibt es vielleicht sogar einen besseren Weg als die lokale SQLite?
    Ich bin Dankbar für jeden Lösungsvorschlag.

    greetz, Sascha
  • zerm schrieb:

    Amin Negm-Awad schrieb:

    Mach dir auf dem Server ne API mit REST.

    Ey, das ich da nicht drauf gekommen bin!
    Endlich alle Probleme gelöst! Einfach eine API mit REST!

    Moment, ich hab noch so einen super Vorschlag:
    Programmiere noch eine Anwendung, die auf dem Server läuft und das ganze synchronisiert.

    Er hat tatsächlich nach einer Lösung für alle Probleme gefragt?

    Wenn das gefragt worden wäre, hätte man natürlich deinen hilfreichen Beitrag verwenden können.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • SaschaX schrieb:

    Amin Negm-Awad schrieb:

    Mach dir auf dem Server ne API mit REST.
    Hast Du dafür vielleicht einen Link zu einem Tuturial zur Hand? Ich habe ein wenig Beispielcoding für Xcode gefunden aber nur rudimentäre Erklärungen für die Erstellung einer API / DB auf dem Webserver.

    Das habe ich einfach mit Google und – IIRC – den Stichwörtern "REST Service PHP" gefunden. War auch nie großartig, mehr ein Einstieg. Aber wenn man das Konzept ja einmal verstanden hat.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Da komme ich leider nicht weiter. Ist es simpler und/oder möglich die SQlite DB auf einen Webserver zustellen (nicht mehr lokal) und dann via CoreData zuzugreifen?

    Oder bin ich hier völlig auf dem Holzweg und es gibt 100 bessere Lösungen um einige Datensätze in eine extere Datenquelle zu schreiben und auszulesen :?:
  • Es ist immer die Frage, was Du genau willst und das solltest Du besser beschreiben, damit wir besser helfen können.

    Also, Du willst nur die Daten jedes Nutzers einzeln auf einem Server speichern? Kann es da zu konflikten kommen?
    Wollen mehrere Nutzer die gleiche Datenbank verwenden? Hat ein Nutzer mehrere Geräte?

    Oder willst Du einfach nur ein Backup Deiner Datenkbank auf den Server legen? Hier wäre eine Brute-Force Lösung
    ja einfach die sqlite Datenbank jedesmal komplett zu übertragen. Wäre das prinzipiell eine Möglichkeit (abgesehen
    von Traffic etc)?

    Was Amin mit REST meinte, ist auf dem Server eine API über das Web zur verfügung zu stellen, die Deine Anfragen
    einfach an eine dortige Datenbank weiterleitet. In etwa um alle neuen Einträge zu bekommen, machst du ein HTTP GET
    auf example.com/api/sync/datum
    und um etwa eine gefundene Briefmarke aus Deiner DB an den Server zu übertragen, machst du ein HTTP POST an
    etwa example.com/api/put/briefmarke
    Das ist schon alles.

    Aber wie gesagt, hängt immer vom konkreten Fall ab, was da das Beste ist.
    C++
  • zerm schrieb:

    Was Amin mit REST meinte, ist auf dem Server eine API über das Web zur verfügung zu stellen, die Deine Anfragen
    einfach an eine dortige Datenbank weiterleitet. In etwa um alle neuen Einträge zu bekommen, machst du ein HTTP GET
    auf example.com/api/sync/datum
    und um etwa eine gefundene Briefmarke aus Deiner DB an den Server zu übertragen, machst du ein HTTP POST an
    etwa example.com/api/put/briefmarke
    Das ist schon alles.
    Das klingt sehr einfach, genau wie die vielen positiven Kommentare die ich zum Thema "REST" gefunden habe. Leider finde ich nur nicht den richtigen Weg für mich bzw. das richtige Beispiel um es umzusetzen. Es klingt für mich nach einer soliden Lösung meines Problems.

    zerm schrieb:

    Oder willst Du einfach nur ein Backup Deiner Datenkbank auf den Server legen?
    Nein, das leider nicht!

    zerm schrieb:

    Also, Du willst nur die Daten jedes Nutzers einzeln auf einem Server speichern? Kann es da zu konflikten kommen?
    Wollen mehrere Nutzer die gleiche Datenbank verwenden? Hat ein Nutzer mehrere Geräte?
    Es handelt sich um ca. 250 User die täglich Ihre persönlichen Notizen via iPad/iPhone eingeben. Diese sollen in die (also in eine) Onlinedatenbank eingepflegt werden. Zudem müssen event. geänderte Datensätze zurück an die mobilen Geräte. Diese Änderungen erfolgen durch eine externe Anwendung die aber z.Z. keine Rolle spielt. Also es benutzen alle User die gleiche Datenbank. Die Datensätze sind durch die Benutzerkennung / UniqueKey gekennzeichnet. Somit greifen nie mehrere User auf einen Datensatz zu. Jeder User hat nur ein Gerät.

    Es wäre wünschenswert wenn alle User ihre Daten lokal auf dem Device hätten, aber es wäre auch zu vertreten wenn sie ausschließlich auf der Onlinedatenbank, ohne lokale Daten, arbeiten würden. Was leichter umzusetzen ist.

    Danke für Eure unendliche Gedult :)
  • SaschaX schrieb:

    zerm schrieb:

    Was Amin mit REST meinte, ist auf dem Server eine API über das Web zur verfügung zu stellen, die Deine Anfragen
    einfach an eine dortige Datenbank weiterleitet. In etwa um alle neuen Einträge zu bekommen, machst du ein HTTP GET
    auf example.com/api/sync/datum
    und um etwa eine gefundene Briefmarke aus Deiner DB an den Server zu übertragen, machst du ein HTTP POST an
    etwa example.com/api/put/briefmarke
    Das ist schon alles.
    Das klingt sehr einfach, genau wie die vielen positiven Kommentare die ich zum Thema "REST" gefunden habe. Leider finde ich nur nicht den richtigen Weg für mich bzw. das richtige Beispiel um es umzusetzen. Es klingt für mich nach einer soliden Lösung meines Problems.

    zerm schrieb:

    Oder willst Du einfach nur ein Backup Deiner Datenkbank auf den Server legen?
    Nein, das leider nicht!

    zerm schrieb:

    Also, Du willst nur die Daten jedes Nutzers einzeln auf einem Server speichern? Kann es da zu konflikten kommen?
    Wollen mehrere Nutzer die gleiche Datenbank verwenden? Hat ein Nutzer mehrere Geräte?
    Es handelt sich um ca. 250 User die täglich Ihre persönlichen Notizen via iPad/iPhone eingeben. Diese sollen in die (also in eine) Onlinedatenbank eingepflegt werden. Zudem müssen event. geänderte Datensätze zurück an die mobilen Geräte. Diese Änderungen erfolgen durch eine externe Anwendung die aber z.Z. keine Rolle spielt. Also es benutzen alle User die gleiche Datenbank. Die Datensätze sind durch die Benutzerkennung / UniqueKey gekennzeichnet. Somit greifen nie mehrere User auf einen Datensatz zu. Jeder User hat nur ein Gerät.

    Es wäre wünschenswert wenn alle User ihre Daten lokal auf dem Device hätten, aber es wäre auch zu vertreten wenn sie ausschließlich auf der Onlinedatenbank, ohne lokale Daten, arbeiten würden. Was leichter umzusetzen ist.

    Danke für Eure unendliche Gedult :)

    Hast Du Dir denn schon mal Gedanken darüber gemacht, wie Du die Daten auf den mobilen Geräten mit der Online-Datenbank synchronisieren willst ( = synchron halten) wilst ?
    :(
  • hpm schrieb:

    Hast Du Dir denn schon mal Gedanken darüber gemacht, wie Du die Daten auf den mobilen Geräten mit der Online-Datenbank synchronisieren willst ( = synchron halten) wilst ?
    :(
    Darum die Überlegung "nur" in einer Onlinedatenbank zu arbeiten. Ich habe das vielleicht ein wenig durch meine "rosarote Windows Brille" betrachtet, doch nehme ich an das es bei den ca. 300-400 Datensätzen pro User (sehr alte wandern ins Archiv) keine Probleme beim Sync gibt. Irre ich mich da? Das wären für alle User zusammen gerademal 100.000 Sätze.
  • Ich bin mit meinem Problem leider noch nicht weiter, habe mich konzeptionell jetzt aber für eine reine Online-Lösung entschieden. Sprich: DB soll auf einem Webserver liegen. Könntet Ihr mir dazu vielleicht noch einmal eine Hilfestellung geben? Ich habe keine Anleitung, Rezept oder Tuturial gefunden.
  • Du hast ja zwei Probleme: Du musst die API auf dem Server bereitstellen und du musst auf dem Client die Abfragen in Objective-C formulieren. Das Forum ist ja eigentlich nur für Teil 2 da.

    Im Band II gibt es von Christian Beispiele, wie man einen REST-Dienst anspricht.
    cocoading.de/webspace/Objective-REST.pdf

    Übrigens liefert ein REST-Service in der Regel eine ID pro Eintrag, die sozusagen einen Hash darstellt. Solange der sich nicht verändert, haben sich die Daten des Datensatzes nicht verändert. Hiermit ist ees einfach und schnell möglich, eine lokale Kopie des Dienstes zu erstellen, soweit Daten bereits abgeholt worden sind. Du musst dann nicht immer alles neu anfragen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Warum machst Du das Ganze nicht gleich als reine Web-Applikation wenn es eh nur online geht ? Da sparst Du Dir sehr viel Arbeit und ein wenig mit PhP rumwerkeln ist ja nun wirklich keine Kunst.

    GRuß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)