Welche Datenbank ist das richtige für mich?

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

  • Welche Datenbank ist das richtige für mich?

    Hallo,

    Ich möchte eine App erstellen welche mir Daten zu Verschiedenen Kunden abspeichert (Anschriften, Notitzen, Offene Bestellungen, Bilder, videos etc).
    Großer Knackpunkt: Die App muss Offline Daten abrufen können, bedeutet ich muss ja immer ein abbild der datenbank local speichern (zumindest die textdateien).
    Je nachdem wie gut es sich umsetzen lässt wäre es toll wenn man in der Lage ist auch offline neue Einträge hinzuzufügen (sobald eine Internet Verbindung existiert sollen die änderungen automatisch hochgeladen werden).
    Dabei ist wieder das Problem das das ganze über mehrere Handys läuft. Je nachdem wie lange ein Handy nicht verbunden war, besitzt es eine uralte datenbank. Wie bekomme ich es hin das derweil neue einträge dadurch nicht einfach überschieben werden sondern es nur Einträge ergänzt/die datenbank Merged?

    Zudem sollte das ganze irgendwie verschlüsselt sein da es kundendaten sind... Die FTP übertragung lässt sich ja soweit ich gelesen habe via TLS verschlüsseln. Allerding die Speicherung Local? Man soll ja nur die daten sehen können für die man auch die berechtigung hat.

    Bisher habe ich nur Erfahrung mit Firebase. Wie ich gelesen habe eignet sich Firebase allerdings nicht ganz so gut um große Daten in unmengen zu speichern.

    Meine Grund Idee bestand jetzt darin einen ungenutzten Rechner in einen FTP Server zu verwandeln. Soweit getan, bisher lassen sich nun Daten vom Handy auf den Rechner schicken.

    Jetzt stellt sich mir nur die Frage wie man sowas sinnvoll umsetzt? Im Internet liest man oft von einer SQLite Datenbank? Oder doch lieber eine Hierachie Datenbank wie ich es von Firebase schon gewohnt bin? Ist mir noch recht fraglich wie man das alles generell flexibel in eine Tabelle speichern soll... Da ist mir die Hierachie doch einiges logischer xD
    Alles in eine Textdatei speichern oder mehrere unterodner?

    Wie würdet ihr das ganze angehen um allen Anforderungen gerecht zu werden?
    Ist das mit dem FTP Server überhaupt eine Sinnvolle Idee gewesen oder gibt es dafür schönere Varianten?
  • Auf dem Gerät selber bietet sich SQLite natürlich an (außer für Bilder und Videos).

    Für das Mergen würde ich einen update-counter empfehlen.

    Für den Upload würde ich eher auf ein HTTPS basiertes Protokoll setzen, da man hier die wenigsten Probleme mit Proxys/Firewalls hat.

    Beim Synchronisieren im Hintergrund kann gute Erfahrungen mit WorkManager/JobScheduler gemacht.

    Viel Ergolg
    Gruß
    Michael
  • Okay also auf dem Gerät selbst eine SQLite Datenbank. Das mit den Bildern würde ich in dem Fall eventuell mit verweisen lösen, welche mir aufzeigen wo das Jeweilige bild dann zu finden ist.

    SQLite arbeitet ja wie eine tabelle, wie würde man sowas ordnen das es Struktur hat?

    Quellcode

    1. User:
    2. Hans:
    3. Adminrechte: false
    4. Alter: 19
    5. Kunden:
    6. Kundenid:
    7. Objekte:
    8. Haus1:
    9. Adresse: Straße
    10. Kundenid:
    11. Objekte:
    12. Kundennotiz: (string...)
    Alles anzeigen
    Etc.

    Wie sollte sowas in tabellen form aussehen?
    Ich könnte mir das in etwa so vorstellen
    Tabelle Kunde:
    KundenId Objekte Kundennotiz. Adresse
    1. Haus1. - Straße sowieso
    2. - (string)
    3....
    Jetzt wären von oben nach unten alle kunden durchnummeriert, allerdings muss ja nicht jeder kunde nur ein Objekt haben, wie speiche ich nun haus2 und dem seine dazugehörige Adresse ab?


    Ein Update Counter zählt ja dann immer mit wenn etwas geändert wurde. Dann weiß ich zwar schonmal das ich es nicht einfach hochladen kann.
    Für das mergen selbst werde ich mir wohl eine funktion schreiben müssen die sobald die Versionsnummer nicht übereinstimmt, mir beide Datenbanken irgendwie verschmilzt oder? Klingt mega aufwendig

    HTTPS sagt mir nur soviel das sich damit sicher eine Website darstellen lässt... Also einfach gesagt ist es eine verschlüsselungsform? Bei meinem FTP Server (Filezilla) habe ich allerdings nur die Möglichkeit TLS/SLL oder SSH auszuwählen.

    Sorry kenne mich damit noch garnicht aus
  • Über die Datenbank würde ich gar nicht so viel nachdenken. Verwende erzeuge einfach die Objekte, wie Du sie brauchst und nutze dann die Room Annotations (android-entwickler.com/sqlite-…tt-fuer-schritt-erklaert/)

    Bei dem UpdateCounter gibt es eigentlich nur 3 Fälle, die Du unterscheiden musst.

    1. Daten auf dem Server haben sich geändert => Also auf dem Handy aktualisieren
    2. Daten auf dem Handy haben sich geändert => Also auf dem Server aktualisieren
    3. Daten haben sich auf Server und Handy geändert. In so einer Ausnahme muss der Nutzer entscheiden, welche Daten nun korrekt sind
  • Hallo
    Ich denke es ist nicht so wichtig wie du die SQLite DB anstichst ob nun direkt oder mit Room, sondern das dir das Gundverständnis etwas fehlt.


    Als erstes solltest du dich mal etwas mit dem Thema Datenbanken besonders Relationale Datendanken (SQLite) auseinander setzen.
    Dabei spielt es auch keine Rolle auf welche System die DB läuft. Relationale DB werden in Tabellen gespeichert nicht on Objekten wie es bei Firebase ist.
    Da wird im allgemeinen nicht alles in einer Tabelle gespeichert sondern in mehreren die dann in Beziehung zueinander sind. 1-n , n-1, 1-1 …
    Schon bei einer einfachen Adressen Verwaltung ist nicht alle in einer Tabelle. Bestellt der Kunde dann auch noch was ist das ja ein auftrat und da wird dann auch wieder eine Tabelle sein.
    Das Thema Datenbanken und den auf bau solltest du die wirklich erst mal anschauen.


    Zu dem Thema das mit FTP machen zu wollen würde ich auch nicht machen . Da müsstest du auch die Zugangsdaten komplett in der APP speichern.


    Für das ganze Thema DB wirst du auch nicht um das Thema SQL drum rum kommen.
    Auch da sollest du dir erst mal die Grundlagen ansehen dabei wirst du auch verstehen wie ein DB aufgebaut wird und welche Struktur für dich sinn voll ist.


    Frage zum Thema Ftp /http,https.
    Wie hast du dir es den vorgestellt mittels Ftp auf deine MySQL Datenbank auf dem Server zuzugreifen?


    Eigentlich macht man das über Http Get und Post Befehle. Auf dem Server läuft meistens ein PHP Script was die Kommunikation zwischen der App und der MySQL mittels Http,Https steuert.
    Dort werden auch die Zugangsdaten der MySql gehalten. Auch hier auf dem Server und am besten gleich in deiner DB sollte auch die User Verwaltung stattfinden.
    Das müsstest du auch selber schreiben oder fertige Systeme benutzen Bz. ein REST System.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • jogimuc schrieb:

    Als erstes solltest du dich mal etwas mit dem Thema Datenbanken besonders Relationale Datendanken (SQLite) auseinander setzen.
    Das kommt definitiv allerdings hab ich gern gleich eine App um das gelernte in die Tat umzusetzen. Dafür muss ich aber wissen mit welcher Datenbank ich mich jetzt auseinander setzen muss.


    jogimuc schrieb:

    Frage zum Thema Ftp /http,https.
    Wie hast du dir es den vorgestellt mittels Ftp auf deine MySQL Datenbank auf dem Server zuzugreifen?
    Naja mehr so vermutungen wie so etwas funktioniert. Meine Grundidee bestand darin einfach alles in diese SQLite datenbank zu speichern. Diese Datei der Datenbank hätte ich dann hoch oder runtergeladen.

    So wie sich das anhört werde ich die Idee mit einem privaten Server vergessen können.
    Wie sich das anhört werde ich, ohne noch PHP zu lernen zu müssen, mir einen MySQL Datenbank Hoster suchen und werde anhand dem dann mal das alles versuchen zu lernen.


    Ein paar letzte fragen:
    • Wenn ich auf dem Handy eine SQLite Datenbank aufbaue. Und bei meinem Server eine MySQL Datenbank habe. Lässt sich das überhaupt so einfach mit Android Studio convertieren?
    • Könnt ihr mir vielleicht günsige Anbieter für eine MySQL Datenbank empfehlen?

    michael schrieb:

    Auf dem Gerät selber bietet sich SQLite natürlich an (außer für Bilder und Videos).
    Wie speichere ich den nun Bilder? Einfach den Speicherort in die Datenbank eintragen und irgendwann so auslesen? So hat man doch das Problem das jeder Benutzer seine Ordner auf dem Handy durchstöbern kann und so ohne App die Bilder einfach anschaut :/

    Und wie sieht das dann mit der Online Datenbank aus? Bietet sich MySQL überhaupt an um Bilder zu speichern oder brauch ich dann noch zusätzlich einen webspace zum speichern?
  • Theoretisch ist das machbar die DB der lokalen sqlite auf einen Server hochzuladen und zusprechen. Nur bei ftp müsstest du auch die zugangsdaten in der App Speichen nicht gut. oder deinen ftp server ohne log in machen.
    Ich würde da auf jedenfalls ein php Script benutzen imm das zuhandeln. Wirst du für deine versions Kontrolle auch brauchen.


    Frage warum willst du nicht bei firebase bleiben? Du hast dort auch einen storage in dem du die Bilder ablegen kannst.
    An wieviele Zugriffe tragic und speicher hast du gedacht?
    Ein Feedback auf Tipps ist auch schön. :P
  • Nur mal Interessehalber: Warum ist es schlecht die Zugangsdaten mit in den Code zu speichern? Ich dachte immer der Code wäre als APK datei nichtmehr einsichtbar...
    Der FTP Server ohne Log in wäre doch noch viel unsicherer oder? O.o

    Problem dabei nur das ich nochnichtmal Java Anständig beherrsche, da fang ich besser nicht noch mit PHP an. xD
    Wieso überhaupt so ein PHP Script? Kann man nicht einfach die Datei hochladen und fertig?
    Meine Grundgedanke war bisher: (da ich nicht weiß wie SQLite speichert nehmen wir mal textdatein) ich erstelle eine textdatei schreibe oben Version1 und unten drunter meine sachen und lade es mittels FTP hoch. Handy zwei greift auf Datenbank zu und läd sich die textdatei runter. in der app wird dann die textdatei nach den sachen durchsucht die man braucht und zusammen mit der version auf V1.2 geupdatet. danach wird es wieder hochgeladen und überschreibt meine alte datenbank einfach.

    Anscheinend vergesse ich irgendeinen Aspekt oder wozu wird dieses Script gebraucht?

    An sich würde ich dort gerne bleiben. Allerdings habe ich irgendwie angst das das ganze dort teuer werden könnte.
    Noch versuche ich diese App einfach für mich zu schreiben da es mein arbeitsleben wesentlich vereinfachen könnte (drehe durch mir den ganzen scheiß im kopf zu merken und dann dieser anfallende papierkram der anfällt und dann irgendwo verlegt wird...)
    Wenn das allerdings gut klappt werden vermutlich alle in der Firma nutzen wollen die im Außendienst tätig sind. Daher der Gedanke das ganze gleich so anzupassen das es flexibel für mehrere Benutzer funktioniert.
    Da bei uns so um die 50 Personen arbeiten kommt da einiges an daten zusammen... Nehmen wir an jeder speichert so 3 bilder am tag mit 2Mb. Damit wären die Kostenlosen 5 GB bei Firebase in 17 Tagen überschritten.
  • Zu der Frage warum es gefährlich sein kann die kompletten Zugangs Daten in apk zu Speichen.
    Eine apk ist mit einem Java dekomplier leicht zurück ui übersetzen. So mit kommt der jenige an deine Daten.

    Das php läuft auf dem Server und da ist es schiriger an deine Daten zu kommen. Für richtige Sicherheit gibt es Authentifizierungs Server. Application-Server.
    Der dann deine zugangsdaten zum ftp oder der MySQL zu verwaltet.

    Wenn es sich um Firmen Daten handelt würde ich von dem Prinzip die sqlite Datei auf dem Server hochzuladen abraten.
    Das ist früher oder später zum scheitern verurteilt.

    Das ist auch keine text datei. Sondern eine Datei in der die gesamte Datenbank enthalten ist. In der Datei sind alle Tabellen und Daten.

    Nur zur Info eine große DB wie MS SQL. Orakel oder auch MySQL speicherst das in verschieben proprietären Dateien da hast du keinen Einfluß drauf. Sqlite ist eine kleine Mini ein Datei DB. Da wird alles in einer Datei gespeichert.

    Du willst bestimmt auch nicht das jeder deine Daten die du in die DB geschrieben hast lesen und verändern kann.
    Genau das wäre bei dem Prinzip möglich.


    Als kostenlose Variante bitet sich mysql an.
    Dort kannst du alle User verwalten und ihnen geben was sie sehen dürfen. Diese Daten werden dann meistens im json Format an den Claint übermittelt.
    Willst du sie dann local speichern bietet sich eine locale sqlite an.
    Daten Austausch macht man üblicherweise im json Format. All das muss deine php scripte oder eine fertige Rest Api machen.

    Ist schon eine recht große Herausforderung für einen Java neuling.

    Viel Erfolg.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von jogimuc ()

  • So langsam wird es mir auch klar... Eventuell ist das echt etwas viel für den anfang

    Ich denke ich versuche es mit Firebase hinzubekommen da ich damit ja schon etwas Erfahrung habe.
    Danach kann ich mich ja immernoch mit dem Thema PHP auseinandersetzen und das fehlende wissen aufarbeiten

    Danke für eure Antworten :)