MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kiedy używać GridFS w MongoDB?

GridFS to prosta abstrakcja systemu plików na bazie MongoDB. Jeśli znasz Amazon S3, GridFS jest bardzo podobną abstrakcją. Dlaczego zorientowana na dokumenty baza danych, taka jak MongoDB, zapewnia abstrakcję warstwy plików? Okazuje się, że jest kilka bardzo dobrych powodów:

  1. Przechowywanie treści plików generowanych przez użytkowników

    Duża liczba aplikacji internetowych umożliwia użytkownikom przesyłanie plików. Historycznie rzecz biorąc, podczas pracy z relacyjnymi bazami danych te pliki generowane przez użytkownika są przechowywane w systemie plików oddzielnie od bazy danych. Stwarza to szereg problemów. Jak zreplikować pliki na wszystkie potrzebne serwery? Jak usunąć wszystkie kopie po usunięciu pliku? Jak wykonać kopię zapasową plików w celu zapewnienia bezpieczeństwa i odzyskiwania po awarii? GridFS rozwiązuje te problemy dla użytkownika, przechowując pliki wraz z bazą danych, a kopię zapasową bazy danych można wykorzystać do tworzenia kopii zapasowych plików. Ponadto, dzięki replikacji MongoDB, kopia Twoich plików jest przechowywana w każdej replice. Usunięcie pliku jest tak proste, jak usunięcie obiektu w bazie danych.

  2. Dostęp do części zawartości pliku

    Gdy plik jest przesyłany do GridFS, plik jest dzielony na kawałki o wielkości 256 KB i przechowywany oddzielnie. Tak więc, gdy potrzebujesz odczytać tylko pewien zakres bajtów pliku, tylko te fragmenty są przenoszone do pamięci, a nie cały plik. Jest to niezwykle przydatne w przypadku dużych treści multimedialnych, które należy selektywnie czytać lub edytować.

  3. Przechowywanie dokumentów większych niż 16 MB w MongoDB

    Domyślnie rozmiar dokumentu MongoDB jest ograniczony do 16 MB. Tak więc, jeśli masz dokumenty, które są większe niż 16 MB, możesz je przechowywać za pomocą GridFS.

  4. Przezwyciężanie ograniczeń systemu plików

    Jeśli przechowujesz dużą liczbę plików, musisz wziąć pod uwagę ograniczenia systemu plików, takie jak maksymalna liczba plików/katalogów itp. W GridFS nie Nie trzeba się martwić o ograniczenia systemu plików. Ponadto dzięki shardingowi GridFS i MongoDB możesz dystrybuować swoje pliki na różnych serwerach bez znacznego zwiększania złożoności operacyjnej.

GridFS – Za kulisami

GridFS używa dwóch kolekcji do przechowywania danych:

> show collections;
fs.chunks
fs.files
system.indexes
>

Kolekcje fs.files zawierają metadane o plikach, a kolekcje fs.chunks przechowują rzeczywiste 256k fragmentów. Jeśli masz kolekcję podzieloną na fragmenty, porcje są rozmieszczone na różnych serwerach i możesz uzyskać lepszą wydajność niż system plików!

> db.fs.files.findOne();
{
"_id" : ObjectId("530cf1bf96038f5cb6df5f39"),
"filename" : "./conn.log",
"chunkSize" : 262144,
"uploadDate" : ISODate("2014-02-25T19:40:47.321Z"),
"md5" : "6515e95f8bb161f6435b130a0e587ccd",
"length" : 1644981
}
>

MongoDB tworzy również indeks złożony na file_id i numer porcji, aby pomóc w szybkim dostępie do porcji:

> db.fs.chunks.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "files.fs.chunks",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"files_id" : 1,
"n" : 1
},
"ns" : "files.fs.chunks",
"name" : "files_id_1_n_1"
}
]
>

Przykłady MongoDB GridFS

MongoDB ma wbudowane narzędzie o nazwie „mongofiles”, które pomaga ćwiczyć scenariusze GridFS. Zapoznaj się z dokumentacją sterownika, aby dowiedzieć się, jak używać GridFS ze swoim sterownikiem.

Put
#mongofiles -h  -u  -p  --db files put /conn.log
connected to: 127.0.0.1
added file: { _id: ObjectId('530cf1009710ca8fd47d7d5d'), filename: "./conn.log", chunkSize: 262144, uploadDate: new Date(1393357057021), md5: "6515e95f8bb161f6435b130a0e587ccd", length: 1644981 }
done!

Get
#mongofiles -h  -u  -p  --db files get /conn.log
connected to: 127.0.0.1
done write to: ./conn.log

List
# mongofiles -h  -u  -p  list
connected to: 127.0.0.1
/conn.log 1644981

Delete
[root@ip-10-198-25-43 tmp]# mongofiles -h  -u  -p  --db files delete /conn.log
connected to: 127.0.0.1
done!

Moduły GridFS

Jeśli chcesz obsługiwać dane plików przechowywane w MongoDB bezpośrednio z serwera WWW lub systemu plików, dostępnych jest kilka modułów wtyczek GridFS:

  • GridFS-Fuse – Podłącz GridFS do systemu plików
  • GridFS-Nginx - Wtyczka do serwera plików GridFS bezpośrednio z Nginx

Ograniczenia GridFS

  • Zestaw roboczy

    Obsługiwanie plików wraz z zawartością bazy danych może znacznie zmniejszyć zestaw roboczy pamięci. Jeśli nie chcesz zakłócać swojego zestawu roboczego, najlepiej będzie udostępniać pliki z innego serwera MongoDB.

  • Wydajność

    Wydajność udostępniania plików będzie wolniejsza niż natywna obsługa pliku z serwera WWW i systemu plików. Jednak dodatkowe korzyści związane z zarządzaniem mogą być warte spowolnienia.

  • Aktualizacja atomowa

    GridFS nie zapewnia sposobu na atomową aktualizację pliku. Jeśli ten scenariusz jest konieczny, musisz zachować wiele wersji plików i wybrać odpowiednią wersję.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy MongoDB obsługuje typy zmiennoprzecinkowe?

  2. Mongo Sortuj według liczby dopasowań w tablicy

  3. Policz w repozytorium Spring Data MongoDB

  4. Nieobsłużone odrzucenie obietnicy:Błąd:zniekształcony adres URL, nie można go przeanalizować

  5. Dokumenty podrzędne Mongoose a schemat zagnieżdżony