AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbanken auf externe Platten auslagern?
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbanken auf externe Platten auslagern?

Ein Thema von Delbor · begonnen am 6. Apr 2017 · letzter Beitrag vom 9. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Datenbanken auf externe Platten auslagern?

  Alt 6. Apr 2017, 15:52
Datenbank: egal • Version: aktuell • Zugriff über: egal/Firedac
Hi zusammen

Was spricht dagegen, eine Datenbank (zB. SQLite) auf einem externen Laufwerk anzulegen?

Wer meine Threads etwas verfolgt hat, weiss, dass ich für meine Bilderdatenbank aktuell MySQL verwende. Doch schon seit geraumer Zeit liebäugele ich damit, dafür SQLite einzusetzen, da meine Anwendung grundsätzlich keine Multiuserfähige DB benötigt.

Da die Anwendung Daten für eine Webseite erstellen soll, ist es erstmal egal, mit welchem DBMS sie das tut, weshalb sich meines Erachtens SQLite geradezu aufdrängt.

Nach Erstellung der Daten sollen diese allerdings zu einer Webserveranwendung, welche dann unter MySQL läuft, exportiert werden. Wie ich das bewerkstellige, weiss ich zur Zeit noch nicht detailliert, aber ich denke da schonmal an Datasnap; wie auch immer: das ist hier nicht Teil meiner Frage.

Die ist viel mehr:
Aufgrund des jetztigen DB-Modells soll unter SQLite mindestens eine neuue Datenbank erstellt werden.
Die jetzige DB umfasst
  • Felder für NEF-Dateien (Rohdatenformat aus der Kamera), Grösse aktuell 10 -24 MB.
  • Felder für BMP-Dateien ("Bearbeitungsformat"), im Schnitt gut 3mal so gross, wie die NEF-Bilder, und zu guter letzt:
  • Felderfür Jpegs. Deren Grösse ist letztlich Webseitenverträglich(Grösste Seitenlänge etwa 1200px).
  • Dazu kommen künftig noch Felder für Videodateien.
Meine Sammlung umfasst zur Zeit gute 13'000 Bilder im NEF-Format und wird natürlich weiter anwachsen.Zusammen mit bereits "von Hand" erstellten Bitmaps und Jpegs sowie einigen Videos füllen die Dinger mittlerweile eine 1-Terabyte-Disk. Grund genug, anzunehmen, dass die 2TB meiner DB-Disk (Intern) nicht allzulange vorhalten werden...

Die Lösung sehe ich darin, für die verschiedenen benötigten Formate jeweils eine eigene DB zu erstellen, und jede dieser separaten DB's muss sich auf einem beliebigen, auch externen, Laufwerk befinden.
Da aber gerade MySQL voraussetz, dass sich alle seine Daten im selben Verzeichnis befinden (es gibt, zumindest in der Community-Version nur ein DataDir), bin ich nicht sicher, ob mein Vorhaben (mehrere DBs auf verschiedenen externen Laufwerken) so ohne weiteres umsetzbar ist.

Ich hoffe, die Zielsetzung genügend gut beschrieben zu haben und freue mich auf eure Kommentare!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Was spricht dagegen...

  Alt 6. Apr 2017, 16:08
SQLite ist nicht gut geeignet, große Dateninhalte zu speichern, die Performance geht dann massiv in die Knie. Zumindest war das vor einigen Jahren noch so der Fall. Also falls du die Bilder IN der Datenbank speicher willst, ist SQLite wohl keine so gute Wahl.

https://sqlite.org/intern-v-extern-blob.html
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#3

AW: Was spricht dagegen...

  Alt 6. Apr 2017, 16:20
Hmm..


  • Felder für NEF-Dateien (Rohdatenformat aus der Kamera), Grösse aktuell 10 -24 MB.
  • Felder für BMP-Dateien ("Bearbeitungsformat"), im Schnitt gut 3mal so gross, wie die NEF-Bilder, und zu guter letzt:
  • Felderfür Jpegs. Deren Grösse ist letztlich Webseitenverträglich(Grösste Seitenlänge etwa 1200px).
  • Dazu kommen künftig noch Felder für Videodateien.
Meine Sammlung umfasst zur Zeit gute 13'000 Bilder im NEF-Format und

Puh..
Das sind Datenmengen..

Da dein Programm eigentlich wie ein DMS funktioniert und mit kein DMS bekannt ist, welches so große Dateien in seine DB speichert, solltest Du Dir vielleicht überlegen die Dateien nicht mehr in die DB zu packen, sondern extern und nur eine Verlinkung mit Tags und Co in der DB zu speichern.

Dann kannst Du auch SQLite verwenden..

Zusätzlich würdest Du auch dann noch an die Bilder kommen, wenn sich dein Datenbank-File auf der Externen HD aufgrund einer Engergie-Sparoption verabschiedet
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Was spricht dagegen...

  Alt 6. Apr 2017, 16:20
SQLite ist nicht gut geeignet, große Dateninhalte zu speichern, die Performance geht dann massiv in die Knie.
Kann ich bestätigen.
Als wir eine alternative zu ADS Local Server gesucht hatten wurde auch SQLite getestet.
Keine Fehler gefunden was SQL-Abfragen betrifft, aber die Performance war unter alle Kanone.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Was spricht dagegen eine SQLite-DB auf einem externen Laufwerk anzulegen?

  Alt 6. Apr 2017, 16:23
Weiterhin spricht dagegen, das dies ein unausagekräftiger Thread-Titel ist.


Edit: Damit ich nicht nur mecker: Bei dem was du dann in die DB packen willst, wäre vllt. eine NoSQL Datenbank mal ein ganz anderer Ansatz?
Ralph

Geändert von Jumpy ( 6. Apr 2017 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Was spricht dagegen...

  Alt 6. Apr 2017, 16:38
Solange SQLite lokal als Singleuser läuft, gehts auch bei mir mit der Performance (ok..hab nur einige 100 GB Daten).

Da das ganze ins Web soll, würd ich, wie Jumpy schon hingewiesen hat, auf eine NoSQL-Datebank setzten (evtl. mit Elastic Search als Engine). Das kommt recht sicher mit sehr großen Datenmengen klar und bietet den Vorteil skalibar zu sein (Build in).

D.h. sollte in DB-Server nicht mehr ausreichen, hängst du einfach einen zweiten rein und das System kümmert sich darum, woher der Datensatz kommt.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Datenbanken auf externe Platten auslagern?

  Alt 6. Apr 2017, 17:04
Ich habe den Titel mal angepasst.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Datenbanken auf externe Platten auslagern?

  Alt 6. Apr 2017, 17:38
Zitat:
Was spricht dagegen, eine Datenbank (zB. SQLite) auf einem externen Laufwerk anzulegen?
Nichts solange Du das lokal machst. Sobald die Daten Teil eines Ganzen sind mußt Du in diesem System mindestens die Abfrage haben od die Daten vorhanden sind und falls Nein wie das System damit umgehen soll. Ich halte ein USB-Laufwerk als Datenspeicher in diesem Zusammenhang für eine Bastellösung, über ein HotswapLW kann man vllt. diskutieren, aber wenn Du wirklich eine Webseite füttern willst, dann sollten Deine Stichworte Raid und ggf. SSD lauten.
Ichg habe vor vielen Jahren eine Abteilungsdatenbank mit externen (SCSI)Laufwerken betrieben, das willst Du Dir nicht ernsthaft antun.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Datenbanken auf externe Platten auslagern?

  Alt 6. Apr 2017, 18:45

Was spricht dagegen, eine Datenbank (zB. SQLite) auf einem externen Laufwerk anzulegen?

Wer meine Threads etwas verfolgt hat, weiss, dass ich für meine Bilderdatenbank aktuell MySQL verwende. Doch schon seit geraumer Zeit liebäugele ich damit, dafür SQLite einzusetzen, da meine Anwendung grundsätzlich keine Multiuserfähige DB benötigt.

Die Lösung sehe ich darin, für die verschiedenen benötigten Formate jeweils eine eigene DB zu erstellen, und jede dieser separaten DB's muss sich auf einem beliebigen, auch externen, Laufwerk befinden.
Da aber gerade MySQL voraussetz, dass sich alle seine Daten im selben Verzeichnis befinden (es gibt, zumindest in der Community-Version nur ein DataDir), bin ich nicht sicher, ob mein Vorhaben (mehrere DBs auf verschiedenen externen Laufwerken) so ohne weiteres umsetzbar ist.
Also bei SQLite spricht nichts gegen ein externes Laufwerk. Außer dass man die mal versehentlich abklemmt und das auch eine SQLite DB vielleicht nicht überlebt (ähnlich wie ein FileCopy in einer laufenden mySQL Instance schwerlich funktioniert)
Erinnere ich mich richtig, dass Du mit der mySQL DB "Schwierigkeiten" hattest, nachdem Du Dateien im laufenden Betrieb kopiert hast?

Falls ja oder auch falls ich mich vertue:
Ich krieg bei solchen Fragen leichtes Magenzwicken. (Der Thread mit der defekten mySQL DB steckt mir wahrscheinlich noch irgendwo quer)

Ich kann verstehen, wenn Du mit SQLite Komplexität abbauen willst gegenüber mySQL. Aber ich habe Zweifel, ob Du da richtig dran gehst.

zuerst: Auch wenn SQLite nur noch eine Datei ist, sowas gehört allenfalls als Backup oder vielleicht in Form eines Netzlaufwerks nicht auf eine lokale Platte.
Wie DB auf Verbindungsabbrüche, Schreibstörungen, .. reagieren kann man in dem erwähnten Thread nachlesen. Das gilt auch für DB, die nur aus einer Datei bestehen.
Dass Du fehlende Multiuserzugriffe anführst, zeigt ja, dass Du Dir Gedanken gemacht hast, aber wenn es um meine eigenen Daten geht und davon noch Terrabyte, würde ich mir recht viele Gedanken machen.

zweitens: gleichförmige Daten in verschiedene Tabellen oder sogar Datenbanken zu speichern ist möglich, aber erhöht den Programmier / Adminaufwand unnötig. Es muss halt alles 2x, 3x, 5x gemacht werden und im Zweifel muss es sogar noch konsistent sein.

drittens: wenn man Daten in diesem Volumen bewegt, will man das gar nicht monolitisch in einer Datei haben. Auslesen und Befüllen, Hoch- Runterladen will man in bequemen Häppchen machen, asynchron, internet / Bandbreitenfreundlich

4tens
"Da aber gerade MySQL voraussetz, dass sich alle seine Daten im selben Verzeichnis befinden .."
Vergiß diese Gedanken einfach, fast jedes RDBMS, dass mehr als eine Datei benötigt (also nicht SQLite, sondern alles was größer ist), erwartet einen Dateizugriff nach klaren Regeln. Die sollte man einhalten.
Datentransport erfolgt demnach per Backup/Restore, Export/Import, ..
Also egal wieviel Dateien und wo sie liegen und was (scheinbar) an oder aus ist, Datenbankdateien werden nicht kopiert, ob by mySQL oder anderswo (Ausnahmen habe ich genannt und sollten nur gemacht werden, wenn die Doku zweifelfreie Wege beschreibt, das zu tun)

Zu Deiner Frage: Für die Datenverwaltung ausschließlich mit gespeicherten Links (Basispfade + relative + Dateinamen) zu arbeiten wurde ja schon vorgeschlagen. Das scheint mir hier ein brauchbarer Ansatz, weil Zitat "kein Multiuserzugriff". Du musst also die Inhalte nicht besonders schützen (vor multiplen Usern) und kannst vermutlich bei Fehlbedienung oder Störung auch persönlich eingreifen und korrigieren.
Wenn Du mit solchen Links arbeitest, ist es dennoch sinnvoll, die Ziele der Links, Deine Dateien vor ungewollten Änderungen zu schützen.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Datenbanken auf externe Platten auslagern?

  Alt 6. Apr 2017, 18:56
Zitat:
... fast jedes RDBMS, dass mehr als eine Datei benötigt (also nicht SQLite, sondern alles was größer ist ...
Wobei die Anzahl der Dateien eines RDBMS ja nichts über es aussagt
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 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