Przechowywanie plików jest ważną cechą wymaganą w wielu procesach w różnych typach aplikacji. Istnienie procesów takich jak Content Delivery Networks (CDNs), skonfigurowanych przez opcje chmury stron trzecich, takich jak Amazon Web Services, i lokalne opcje przechowywania plików zawsze ułatwiały budowanie takiej funkcji.
Jednakże, koncepcja przechowywania plików bezpośrednio w bazie danych poprzez pojedyncze wywołanie API intrygowała mnie od dłuższego czasu. To właśnie tam pojawił się dla mnie GridFS.
GridFS – A Layman’s Understanding
MongoDB posiada specyfikację sterownika do wysyłania i pobierania z niego plików o nazwie GridFS. GridFS pozwala na przechowywanie i pobieranie plików, w tym takich, które przekraczają limit rozmiaru dokumentu BSON wynoszący 16 MB.
GridFS w zasadzie bierze plik i rozbija go na wiele kawałków, które są przechowywane jako pojedyncze dokumenty w dwóch kolekcjach:
kolekcja chunk (przechowuje części dokumentu) i
kolekcja file (przechowuje dodatkowe metadane).
Każdy kawałek ma rozmiar ograniczony do 255 KB. Oznacza to, że ostatni chunk jest zwykle albo równy albo mniejszy niż 255 KB. Brzmi całkiem zgrabnie.
Kiedy czytasz z GridFS, sterownik ponownie składa wszystkie chunki, jak trzeba. Oznacza to, że możesz czytać sekcje pliku zgodnie z zakresem zapytania. Na przykład słuchanie segmentu pliku audio lub pobieranie sekcji pliku wideo.
Uwaga: Preferowane jest używanie GridFS do przechowywania plików normalnie przekraczających limit rozmiaru 16 MB. Dla mniejszych plików, zalecane jest użycie formatu BinData do przechowywania plików w pojedynczych dokumentach.
To podsumowuje jak GridFS działa w ogólności. Czas zanurzyć stopy w jakimś działającym kodzie i zobaczyć, jak zaimplementować system jako taki.
Dość gadania, pokaż mi kod
Do naszej konfiguracji używamy Node.js z dostępem do chmurowej instancji MongoDB. Możesz znaleźć repozytorium kodu dla przykładowej aplikacji tutaj.