MongoDB GridFS
GridFS は、16M(BSONファイル制限)を超えるファイル(画像、音声、動画など)を保存および復元するために使用されます。
GridFS もファイルストレージの一つの方法ですが、それはMonoDBのコレクションに格納されます。
GridFS は16Mより大きいファイルをより良く保存できます。
GridFS は大きなファイルオブジェクトを複数の小さなchunk(ファイル断片)に分割します。通常は256k/個で、各chunkはMongoDBのドキュメントとしてchunksコレクションに格納されます。
GridFS は1つのファイルを保存するために2つのコレクションを使用します:fs.files と fs.chunks。
各ファイルの実際の内容はchunks(バイナリデータ)に保存され、ファイルに関するメタデータ(filename、content_type、その他ユーザー定義の属性)はfilesコレクションに保存されます。
以下は、簡単な fs.files コレクションドキュメントです:
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
以下は、簡単な fs.chunks コレクションドキュメントです:
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
GridFS ファイルを追加
ここで、GridFS の put コマンドを使用して mp3 ファイルを保存します。MongoDB インストールディレクトリの bin にある mongofiles.exe ツールを呼び出します。
コマンドプロンプトを開き、MongoDBのインストールディレクトリのbinディレクトリに移動して、mongofiles.exeを見つけ、以下のコードを入力します:
>mongofiles.exe -d gridfs put song.mp3
-d gridfsファイルを保存するデータベース名を指定します。そのデータベースが存在しない場合、MongoDBは自動的に作成します。そのデータベースが存在しない場合、MongoDBは自動的に作成します。Song.mp3 はオーディオファイル名です。
以下のコマンドを使用して、データベース内のファイルのドキュメントを確認します:
>db.fs.files.find()
上記のコマンドを実行すると、以下のドキュメントデータが返されます:
{
_id: ObjectId('534a811bf8b4aa4d33fdf94d'),
filename: "song.mp3",
chunkSize: 261120,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
fs.chunks コレクション内のすべてのチャンクを確認できます。以下で、ファイルの _id 値を取得しました。この _id に基づいてチャンク(chunk)のデータを取得できます:
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
上記の例では、クエリが40個のドキュメントのデータを返しました。これは、mp3ファイルが40個のチャンクに格納されていることを意味します。
その他の拡張