MongoDB - GridFS
GridFSlà đặc điểm kỹ thuật của MongoDB để lưu trữ và truy xuất các tệp lớn như hình ảnh, tệp âm thanh, tệp video, v.v. Nó là một loại hệ thống tệp để lưu trữ tệp nhưng dữ liệu của nó được lưu trữ trong các bộ sưu tập MongoDB. GridFS có khả năng lưu trữ các tệp lớn hơn giới hạn kích thước tài liệu là 16MB.
GridFS chia tệp thành nhiều phần và lưu trữ từng phần dữ liệu trong một tài liệu riêng biệt, mỗi tệp có kích thước tối đa 255k.
GridFS theo mặc định sử dụng hai bộ sưu tập fs.files và fs.chunksđể lưu trữ siêu dữ liệu của tệp và các phần. Mỗi đoạn được xác định bởi trường ObjectId _id duy nhất của nó. Các fs.files đóng vai trò là một tài liệu mẹ. Cácfiles_id trường trong tài liệu fs.chunks liên kết đoạn này với phần mẹ của nó.
Sau đây là tài liệu mẫu của bộ sưu tập fs.files -
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
Tài liệu chỉ định tên tệp, kích thước đoạn, ngày tải lên và độ dài.
Sau đây là tài liệu mẫu của tài liệu fs.chunks -
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
Thêm tệp vào GridFS
Bây giờ, chúng tôi sẽ lưu trữ một tệp mp3 bằng GridFS bằng cách sử dụng putchỉ huy. Đối với điều này, chúng tôi sẽ sử dụngmongofiles.exe tiện ích hiện diện trong thư mục bin của thư mục cài đặt MongoDB.
Mở dấu nhắc lệnh của bạn, điều hướng đến mongofiles.exe trong thư mục bin của thư mục cài đặt MongoDB và nhập mã sau:
>mongofiles.exe -d gridfs put song.mp3
Đây, gridfslà tên của cơ sở dữ liệu mà tệp sẽ được lưu trữ. Nếu cơ sở dữ liệu không có, MongoDB sẽ tự động tạo một tài liệu mới ngay lập tức. Song.mp3 là tên của tệp được tải lên. Để xem tài liệu của tệp trong cơ sở dữ liệu, bạn có thể sử dụng truy vấn tìm -
>db.fs.files.find()
Lệnh trên trả về tài liệu sau:
{
_id: ObjectId('534a811bf8b4aa4d33fdf94d'),
filename: "song.mp3",
chunkSize: 261120,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
Chúng tôi cũng có thể thấy tất cả các phần có trong bộ sưu tập fs.chunks liên quan đến tệp được lưu trữ với mã sau, sử dụng id tài liệu được trả về trong truy vấn trước đó -
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
Trong trường hợp của tôi, truy vấn trả về 40 tài liệu có nghĩa là toàn bộ tài liệu mp3 được chia thành 40 phần dữ liệu.