Datenbank Design
Gorginio
- datenbank
Hallo miteinander,
Ich haette mal eine komplexere Frage.
Also ich muss eine Datenbank anlegen, die aus einigen tables besteht, wobei ich einen Haupttabelle habe. Dieser wird ca. 6000 records beinhalten und soll unter anderem auch binary files (hauptsaechlich bitmaps und pdf files) speichern.
Pro Eintrag koennen dann bis zu 20 binary files anfallen, die im Schnitt 2-3 MB gross sind. Einige von diesen werden aber 10 MB gross werden.
Fuer die Entwicklung habe ich mit einem Probeset in Access angefangen und bei Abschluss wird das ganze auf einen SQL Server umziehen.
Nun die eigentlichen Fragen.
Wenn ich nun die binary Daten in einem separaten table speichere, wieviel Performancevorteile habe ich dann ca?
Weiters weiss ich nicht genau viele Files pro Eintrag anfallen. Wenn nun mittels upload die Anzahl an vordefinierten binary Feldern erschoepft ist, ist es dann moeglich die Anzahl der Felder dynamisch (sprich automatisch)zu erweitern?
LG
Gorginio
Servus,
wenn Du das Dateihandling einfach einem Filesystem überlässt und die reine Datenhaltung der Datenbank, hast du di beste performance.
Mir ist unschlüssig und völlig unverständlich, warum manche Leute meinen, man muss unmengen an binary Dateien in eine Datenbank pferchen.
Ich würde es nicht tun und spreche aus Erfahrung.
Gruss Matze
Wie sollen denn bitte die Leute einen online upload machen ohne das File in die DB zu schupfen, sodass man die Files auch wieder findet?
Hast du ein Beispiel fuer Asp.net, wie das gehen soll mit Filesystem und hyperlink?
LG
Gorginio
Hallo,
ob das ASP kann weiss ich nicht, PHP kann es!
Ich habe es in einem etwas größerem Projekt(mom. ca. 80.000 Blobs, 40GB) so gelöst:
Eine Tabelle in der du deine Kopfdaten hast.
Eine Tabelle in der du deine Dateidaten hast (blobid, mimetype, filename, usw.)
Eine Tabelle in der die Blobs liegen (blobid, filedata)
So hast du in den Tabellen in denen du suchst (beispielsweise nach dateinamen) eine hohe performance und wenn du einen blob brauchst zum rausholen dann kannst du ihn über die blobid referenzieren.
Und wenn du zwischen der 1. und der 2. Tabelle eine 1:n Beziehung machst dann kannst du auch die Anzahl der Files pro Datensatz dynamisch halten.
Gruß
Stephan
Wie sollen denn bitte die Leute einen online upload machen ohne das File in die DB zu schupfen, sodass man die Files auch wieder findet?
Du speicherst sie einfach irgendwo ganz normal in einem Ordner (bzw. Unterordner, der z.B. die Kundennr. als Name hat) und speicherst den Pfad des Bildes in der Datebank.
Gruss,
Daniel
PS: http://www.aspforum.de ;-)
yo,
Mir ist unschlüssig und völlig unverständlich, warum manche Leute meinen, man muss unmengen an binary Dateien in eine Datenbank pferchen.
die verwaltung wird einfacher, da alles zusammen in einer datenbank steht...
Ilja
Servus,
die verwaltung wird einfacher, da alles zusammen in einer datenbank steht...
Ob die geringfühgig einfachere Verwaltung die unnötige Belastung eines DMBS Systems rechtfertigt?
Eine Datei in die DB pferchen oder auf dem Filesystem abzulegen dürfte vom Aufwand kaum grösser sein.
Gruss Matze
yo,
Ob die geringfühgig einfachere Verwaltung die unnötige Belastung eines DMBS Systems rechtfertigt?
das kann man so pauschal nicht sagen. wenn die performance ok ist oder nur eine untergeordnete rolle spielt, dann kann es durch aus sinn machen, die betonung auf eine einfache verwaltung zu legen.
Eine Datei in die DB pferchen oder auf dem Filesystem abzulegen dürfte vom Aufwand kaum grösser sein.
doch, je nach dbms können dabei erhebliche unterschiede in den möglichkeiten der verwaltung bestehen.
Ilja
Servus,
doch, je nach dbms können dabei erhebliche unterschiede in den Möglichkeiten der Verwaltung bestehen.
Wenn Du Dich gewissermassen in Abhänigkeit z.B. proprietärer Oracle Technik begeben willst....
Ich kann davon nur abraten, da jedes Filesystem schneller Dateien liefert als ein DBMS dazu in der lage ist.
Sofern Du wenige Dateien und dazu auch kleine Datein in der DB verwaltest mag das ja noch erträglich sein.
Grössere Mengen bringen auf jeden Fall erheblicheProbleme und einen erheblichen Verwaltungsaufwand mit sich.
Vom extremen Speicherverbrauch mal abgesehen.
Was jedoch eines meiner Hauptargumente gegen Dateien in DMBS System ist: aufgelähte Datenbank Dateien und ohne DB Zugriff keine Chance mehr an de Dateien heran zu kommen.
Für eine "lächerliche" Text in Datei Suche, musst Du dann jedes mal das DB System belasten während bei einer filesystem ablage die eben sehr performance schonend durch ein andres Tool realisiert hätte werden können.
Backup belastet jedes mal das System, bremst die DB aus, oder es muss sogar die DB abgeschaltet werden.
Das mit der grösse der Datenbankdateien auch die Dauer des Backup Vorganges sowie die damit verbunde offline Zeit erhöht ist auch klar.
Davon abgesehen, dass sich die Daten physikalisch mit einem sehr viel höherem Aufwand umziehen lassen.
Gruss Matze
yo,
ich selbst halte nicht viel von festen meinungen. ich bevorzuge mir alle möglichkeiten offen zu halten und je nach situation und vorgaben zu entscheiden. sicherlich kannst du argumente auflisten, die dagegen sprechen. auf der anderen seite könnte ich dies ebenfalls ohne probleme für die benutzung eines dbms tun. dieser umstand allein zeigt mir schon, dass eine pauschale aussage hier nicht immer zum besten ergebnis führt.
letztlich haben sich dbms gegenüber den direkten zugriff auf daten durchgesetzt, weil man einfach vor grossen problemen gerade durch die unabhängigkeit stand. sicherlich muss man immer noch von fall zu fall prüfen, ob dass immer sinn macht. aber man kann eben keinen der beiden wege komplett ausschließen.
deine betonung liegt sehr stark auf schnelligkeit, größe der daten und unabhängigkeit. aber zum einen erkaufe ich mir die unabhängigkeit eines einzelnen programms mit der abhängigkeit mehrerer pogramme und unterschiedlicher datenstrukturen. und deshalb würde ich dem ein wort entgegenhalten, aus dem letztlich dbms entstanden sind, nämlich entwicklung, bzw. wachstum oder veränderung.
mit der abhängigkeit zu einem dbms gewinnt man die unabhängigkeit zu wachsen und zwar in einem zeitlich und kostenreduziertem fenster, der letztlich für die unternehmen den größeren ausschlag gemacht hat. systeme, die direkt auf die daten zugreifen, sind stark auf bestimmte situationen optimiert und erscheinen im ersten moment vorteilhaft (kleiner, schneller). stillstand bedeutet aber den sicheren tod für jedes unternehmen und damit fangen dann die probleme an.
ich will gar nicht auf alle einzelnen argumente eingehen, zumal ich vieles auch anderes sehen würde. dbms bieten nicht nur nachteile, sondern auch vorteile, die es so nur durch die benutzung eines dbms gibt. deshalb solltest du vielleicht noch mal deine strikte abneigung überdenken und von fall zu fall entscheiden.
Ilja
Servus,
ich spreche hier nicht davon, dass Daenhaltung in DBMS nicht zu suchen hat.
Aber Dateien vor alle Binäre dort fehl am Platz sind.
Du kannst Argumente aufliesten? Das hast Du aber nicht getan.
Das einzige was du gesagt hast, war eine allgemeingültge Aussage über DB und deren einsatz.
aber Datenbanken sind nunmal keine Dateisysteme.
Das hat nicht`s mit Sturheit oder dem unwillen zu tun sondern einfach mit dr Erfahrung, dass die Nachteile überwiegen.
Gruss Matze
yo,
letzlich liegen alle daten in binärer form in irgend welchen dateien vor.lass uns mal anders rangehen, um die situation deutlicher zu machen. ich werde in deine rolle schlüpfen und du in meine, aber bei einem anderen thema, das aber ähnlich gelagert ist. dann wird der zusammenhang deutlicher. und alles zu beschleunigen, werde ich ein wenig für deinen part postulieren....
Ilja: Sage mir mal, welche programmiersprachen du alles kannst.
Matze: C, C++, PHP, HTML, Java....
Ilja: aber diese programmiersprachen erzeugen doch alle unötigen ballast, sind langsamer als wenn ich gleich in maschienensprache programmieren würde. ausserdem macht man sich auch noch von einem compiler abhängig.
Matze: Yo, das stimmt schon, aber die höreren programmiersprachen sind für den umgang mt menschen viel besser. und da es noch immer die menschen sind, die programme schreiben, muss man werkzeuge schaffen, mit dem man auch real arbeiten kann, um komplexe aufgaben zu lösen, damit die programmierer mit den wachstum der unternhemen mithalten können.
ich glaube, mit dieses bespiel macht die vorteile von höeren programmiersprachen deutlich. je nach situation programmiert man direkt in assembler code oder benutzt für komplexe aufgaben höhere programmiersprachen. genauso sollte man auch an dbms rangehen.
Ilja
Servus,
sorry aber das Beispiel ist ziemlich Banane.
Es erklärt mir keine Falls, warum man Leistungseinbusen aktzeptieren soll, wenn man anstatt /usr/ilja/meinedateien/test.pl per
Select Perlscript from Dateien weher usw.
Nur mal so am Rande. Es gibt dinge die kann man gerne anderster anpacken wenn man es unbedingt will.
Mir fehlt jedoch eines von Dir. Eine Begründung was daran ernsthaft besser ist und was entsprechenden Performance verlust rechtfertigt.
Das Du als Datenunabhängikeit sagtest kann ich nicht nachvollziehen.
Ob im Filesystem oder in der DB gehalten, wo sindda meine Daten Unabhängg?
Beides mal benötige ich eine möglichkeit wieder dran zu kommen.
Dank Samba etc. habe ich mit shares kein Problem und bin "Platform unabhängig".
Gruss Matze
use Mosche;
Mir ist unschlüssig und völlig unverständlich, warum manche Leute meinen, man muss unmengen an binary Dateien in eine Datenbank pferchen.
Ich habe das noch nie gemacht, aber daß häufige hiesige Argument dagegen ist ja, daß man für den Dateizugriff häufig eine weitere Datenbank-Abfrage benötigt (häufig im Zusammenhang mit Web-Programmierung erwähnt). Wenn man über HTTP nämlich dann eine solche Ressource benötigt, wird in der Tat ein weiterer (Script-)Zugriff und ein Datenbank-Zugriff benötigt, was durch ein Halten im Dateisystem überflüssig wäre.
Web ist allerdings nicht das einzigste Einsatzgebiet von Datenbanken. Verteufel das ganze nicht so, es gibt sicherlich Einsatzszenarien, in denen das sinnoll ist.
use Tschoe qw(Matti);
Servus,
bislang kenne ich keien Anwendungsfall, der deratige Performance Einbusen, sowie damit entstehende Probleme rechtfertigen.
Einen vorteil kenne ich bis Dato nicht.
Das enzigste was Oracle z.B. als vorteil verkauft, ist der einsatz derer proprietärer Technik hierfür.
Dass dise zusätzlich unnötige Performance benötigt ist auch klar.
Nenn mir einen plausiblen Grund und ich werde es nicht mehr verteufeln.
Gruss Matze
Ilja
Nenn mir einen plausiblen Grund und ich werde es nicht mehr verteufeln.
datenunabhängigkeit.
Ilja
Servus,
datenunabhängigkeit.
?!? Du bist immer noch abhängig.
Ob eine Datei auf dem Filesystem odr der DBMS liegt ist irrelevant.
Das ändert an der Datenabhänigkeit nicht`s.
Oder was macht es nach eine Aussage Daten unabhängig?
Nur weil Du meinetwegen per JDBC Verbindung Daten und Dateien übermittelst?
Es wäre ganz schön dumm eine DB Verbindung damit unnötig zu belasten.
Gruss Matze
use Mosche;
bislang kenne ich keien Anwendungsfall, der deratige Performance Einbusen, sowie damit entstehende Probleme rechtfertigen.
Performance-Einbußen entstehen doch nur dann, wenn tatsächlich irgendetwas zusätzlich gemacht werden muß. Tatsächlich kann ich mir vorstellen, daß es Bereiche gibt, in denen die Datenhaltung in der DB Vorteile bringt.
Bsp: _Du_ verwaltest ein Verzeichnis, in dem deine gesamten Dateien liegen. Das kann mitunter ja auch recht groß werden, so daß das Suchen nach _einer_ Datei lang dauern kann. Ein DBMS ist gerade dafür gemacht, daß es Daten effizient sucht (und du kannst es dafür noch optimieren). Du kannst natürlich auch den FS-Treiber deines Lieblings-Betriebssystems umschreiben, damit es auch Indizes verwendet.
use Tschoe qw(Matti);
Servus,
je nach Betriebsystem kann es die DB immer noch nicht schneller.
Es gibt sehr schnelle und nützliche Werkzeuge für das durchforsten
von Beispielsweise Textdateien.
Unter unix gibt es hierfür AWT usw.
Unter einer DB: Müste erst mal auf das jeweilige Datenbankdatei zugegriffen werden um dann hinterher die Datei nhalte zu extrahieren und zu durchsuchen.
Allein schon, dass damit 2 Umfangreiche Prozesse, der Dateihandle mit dem DB File sowie der DB Prozes an für sich damt beschäftigt sind die Daten zu suchen kann gar nicht wirklich schneller werden.
Gruss Matze