Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Private Online Datenbanken (https://www.delphipraxis.net/192830-private-online-datenbanken.html)

Whookie 23. Mai 2017 10:27

Private Online Datenbanken
 
Ich bin gerade am überlegen, ein kleines Projekt umzusetzen, um mit FMX/Android zu spielen. Es soll eine kleine Bücherverwaltung entstehen und dafür möchte ich eine Datenbank einzusetzen, die online zur Verfügung steht. Damit könnte man dann etwa Familienmitgliedern oder Freunden einen Zugang ermöglichen oder schnell mal im Bücherladen sehen ob die aktuellen Angebote schon irgendwo im Bücherregal vor sich hin vegetieren (alles mit der App, kein Webzugang oder ähnliches).

Wenn ich diese App weiter geben möchte, sollte jeder Nutzer natürlich seine eigene Datenbank pflegen können. Daher kommen wohl nur noch Dropbox und Konsorten als Cloud-Speicher in Frage(?).

Bei Google gab es mal die Base API (ist aber offensichtlich zur Shopping API mutiert). Die scheint nicht das Richtige zu sein?

Bei DropBox habe ich die DataStore API gefunden. Hat damit schon jemand Erfahrungen (mit Delphi) gemacht?

Kennt ihr noch andere Alternativen?

BrightAngel 23. Mai 2017 13:56

AW: Private Online Datenbanken
 
Hey :)

Also du hast grundsätzlich viele Möglichkeiten das umzusetzen: Entweder wie von dir beschrieben oder du besorgst dir einen Hoster deiner Wahl. Viele Webhoster haben schon mysql Datenbanken mit in Paketangeboten. Manche Anbieter legen den mysql Port nicht ins öffentliche Netz; das heißt, man hat dann nur per PHP direkt auf dem Server Zugriff zur Datenbank (und somit dann im Web z.B. durch das Webinterface phpmyadmin).

Das führt mich zur zweiten Lösung, die dich dann auch unabhängig von Datenbank oder Backendtechnologie X macht: Schreib dir ein kleines Backend, das auf dem Server den konkreten Datenbankzugriff vornimmt und das ganze nach außen per HTTP zugreifbar macht.

Wenn du das nicht in PHP machen willst, sondern lieber selbst in zum Beispiel Delphi stricken willst, dann eben einen virtuellen Server oder einen Rootserver mieten und das Programm dort als Service laufen lassen. Ich würde dir generell dazu raten ein Programm (ob nun in PHP, Delphi oder Brainfuck geschrieben) auf der Datenbank direkt laufen zu lassen und die Anfragen indirekt an die Datenbank zu stellen: Du bist flexibler was neue Versionen deines Programms angeht. Du hast es eventuell einfacher beim Migrieren. Du kannst weitere Chachelayer einfügen, falls das mal notwendig sein sollte.

Falls das eher ein kleineres Projekt ist, bei dem der Nutzerraum eher überschaubar ist, dann gibt es auch free-hoster wie z.B. square7.ch oder ähnliches, wobei ich da nicht sicher bin, ob diese Nutzung mit den AGBs vereinbar ist. Dann gibt es noch zum Beispiel uberspace.de, die man für spezielle Zwecke auch mal um was bitten kann. Des Weiteren kann man sich auch per DynDNS zu Hause zum Beispiel einen PI hinstellen auf dem dann das Konstrukt läuft (ist dann aber eben limitiert durch die Leistung des Systems und der Bandbreite deines Hausanschlusses, also will man das vielleicht nicht für öffentliche Anwendungen, die im AppStore sind...)

Gruß,
Brighty

Whookie 23. Mai 2017 15:00

AW: Private Online Datenbanken
 
Hi, danke für deinen Input, das mit einem der iNet Hoster habe ich mir auch schon überlegt, aber der Nachteil ist, dass ich dann - gesetzt den Fall so eine App geht wirklich in den Store - für alle User die DB bereitstellen müsste...

Ich hatte mir das eher so vorgestellt:
Es gibt ein paar "große" (wie Google oder DropBox oder OneDrive), die ohnehin für jeden einen persönlichen Cloudstore (und eben evetl auch eine DB) zur Verfügung stellen. In meiner App hab ich dann eine Art "Treiberschicht" die mal das DropBox API und mal das Google API zum Lesen/Schreiben von Daten verwendet. Die App selber bezieht ihre Daten über diese Schicht und wäre auch für andere Services erweiterbar.


Den Datenspeicher und die Bandbreite dafür stellt aber der User zur Verfügung...

Im Prinzip könnte ich zum Beispiel SQLite verwenden und die Datenbankdatei dann einfach in die DropBox legen, ich bin mir aber nicht sicher ob das mit gleichzeitigem Zugriff und Synchronisierung von mehreren gleichzeitig aktiven Clients problemlos läuft (und das von Anbieter zu Anbieter ähnlich stabil ist).

mkinzler 23. Mai 2017 15:31

AW: Private Online Datenbanken
 
Wenn public Cloud dann eher FireBase.

Zum direkten Zugriff auf einen DBMS würde ich auch nicht Raten. Besser Abstraktion z.B. per REST(ful) Service.

BrightAngel 23. Mai 2017 17:32

AW: Private Online Datenbanken
 
Zitat:

Zitat von Whookie (Beitrag 1372537)
Im Prinzip könnte ich zum Beispiel SQLite verwenden und die Datenbankdatei dann einfach in die DropBox legen, ich bin mir aber nicht sicher ob das mit gleichzeitigem Zugriff und Synchronisierung von mehreren gleichzeitig aktiven Clients problemlos läuft (und das von Anbieter zu Anbieter ähnlich stabil ist).

Ah! In diese Richtung willst du :) Ja, stimmt dann hast du etwas leicht anderes vor: So weit ich weiß, sind die großen Clouds alle versionierungsfähig (oder bieten zumindest Locks oder andere Arten der Konflikterkennung an: Eine Cloud muss ja Konsistenz von Daten als Kernfeature haben; also wird ein Produkt, dass das ernsthaft anbietet um eine Lösung des Problems nicht drumrum kommen...). Bei Dropbox zum Beispiel gibt es upload_session-append_v2 und ergänzende für große Files (>150MB). Dropbox vermeidet das Thema File Locks afaik, indem sie einfach nur ganze Revisionen erlauben. Wie man an list_revisions erkennen kann wird das mit Revisions gelöst.

Bei normalen, kleinen Uploads zum Beispiel gibt es noch das Teil "WriteMode" zum Ausklappen:
Zitat:

WriteMode (union)
Your intent when writing a file to some path. This is used to determine what constitutes a conflict and what the autorename strategy is.
In some situations, the conflict behavior is identical: (a) If the target path doesn't contain anything, the file is always written; no conflict. (b) If the target path contains a folder, it's always a conflict. (c) If the target path contains a file with identical contents, nothing gets written; no conflict.
The conflict checking differs in the case where there's a file at the target path with contents different from the contents you're trying to write. The value will be one of the following datatypes:
add Void Do not overwrite an existing file if there is a conflict. The autorename strategy is to append a number to the file name. For example, "document.txt" might become "document (2).txt".
overwrite Void Always overwrite the existing file. The autorename strategy is the same as it is for add.
update String(min_length=9, pattern="[0-9a-f]+") Overwrite if the given "rev" matches the existing file's "rev". The autorename strategy is to append the string "conflicted copy" to the file name. For example, "document.txt" might become "document (conflicted copy).txt" or "document (Panda's conflicted copy).txt".
Das Unterstrichene im Quote könnte für dich interessant sein: Durch die "rev" erkennst du dann Konflikte. Das war jetzt halt leider nur exemplarisch für den Dienst Dropbox. Ich würde glaube ich dann bei solchen Strukturen immer "bulk"-Updates machen: Also lokal die Datenbank schreiben bis man "speichern" drückt und dann einmal eine neue Revision durch hochladen erstellen und dabei auf Konflikte prüfen (und diese gegebenenfalls automatisch durch merge auflösen, falls möglich). Mit Sicherheit gibt es da eventuell auch schon was im Internet, aber ich fand das Thema grade spannend :D

Es gibt bestimmt auch schon Bibliotheken, die den Zugriff auf mehrere Clouds unter einem Interface vereinheitlichen, aber da kenne ich mich leider nicht aus und das macht auch nicht so viel Spaß: Ich nehme an, dass diese Interfaces sich ab und zu ändern. Die von mir verlinkten Seiten stammen aus der "Dropbox API v2". Afaik betreiben solche Cloud Storage Betreiber die verschiedenen API Versionen eine Zeit lang parallel, damit man Zeit zum migrieren hat (aber das ist dann halt "Wartung").

Ganz anderes Thema, welches ganz kurz abgefrühstückt ist: Nimm das WebDAV Protokoll. Es gibt Unterstützung durch private Clouds wie Owncloud oder Nextcloud (ja, die Teilen sich die Codebasis, ich weiß; aber es gibt bestimmt noch weitere Beispiele) oder auch im NAS Umfeld zum Beispiel die Synology (die dann vielleicht auch am Netz hängt?). Das ist so weit verbreitet, dass es von verschiedener Software (aber leider nicht immer ganz "Mainstream") implementiert wird. :)

Das soll jetzt erstmal als erster Überblick reichen :P

Brighty

pesi 24. Mai 2017 19:18

AW: Private Online Datenbanken
 
Ich hatte mir mal den Anbieter DO.DE angeschaut und da auch mal gezielt nach dem externen Zugriff auf die dort in den diversen Paketen vorhandenen MySQL Datenbanken gefragt.
Der Typ vom Support hat zumindest behauptet, dass man sich dann nur melden müsse und dann würden sie die DB auch für den externen Zugriff freischalten würden.

Ob es stimmt habe ich bisher noch nicht selber ausprobiert, aber eine erneute Nachfrage und ein Test wäre es ja vielleicht schon wert (falls Du MySQL einsetzen möchtest)

VG


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz