Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist das Speichern von Bilddateien in der Mongo-Datenbank eine gute Idee?

Das Problem ist nicht so sehr, dass die Datenbank groß wird, Datenbanken können damit umgehen (obwohl MongoDB in dieser Hinsicht nicht so gut ist wie viele andere). Das Problem besteht darin, dass die Daten zum Senden an den Client zunächst von der Datenbank in den Arbeitsspeicher verschoben, dann in den Speicher der Anwendung kopiert und dann an den Kernel übergeben werden müssen, um über den Socket gesendet zu werden. Es verschwendet viel RAM und CPU-Zyklen. Der Grund, warum es besser ist, große Dateien im Dateisystem zu haben, ist, dass es einfacher ist, sie zu kopieren. Sie können den Kernel bitten, die Datei direkt von der Festplatte zum Socket zu streamen.

Der Nachteil beim Speichern großer Dateien im Dateisystem ist, dass es viel schwieriger zu verteilen ist. Die Verwendung einer Datenbank und etwas wie GridFS von Mongo ermöglicht die Skalierung. Sie müssen nur darauf achten, dass Sie nicht die ganze Datei auf einmal in den Speicher der Anwendung kopieren, sondern Stück für Stück. Die meisten Web-App-Frameworks bieten heutzutage eine gewisse Unterstützung für das Senden von HTTP-Antworten in Blöcken.