2010-12-06 17 views
10

Ich implementiere ein Projekt, das sich mit einer erheblichen Anzahl von Bildern beschäftigt.Speichern von Bilddaten in einer MySQL-Datenbank?

Ihrer Meinung nach, was sind die Nachteile/Vor der folgenden zwei Ansätze:

  • ich Tausende von Artikeln speichern müssen, jedes Element als mehrere String-Eigenschaften und einem Bild.
  • Jedes Element als ID (integer)
  • MyISAM-Tabellen
  • Wie würden Sie speichern die Bilder:
    • Ansatz 1: Speichern von Bildern in ein Verzeichnis und jedes Bild als ID.jpg namens
    • Ansatz 2: speichern von Bildern in der Datenbank als binäres BLOB

Mit Ansatz 1 I das Bild direkt zugreifen kann, und das ist es

<img src="same_directory/10.jpg" /> 

Ansatz unter Verwendung von 2, kann ich immer noch den oben HTML verwenden, muß aber, dass jpg Zugriff auf ein PHP-Skript umleiten, die die realen zurückkehren Bild aus der DB.

In Bezug auf die Leistung, die Sie denken, es ist schneller?

Ich bin daran interessiert, 1.

+2

Im Allgemeinen behindert das Speichern großer BLOBs in der Datenbank die Leistung erheblich. Wenn alle Bilder sehr kleine Dateien sind, ist es nicht so schlimm. – Orbling

+0

Wenn alle Bilder nicht jpg sind komprimieren Sie vor dem Speichern in der Datenbank. –

+0

mögliches Duplikat von [Bilder als Dateien oder in der Datenbank für eine Web-App speichern?] (Http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for- a-web-app) – shamittomar

Antwort

1

ich zu nähern ist versucht werden, um den ersten Ansatz zu verwenden, wie es in unübersichtlich die Datenbank mit Bilddaten kein wirklicher Wert. (Das Abrufen der Daten aus der Datenbank ist auch wesentlich langsamer als das einfache Laden von der Festplatte.)

Als einen Vorschlag möchten Sie jedoch möglicherweise nicht den vollständigen Pfad auf der Festplatte für das Bild in der Datenbanktabelle speichern Portabilität in der Zukunft. (z. B .: Speichern Sie einfach den Teil des Pfads und des Dateinamens von einem 'bekannten' Basisordner.)

2

Das Speichern auf dem Dateisystem ist schneller.

0

Behalten Sie die Bilddateien als Bilddateien auf dem Server, um Ihre DB-Last zu verringern und dem Server Caching etc. zu ermöglichen. Insgesamt hängt es wirklich von der Art der Bilder ab, über die wir reden. Kleine Vorschaubilder (z. B. für Dateisymbole) wären nicht so schlecht, aber ich würde nicht ganze Bilder in der DB speichern. Im Allgemeinen denke ich, dass der Dateisystemansatz schneller wäre.

+0

Ansatz 1 ist der Gewinner, zumindest für meine Anforderungen ... – cmancre

0

Lets untersuchen Problem im Webbrowser. Wenn Sie eine Seite mit 10 in der Datenbank gespeicherten Bildern laden. Ihr Browser sendet eine neue HTTP-Anfrage an den Server. Jede Anfrage initialisiert DB-Verbindung und serverseitiges Skript. Oder lesen Sie einfach ein statisches Bild aus dem Dateisystem.

was wird schneller sein?

Anderer Teil - Daten aus dem Dateisystem oder der Datenbank abrufen. Wenn wir keinen Cache für die Datenbank verwenden (aber für 10 GB Bilder sollten Sie 10 GB RAM haben, um diese Daten zwischenzuspeichern). Datenbank- und HTTP-Server liest in jedem Fall Daten aus dem Dateisystem. Aber ich denke, HTTP-Browser liest Daten schneller als Datenbankserver.

Nur eine Sache Nachteile für den Datenbankspeicher - sehr einfach, Daten von einem Server auf andere zu migrieren. Aber das ist nicht wichtig für die Systemleistung.

Und vergessen Sie nicht, Pfad für Bilder wie /a/b/c/abc.jpg zu machen - es wird schneller für große Menge von Bildern, dann legen Sie alle Bilder in einem Verzeichnis.

+0

Ich habe die Verzeichnisunterteilung nicht erwähnt, aber das habe ich bereits im Hinterkopf. – cmancre

5

Vorteile der Ansatz 1:

  • die Flat-File-Form Webserver Abrufen ist schneller.
  • die meisten Web-Hosts wahrscheinlich diesem Ansatz folgen.
  • Das Dateisystem ist schneller für flache Dateispeicher.

Vorteile des Ansatzes 2:

  • Alle Ihre Daten an einem Ort gehalten werden, wenn Sie Ihre Website/Datenbank der Bilder nur
  • Sein leichter zu sortieren/da sein wandern Löschen/etc ...
  • Da Sie es über ein PHP-Skript bedienen müssen, können Sie zusätzliche Dinge wie Sicherheit, wenn erforderlich, oder Bildverarbeitung durchführen (natürlich können Sie th tun ist mit flacher Datei auch, aber Sie müssen sicherstellen, dass die Sicherheit nicht umgangen werden kann, indem Sie die Bilder in einem öffentlichen Verzeichnis lassen).

unter Berücksichtigung der Leistung Ansatz 1 ist am besten, um fortzufahren.

Verwandte Themen