Frage

Ich möchte in einer Datenbank eine große Anzahl von Audio-Dateien speichern, aber ich weiß nicht, ob es eine gute Praxis ist. Ich möchte die Vor-und Nachteile wissen, es auf diese Weise zu tun.

Ich dachte auch über die Möglichkeit, „Links“ auf diese Dateien zu haben, aber vielleicht wird dies mehr Probleme als Lösungen tragen. Jede Erfahrung in dieser Richtung wird willkommen:)

Hinweis: Die Datenbank wird MySQL

.
War es hilfreich?

Lösung

Jedes System ich kenne, speichert eine große Anzahl von großen Dateien speichert sie extern in die Datenbank. Sie speichern alle der abfragbaren Daten für die Datei (Titel, Künstler, Länge, usw.) in der Datenbank, zusammen mit einem Teil-Pfad zur Datei. Wenn es Zeit ist, um die Datei abzurufen, extrahieren Sie den Pfad der Datei, prepend einige Stammdatei (oder URL), um es, und das zurück.

Also, würden Sie eine „Ort“ Spalte haben, mit einem Teilpfad darin, wie „a / b / c / 1000“, die Sie dann Karte zu: „ http: //myserver/files/a/b/c/1000.mp3 "

Stellen Sie sicher, dass Sie eine einfache Möglichkeit, haben die Medien-Datenbank auf einem anderen Server / Verzeichnis zu zeigen, Sie benötigen, falls die für die Datenrettung. Auch Sie können eine Routine benötigen, die neu synchronisiert die Datenbank mit dem Inhalt der Datei-Archiv.

Auch wenn Sie Tausende von Mediendateien haben werden, speichern sie nicht alle in einem riesigen Verzeichnis - das ist ein Performance-Engpass auf einige Dateisysteme. Stattdessen brechen sie in mehrere ausgewogene Teilbäume auf.

Andere Tipps

ich denke, sie in der Datenbank gespeichert ist in Ordnung, solange man eine gute Implementierung verwenden. Sie können diesen älteren, aber guten Artikel für Ideen zu lesen, wie die größeren Mengen an Daten in der Datenbank, um zu verhindern Leistung zu beeinträchtigen.

http://www.dreamwerx.net/phpforum/?id=1

Ich habe buchstäblich 100 von Gigs ohne Probleme in MySQL-Datenbanken geladen. Das Design und die Implementierung ist der Schlüssel, tun Sie es falsch, und Sie werden leiden.

Weitere DB Vorteile (nicht bereits erwähnt): - Arbeitet besser in einer Last ausgewogene Umwelt - Sie können in mehr Backend-Speicher Skalierbarkeit bauen

Ich habe in verschiedenen Projekten experimentiert es in beiden Richtungen zu tun, und wir haben schließlich beschlossen, dass es einfacher ist, als auch das Dateisystem zu verwenden. Immerhin wird das Dateisystem bereits zum Speichern optimiert, Abrufen und Indizierung von Dateien.

Die eine Spitze, die ich darüber hätte, ist nur zu speichern, einen „Wurzel relativ“ Pfad zur Datei in der Datenbank, dann haben Sie Ihr Programm oder Ihre Anfragen / Stored Procedures / Middleware verwenden, um einen Installation spezifischer Root-Parameter rufen Sie die Datei.

Zum Beispiel, wenn Sie XYZ.Wav in C gespeichert werden: \ MyProgram \ Data \ Sounds \ X \ der vollständige Pfad wäre

C:\MyProgram\Data\Sounds\X\XYZ.Wav

Aber Sie würden den Pfad speichern und oder Dateinamen in der Datenbank als:

X\XYZ.Wav

An anderer Stelle in der Datenbank oder in Konfigurationsdateien Ihres Programms, speichern Sie einen Root-Pfad wie SoundFilePath gleich

C: \ MyProgram \ Data \ Sounds \

Natürlich, in dem Sie die Wurzel aus der Datenbank Pfad aufgeteilt ist bis zu Ihnen. Auf diese Weise, wenn Sie Ihre Installation des Programms verschieben, müssen Sie nicht auf die Datenbank aktualisieren.

Auch wenn es sein werden viel von Dateien, finden einen Weg die Wege des Hashing, so dass Sie ein Verzeichnis Hunderte oder Tausende von Dateien (in meinem kleinen Beispiel aufzuwickeln nicht mit enthalten gibt es Verzeichnisse auf dem ersten Zeichen des Dateinamen basieren, aber Sie können tiefer oder verwenden zufälligen Hashes gehen). Dies macht Suche Indexer glücklich, wie gut.

Die Vorteile der Verwendung einer Datenbank:

  • Einfach zu verbinden Sound-Dateien mit anderen Datenbits.
  • Vermeiden von Datei-I / O Operationen, Bypass-Datenbank-Sicherheit.
  • Keine Notwendigkeit für die Trennung Operationen löschen Sound-Dateien, wenn Datenbank Datensätze werden gelöscht.

Die Nachteile der Verwendung einer Datenbank:

  • Datenbank aufblähen
  • Datenbanken können teurer sein als Dateisysteme

Sie können sie speichern als BLOBs (oder LONGBLOBs) und dann die Daten abrufen, wenn Sie tatsächlich wollen die Mediendateien zugreifen zu können.

oder

Sie können einfach speichern, die Mediendateien auf einem Laufwerk speichern und die Metadaten in der DB.

ich in Richtung der letzteren Methode lehnen. Ich weiß nicht, wie diese insgesamt in der Welt getan wird, aber ich vermute, dass viele andere würden das gleiche tun.

Sie können speichern Links (Teilpfade zu den Daten) und dann diese Informationen abrufen. Mach es einfach Dinge, um auf Laufwerke zu bewegen und es immer noch zugreifen.

Ich speichere den relativen Pfad jeder Datei in der DB zusammen mit anderen Metadaten zu den Dateien ab. Der Weg Basis kann dann im laufenden Betrieb geändert werden, wenn ich die aktuellen Daten auf ein anderes Laufwerk (entweder lokal oder über UNC-Pfad) verlagern muß.

Das ist, wie ich es tun. Ich bin sicher, andere werden auch Ideen haben.

Einige Vorteile von Blobs verwenden, um Dateien zu speichern

  • Lower Management-Overhead - ein einziges Werkzeug zur Sicherung verwenden / wiederherstellen usw.
  • Keine Möglichkeit für Datenbank und Dateisystem nicht synchron sein
  • Transactional-Fähigkeit (falls erforderlich)

Einige Nachteile

  • bläst von Datenbank-Servern RAM mit nutzlosen Plunder könnte es Zeilen speichern verwenden, Indizes usw.
  • Macht der DB Backups sehr groß, daher weniger überschaubar
  • Nicht so bequem wie ein Dateisystem für Kunden dienen (zum Beispiel mit einem Web-Server)

Was ist Leistung? Ihre Ergebnisse können variieren. Dateisysteme sind sehr vielfältig, so sind Datenbanken in ihrer Leistung. In einigen Fällen wird ein Dateisystem gewinnen (wahrscheinlich mit weniger größeren Dateien). In einigen Fällen kann ein DB besser sein (vielleicht mit einer sehr großen Anzahl von kleineren Dateien).

Auf jedem Fall keine Sorge, das tun, was zu der Zeit am besten scheint.

Einige Datenbanken bieten einen integrierten Web-Server Blobs zu dienen. Zum Zeitpunkt des Schreibens, hat MySQL nicht.

Speichern Sie sie als externe Dateien. Speichern Sie dann den Pfad in einem varchar Feld. Putting großen Binärblob in eine relationale Datenbank ist im Allgemeinen sehr ineffizient - sie nur aufbrauchen Raum und die Dinge verlangsamen als Cache-Speicher gefüllt sind unbrauchbar. Und es gibt nichts gewonnen werden - die Blobs selbst nicht durchsucht werden kann. Vielleicht möchten Sie obwohl Medien Metadaten in die Datenbank speichern.

Eine einfache Lösung wäre, zu speichern, nur die relativen Positionen der Dateien als Strings und lassen Sie das Dateisystem damit umgehen. Ich habe es an einem Projekt versucht (wir Office-Datei-Anhänge eine Umfrage wurden Speicherung), und es hat gut funktioniert.

Der beste Weg, Audio / Video-Dateien zu speichern, können Sie einen beliebigen verteilten Speicher verwenden, die lokal oder auf Wolke sein kann.

https://min.io/

für Cloud: AWS S3

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top