如何在MongoDB中轻松使用GridFS?( 二 )


  • files._id
该文档的唯一标识符 。_id是您为原始文档选择的数据类型 。MongoDB文档的默认类型是BSON ObjectId 。
  • files.length
文档的大小(以字节为单位) 。
  • files.chunkSize
每个块的大小(以字节为单位) 。GridFS将文档分为大小为chunkSize的块,最后一个除外,后者仅根据需要而变大 。默认大小为255 KB 。
  • files.uploadDate
GridFS首次存储这个文档的日期 。此值为有日期类型 。
  • files.md5
过期
FIPS 140-2禁止使用MD5算法 。MongoDB驱动程序已弃用MD5支持,并将在未来版本中删除MD5的生成 。需要文件摘要的应用程序应在GridFS外部实现它,并将其存储在files.metadata中 。
filemd5命令返回的完整文件的MD5哈希 。此值为字符串类型 。
  • files.filename
可选的 。GridFS文件的可读名称 。
  • files.contentType
过期
可选的 。GridFS文件的有效MIME类型 。仅应用程序用 。
使用files.metadata来存储与GridFS文件的MIME类型有关的信息 。
  • files.aliases
过期
可选的 。别名字符串数组 。仅用于应用程序
使用files.metadata来存储与GridFS文件的MIME类型有关的信息 。
  • files.metadata
可选的 。元数据字段可以是任何数据类型,并且可以保存您要存储的任何其他信息 。如果希望将其他任意字段添加到文件集合中的文档,请将其添加到元数据字段中的对象 。
 
GridFS索引
 
GridFS使用每个块和文件集合上的索引来提高效率 。为了方便起见,符合GridFS规范的驱动程序会自动创建这些索引 。您还可以根据需要创建任何其他索引,以满足您的应用程序需求 。
chunks索引
GridFS使用files_id和n字段在chunks集合上使用唯一的复合索引 。可以有效地检索块,如以下示例所示:
db.fs.chunks.find( { files_id: myFileID } ).sort( { n: 1 } )符合GridFS规范的驱动程序将在读取和写入操作之前自动确保此索引存在 。有关GridFS应用程序的特定行为,请参阅相关的驱动程序文档 。
如果该索引不存在,则可以执行以下操作以使用mongo shell创建它:
db.fs.chunks.createIndex( { files_id: 1, n: 1 }, { unique: true } );files索引
GridFS在files集合上的filename和uploadDate字段上使用索引 。该索引允许高效地检索文件,如本示例所示:
db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } )符合GridFS规范的驱动程序将在读取和写入操作之前自动确保此索引存在 。有关GridFS应用程序的特定行为,请参阅相关的驱动程序文档 。
如果该索引不存在,则可以执行以下操作以使用mongo shell创建它:
db.fs.files.createIndex( { filename: 1, uploadDate: 1 } ); [1]
(1, 2) 在GridFS上下文中使用术语块与在分片上下文中使用术语块无关 。
 
分片GridFS
 
GridFS考虑两个集合-files和chunks 。
chunks集合
要分片chunks集合,请使用{ files_id : 1, n : 1 } 或{ files_id : 1 } 作为分片键索引 。files_id是一个ObjectId,并且单调更改 。
对于不运行filemd5来验证成功上传的MongoDB驱动程序(例如,支持MongoDB 4.0或更高版本的MongoDB驱动程序),可以将哈希分片用于chunks集合 。
如果MongoDB驱动程序运行filemd5,则不能使用Hashed Sharding 。有关详细信息,请参阅SERVER-9888 。
files集合
files集合很小,仅包含元数据 。GridFS所需的所有密钥都不适合在分片环境中进行平均分配 。保留未分片的files允许所有文件元数据文档保留在主分片上 。
如果必须分片files集合,请使用_id字段,可能与应用程序字段结合使用 。
 
原文链接:
https://github.com/mongodb-china/MongoDB-CN-Manual/blob/master/cun-chu/gridfs.md
 
关于作者:张琦
JAVA 开发工程师,陕西西安 。

【如何在MongoDB中轻松使用GridFS?】


推荐阅读