So speichern Sie Bilder in Ihrem Dateisystem

Derzeit habe ich Bilder (max. 6 MB) als BLOB in einer InnoDB-Tabelle gespeichert. Mit zunehmender Datenmenge wird die nächtliche Sicherung immer langsamer, was die normale Leistung beeinträchtigt.

Die Binärdaten müssen also in das Dateisystem übertragen werden. (Verweise auf die Dateien bleiben in der DB erhalten.)

Die Daten haben eine baumartige Beziehung:

- main site
  - user_0
    - album_0
    - album_1
    - album_n
  - user_1
  - user_n
etc...

Jetzt möchte ich, dass die Daten gleichmäßig über die Verzeichnisstruktur verteilt werden. Wie soll ich das erreichen?

Ich könnte es versuchenMD5('userId, albumId, imageId'); und zerschneide den resultierenden String, um meinen Verzeichnispfad zu erhalten:

  /var/imageStorage/f/347e/013b/c042/51cf/985f7ad0daa987d.jpeg

Auf diese Weise könnte ich das erste Zeichen einem Server zuordnen und die Verzeichnisstruktur gleichmäßig auf mehrere Server verteilen.

Dies würde jedochnicht Halten Sie die Bilder pro Benutzer organisiert, und verteilen Sie die Bilder für ein Album wahrscheinlich auf mehrere Server.

Meine Frage ist:
Was ist der beste Weg, um die Bilddaten im Dateisystem auf ausgewogene Weise zu speichern und gleichzeitig die Benutzer- / Albumdaten zusammenzuhalten?

Denke ich in die richtige Richtung? oder ist das die falsche Art, Dinge zu tun?

Aktualisieren:
Ich werde für die gehenmd5(user_id) String-Slicing für die Aufteilung auf höchstem Niveau. Und dann legen Sie alle Benutzerdaten in den gleichen Eimer. Auf diese Weise wird eine gleichmäßige Datenverteilung sichergestellt, während die Benutzerdaten dicht beieinander gespeichert bleiben.

  /var
   - imageStorage
     - f/347e/013b
       - f347e013bc04251cf985f7ad0daa987d
         - 0
           - album1_10
             - picture_1.jpeg
         - 1
           - album1_1
             - picture_2.jpeg
             - picture_3.jpeg
           - album1_11
             - picture_n.jpeg
         - n
           - album1_n

Ich denke, ich werde albumId verwenden, das von hinten aufgeteilt wurde (diese Idee gefällt mir!), Um die Anzahl der Alben pro Verzeichnis zu verringern (obwohl dies für die meisten Benutzer nicht erforderlich ist).

Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage