Sociel Network - Bilderverwaltung
phil
- programmiertechnik
Hallo.
Wie würdet ihr eine Bilderverwaltung für ein Social Network erstellen?
Jeder User hat ein Profilbild und kann beliebig viele Alben anlegen welche beliebig viele Bilder beinhalten können.
Mein Ansatz:
Es gibt einen Ordner "Bilder".
In diesem Ordner hat jeder User einen Ordner mit dem Namen seiner Userid.
Jedes Bild bekommt beim hochladen eine Unique-Id, das Bild wird in diese UID umbenannt, komprimiert.
Die Datenbank bekommt zwei Tabellen:
users_alben(uid, albumid, namedesalbums)
users_bilder(albumid, bilduniqueid)
Nun kann alles abgerufen werden.
Alternativ.
Ein Ordner namens "Bilder". Jedes Bild hat eine Unique-ID.
In der Datenbank die gleichen Tabellen wie bei Vorschlag 1.
Nun stellen sich mir aber einige Fragen aufgrund der Skalierbarkeit
Wie verhält sich ein Filesystem wennn ein Ordner("Bilder"), 500.000 Ordner enthält und wie wäre es wenn ein Ordner 5 Millionen Bilder hätte?
Ich nutze PHP 5.3 und PostgreSQL.
Grüße, phil
Hallo,
Jedes Bild bekommt beim hochladen eine Unique-Id, das Bild wird in diese UID umbenannt,
was passiert mit dem Originalnamen?
komprimiert.
Warum?
Nun stellen sich mir aber einige Fragen aufgrund der Skalierbarkeit
Wie verhält sich ein Filesystem wennn ein Ordner("Bilder"), 500.000 Ordner enthält und wie wäre es wenn ein Ordner 5 Millionen Bilder hätte?
das hängt vom verwendeten Dateisystem ab.
Grundsätzlich bietet sich jedoch bei so vielen Dateien das Verwenden einer Verzeichnishierarchie an (die sich aus den Dateinamen ergibt :-))
Freundliche Grüße
Vinzenz
Hi.
Jedes Bild bekommt beim hochladen eine Unique-Id, das Bild wird in diese UID umbenannt,
was passiert mit dem Originalnamen?
Der verschwindet.
Ich kann aber jedem Bild einen Titel geben..
komprimiert.
Warum?
Weil manche Menschen meinen sie müsten ein 3600*2400 8MB Bild hochladen, die Bilder aber nur in einer maximalgröße dargestellt werden können, um Platz zu sparen und aus Sicherheitsgründen.
Grundsätzlich bietet sich jedoch bei so vielen Dateien das Verwenden einer Verzeichnishierarchie an (die sich aus den Dateinamen ergibt :-))
Definiere und erkläre doch bitte mal wie diese aussehen sollten, das war ja meine Ausgangsfrage ;)
Danke dir Vinzenz.
Gruß, phil
Hi,
komprimiert.
Warum?
Weil manche Menschen meinen sie müsten ein 3600*2400 8MB Bild hochladen, die Bilder aber nur in einer maximalgröße dargestellt werden können, um Platz zu sparen
Also meinst du nicht (in erster Linie) komprimiert, sondern von den Bildmaßen her verkleinert.
und aus Sicherheitsgründen.
Aha?
Grundsätzlich bietet sich jedoch bei so vielen Dateien das Verwenden einer Verzeichnishierarchie an (die sich aus den Dateinamen ergibt :-))
Definiere und erkläre doch bitte mal wie diese aussehen sollten, das war ja meine Ausgangsfrage ;)
Überleg dir erst mal grob, wie viele Nutzer und Bilder du erwartest.
Warum ein Verzeichnis für den jeweiligen Nutzer sinnvoll ist, hat Vinzenz ja schon gesagt.
Die Alben des Nutzers jeweils auch als Verzeichnis anzulegen, könnte sinnvoll sein.
Und bei sehr grosser Nutzeranzahl kann man dann auch noch überlegen, wie man die in weitere Verzeichnisse (oder gar auf einzelne Platten) verteilt - bspw. an Hand des ersten oder der ersten zwei Zeichen des Benutzernamens, oder der nummerischen Nutzer-ID (falls ersteres keine Verteilung bringen sollte, die gleichmässig genug ist), ...
MfG ChrisB
Hallo Phil,
Es gibt einen Ordner "Bilder".
In diesem Ordner hat jeder User einen Ordner mit dem Namen seiner Userid.
oder umgekehrt. Ist gegenüber ...
Ein Ordner namens "Bilder". Jedes Bild hat eine Unique-ID.
... zu bevorzugen.
Spätestens, wenn ein User mal dem sozialen Netzwerk den Rücken kehrt (sowas soll vorkommen), möchtest Du einfach aufräumen können. Eine Verzeichnisstruktur ist leicht zu löschen, viele Dateien unter vielen anderen in der gleichen Verzeichnishierarchie dagegen sind sehr aufwendig zu löschen.
Freundliche Grüße
Vinzenz
Hallo,
aufgrund der Skalierbarkeit würde ich mir da ein anderes Konzept überlegen. Denke bitte daran wie schnell der Platz anwächst, wenn du mal einige Hundert Benutzer haben solltest, die wiederum im Schnitt 20 oder mehr Bilder haben.
Bei 1000 Benutzern wären das dann schon mal 1000 User * 20 Bilder * 0.2MB.
Vorerst sieht das nicht nach viel aus, aber schließlich wächst deine Datenbank auch kontinuierlich usw...
Wird es eien sehr große Community, würde ich die Bilder auslagern. Habe es persönlich noch nicht ausprobiert, aber mir wurde diesbezüglich schon mal die EC2 Cloud von Amazon empfohlen.
Markus.