Ich habe keine Ahnung, wie die großen Websites die Bilder auf ihren Servern speichern. Kann mir jemand sagen, wie sie die von den Benutzern hochgeladenen Bilder in ihrer Datenbank speichern?
Ich dachte, vielleicht würden sie einfach die Datei (das Bild) in einem Pfad speichern und diesen Pfad einfach in der Datenbank speichern, stimmt das?
Aber ich möchte es so machen. Ist das richtig? Zum Beispiel eine Website mit dem Namen www.photos.com
. Wenn ein Benutzer ein Bild hochlädt, erstelle ich einen Ordner mit dem Benutzernamen und speichere diese Bilder in diesem Ordner.
Ich glaube, wir können ein Verzeichnis mit erstellen php file concepts
. Wenn ein neuer Benutzer sein Bild oder seine Datei hochlädt, möchte ich ein Verzeichnis mit seinem Namen erstellen.
Beispiel: Wenn der Benutzername John ist, würde ich ein Verzeichnis wie dieses auf photos.com erstellen www.photos.com/john/
und dann alle seine Bilder in diesem Verzeichnis speichern, wenn er ein Bild hochlädt. Ist das der richtige Weg, dies zu tun?
Ich habe hier niemanden, der gute Kenntnisse im Speichern der Dateien auf Servern hat. Bitte lassen Sie mich wissen, wie das geht. Ich möchte es richtig und sicher machen.
quelle
Antworten:
Alle großen Websites speichern keine Bilder in der Datenbank , in der sie auf der Festplatte gespeichert sind. Sie speichern einen Verweis auf die Position des Bildes in einer Tabelle. Und dann von dort aus verlinken.
Warum? Performance.
Das Abrufen umfangreicher Inhalte aus einer Datenbank ist ein großer Leistungsengpass. Und Datenbanken lassen sich horizontal nicht so gut skalieren, sodass dies ein noch größeres Problem bedeuten würde. Alle großen Websites verwenden statische Inhaltsfarmen, um statische Inhalte wie Bilder zu verarbeiten. Das sind Server, denen Ihre Identität egal ist.
Wie halten sie die Bilder wirklich privat, könnte man fragen? Sie tun es nicht.
Der Link des Bildes ist an sich die Adresse und das Passwort. Nehmen wir zum Beispiel Facebook. Wenn ich ein privates Bild in meinem Konto speichere, sollten Sie es nicht öffnen können. Aber solange Sie die richtige Adresse haben, können Sie.
Dieses Bild ist privat . Beachten Sie den Dateinamen
10400121_87110566301_7482172_n.jpg
(Facebook ändert die URL von Zeit zu Zeit, sodass der Link möglicherweise unterbrochen wird).
Es ist nicht sequentiell. Die einzige Möglichkeit, sich ein Bild zu machen, besteht darin, die Adresse zu kennen.
Basierend auf einem vorherigen Benutzerfoto können Sie das nächste nicht erraten.
Es hat eine enorme Entropie, und selbst wenn Sie anfangen, zufällige wilde Vermutungen anzustellen, werden Sie eine große Anzahl von Fehlern haben, und wenn Sie zu einem Bild kommen, werden Sie von dort aus nicht in der Lage sein, die Identität des Besitzers zu erkennen, die, an sich ist Schutz in der Anonymität.
Bearbeiten (warum Sie Bilder nicht in einem Ordner "Benutzername" speichern sollten:
Nach Ihrer Bearbeitung wurde klar, dass Sie beabsichtigen, Dateien auf der Festplatte und nicht in der Datenbank abzulegen. Diese Bearbeitung deckt das neue Szenario ab.
Obwohl Ihre Logik (Ordner pro Benutzer erstellen) besser organisiert ist, treten Probleme auf, wenn Sie viele Benutzer und viele Bilder haben. Stellen Sie sich vor, Ihre Server verfügen über 1T Speicherplatz. Stellen wir uns auch vor, dass 1T mit der Last, die der Server bewältigen kann, mehr oder weniger genau ist.
Jetzt haben Sie 11 Benutzer. Nehmen Sie an, dass sie gleichzeitig mit dem Hochladen beginnen und jeder mehr als 100 GB Dateien hochlädt. Wenn sie jeweils 91 GB erreichen, ist der Server voll und Sie müssen Bilder auf einem anderen Server speichern. Wenn diese Benutzer- / Ordnerstruktur befolgt wird, müssen Sie einen der Benutzer auswählen und alle seine Daten auf einen anderen Server migrieren. Außerdem ist ein Benutzer, der nicht mehr als 1 TB in Dateien hochladen kann, stark eingeschränkt.
Soll ich dann alle Dateien im selben Ordner speichern?
Nein, große Websites speichern Dateien im Allgemeinen in sequentiellen Ordnern (/ 000001 /, / 000002 / usw.) mit einer x-definierten Anzahl von Dateien pro Ordner. Dies betrifft hauptsächlich Leistungsprobleme im Dateisystem.
Mehr darüber, wie viele Dateien in einem Verzeichnis zu viele sind?
quelle
Es ist normalerweise eine schlechte Idee, Bilder in Ihrer Datenbank zu speichern (wenn Ihre Website beliebt ist). Die Datenbank ist traditionell einer der größten Engpässe in den meisten Anwendungen. Sie müssen es nicht mehr als nötig laden. Wenn sich Bilder im Dateisystem befinden, werden sie von vielen http-Servern ( z. B. nginx ) am effizientesten bereitgestellt.
Vkontakte, das größte soziale Netzwerk in Russland, macht genau das: Speichern Sie Bilder im Dateisystem.
Ein weiteres großes soziales Netzwerk implementierte einen hoch entwickelten skalierbaren Blob-Speicher. Aber es ist nicht für die Öffentlichkeit zugänglich, AFAIK.
Zusammenfassung dieser Antwort: Speichern Sie keine Blobs in der Datenbank.
quelle
Die Bildverwaltung kann am besten erreicht werden, indem Bilder physisch auf den Server hochgeladen und anschließend der Speicherort der Datei und die Bilddetails in einer Datenbank aufgezeichnet werden. Anschließend könnte ein Suchformular konfiguriert werden, damit der Benutzer eine Textsuche, eine Teilenummernsuche oder andere Abfragen durchführen kann. Ein PHP-Skript könnte geschrieben werden, um ein gültiges HTML-Bild-Tag basierend auf den in der Tabelle gefundenen Daten zu erstellen.
Das Hochladen von Bildern in ein MySQL ™ BLOB-Feld ist eine so schlechte Idee. Solche Bilddaten sind im Allgemeinen problematisch, wenn die Bilder viel größer als Miniaturansichten sind. Wenn die Bilder groß sind, müssen Sie möglicherweise jeweils eine SQL INSERT-Anweisung kopieren / einfügen (in phpMyAdmin). Wenn die Bilder groß sind und die SQL INSERT-Anweisung von Ihrem Texteditor in zwei Zeilen unterteilt wird, können Sie das Bild niemals wiederherstellen.
quelle
Ja.
Das einzige, was ich vorschlagen würde, nicht Name, sondern ID zu verwenden.
www.photos.com/albums/1234/
wäre für den Anfang okay.quelle