gpt4 book ai didi

java - 从集合中选择/选择,即 mongoDB gridFS 的 block 或文件。我们可以在什么基础上做出这个决定?

转载 作者:行者123 更新时间:2023-12-01 12:32:00 31 4
gpt4 key购买 nike

我是 mongoDB 的新手,想用它来存储文件,即图像和视频(大小可以超过 40-50MB)。为此,我们可以使用 mongoDB gridFS。但在 gridFS 中,它们是两个集合,即 block 和文件。现在我想知道哪个集合(即 block 或文件)最适合我。我们如何或在何种基础上做出决定。

要求:

  • 存储图像和视频
  • 视频可以超过 40-50MB
  • 经常访问此媒体

最佳答案

这里可能有点困惑 GridFS实际上是这样,因为它实际上并不是 MongoDB“做的”事情,而实际上只是一个驱动程序规范,用于如何在标准集合中存储超过 16MB BSON 限制的数据。

为此,有 two collections由 GridFS 实现使用。一种通常称为"file",另一种称为“ block ”。它们有不同的用途,并且不能按照您的要求“选择”存储位置。

"file"集合用于“元数据”,它只是有关"file"的一些信息,基本上就是您想要的任何信息。这“描述”了文件,最重要的是充当对用于标识“ block ”集合中的文件的 _id 的“引用”。作为示例:

db.fs.files.findOne()
{
"_id" : ObjectId("533b67d8afc27c15fc82caf4"),
"filename" : "twig.pl",
"chunkSize" : 262144,
"uploadDate" : ISODate("2014-04-02T01:28:56.915Z"),
"md5" : "9b10c69537126652aebc2742ca3ad69a",
"length" : 267
}

因此有一个 _id 和有关该文件的一些其他数据。它只是一个标准集合,您可以这样查询它。

当然,“ block ”实际上指的是实际"file"的“部分”,简单来说,它看起来像这样:

{
"_id" : ObjectId("533b67d8c6ed8872a7fa9ff0"),
"files_id" : ObjectId("533b67d8afc27c15fc82caf4"),
"n" : 0,
"data" : BinData(0,"IyEvdXNyL2Jpbi9lbnYg....")
}

实际存储内容所需的数量将是多少。

至于 block 的“大小”,这通常取决于驱动程序实现,但通常会有一种方法来指定使用什么,但从规范来看:

"By default GridFS limits chunk size to 255k..."

但是,您当然应该尝试在您的实现中保持这一点的一致性。正如您从上面的“元”文档中看到的,规范是将这些信息与元数据一起“存储”,以便在回读和“构造”某种句柄时可以确定这一点。

因此,“驱动程序实现”实际上将处理 block 上的“读/写”操作如何发生,并且通常会执行一些操作将结果呈现为某种"file"或“流”。但这些只是“普通的 Collection ”,本身并没有什么特别的。因此,所有正常的查询和 CRUD 操作都可以像其他集合一样对这些集合进行操作。

关于java - 从集合中选择/选择,即 mongoDB gridFS 的 block 或文件。我们可以在什么基础上做出这个决定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25862979/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com