MongoDB – GridFS

Reklama

GridFS jest specyfikacją MongoDB do przechowywania i pobierania dużych plików, takich jak obrazy, pliki audio, pliki wideo itp. Jest to rodzaj systemu plików do przechowywania plików, ale jego dane są przechowywane w kolekcjach MongoDB. GridFS ma możliwość przechowywania plików nawet większych niż jego limit rozmiaru dokumentu 16MB.

GridFS dzieli plik na kawałki i przechowuje każdy kawałek danych w oddzielnym dokumencie, każdy o maksymalnym rozmiarze 255k.

GridFS domyślnie używa dwóch kolekcji fs.files i fs.chunks do przechowywania metadanych pliku i kawałków. Każdy chunk jest identyfikowany przez swoje unikalne pole _id ObjectId. Kolekcja fs.files służy jako dokument nadrzędny. Pole files_id w dokumencie fs.chunks łączy chunk z jego rodzicem.

Poniżej znajduje się przykładowy dokument kolekcji fs.files –

{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}

Dokument ten określa nazwę pliku, rozmiar chunk, datę wysłania i długość.

Poniżej znajduje się przykładowy dokument kolekcji fs.chunks –

{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}

Dodawanie plików do GridFS

Teraz zapiszemy plik mp3 używając GridFS za pomocą komendy put. W tym celu użyjemy narzędzia mongofiles.exe obecnego w folderze bin folderu instalacyjnego MongoDB.

Otwórz wiersz poleceń, przejdź do mongofiles.exe w folderze bin folderu instalacyjnego MongoDB i wpisz następujący kod –

>mongofiles.exe -d gridfs put song.mp3

Tutaj, gridfs jest nazwą bazy danych, w której plik będzie przechowywany. Jeśli baza danych nie jest obecna, MongoDB automatycznie utworzy nowy dokument w locie. Song.mp3 to nazwa wgrywanego pliku. Aby zobaczyć dokument pliku w bazie danych, możemy użyć zapytania find –

>db.fs.files.find()

Powyższe polecenie zwróciło następujący dokument –

{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }

Możemy również zobaczyć wszystkie chunki znajdujące się w kolekcji fs.chunks collection związanych z zapisanym plikiem za pomocą następującego kodu, używając id dokumentu zwróconego w poprzednim zapytaniu –

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

W moim przypadku zapytanie zwróciło 40 dokumentów, co oznacza, że cały dokument mp3 został podzielony na 40 chunksów danych.

Reklamy

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.