当前位置: 首页 > 知识库问答 >
问题:

从集合(即mongoDB GridFs的块或文件)中选择。我们可以根据什么来决定这一点?

党源
2023-03-14

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

要求:

  • 存储图像和视频
  • 视频可以大于40-50MB
  • 频繁访问此介质

共有1个答案

能修谨
2023-03-14

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

为此,GridFS实现使用了两个集合。一个一般被命名为“文件”,另一个被命名为“块”。这些有不同的目的,并不是一个“选择”的地方存储如你所问。

“Files”集合是用于“元数据”的,元数据只是关于“文件”的一些信息,基本上是您希望它是什么。这“描述”文件,最重要的是充当对_id的“引用”,该_id用于标识“chunks”集合中的文件。作为示例

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和一些关于文件的其他数据。它只是一个标准集合,您可以查询它。

当然,“块”实际上指的是实际“文件”的“部分”,简而言之,它看起来如下所示:

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

并且将会有实际存储内容所需的数量。

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

“默认情况下,GridFS将块大小限制为255K...”

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

因此“驱动程序实现”将实际处理对块的“读/写”操作如何发生,并且通常会做一些事情来将结果呈现为“文件”或“流”的类型。但这些只是“普通藏品”,本身并无特别之处。因此,所有正常的查询和CRUD操作都可以在这些集合上工作,就像在其他集合上一样。

 类似资料:
  • 我用AnyLogic创建了一个简单的模型(见截图)。现在我想添加一个条件,选择服务块中的两个资源集中的一个。例如,以下场景应适用:如果队列中有5个以上的部件,工作人员3和工作人员4应执行服务。如果有的话

  • 我不明白为什么liquibase在进行diff时会执行如下所示的选择,其中0=1? 评论说“使用SQL检查自动增量”,但我不理解选择应该如何工作。我在Informix和Postgress中都尝试了select,但都没有返回任何行。 调试2015年1月22日下午4:41:liquibase:连接到khhis@jdbc:informix-sqli://stmst3.test.trnswrks.com:

  • 问题内容: 所以有一个DataFrame说: 我要选择特定列的特定行的数据类型为type的行。 例如,我想选择行,其中列中的数据是。因此它应该打印如下内容: 谁的直观代码如下所示: 显然不起作用! 谢谢,请帮忙! 问题答案: 这有效:

  • 问题内容: 我想编写一个CSS选择器规则,以选择 没有 特定类的所有元素。例如,给定以下HTML: 我想编写一个选择器来选择所有没有“可打印”类 的 元素,在这种情况下,它们是 导航 和元素。 __ 这可能吗? 注意:在实际的HTML中,我想使用它的地方将比 不 包含“可打印的”类的元素多得多(在上面的示例中,我发现这是另一种方式)。 问题答案: 通常,您将类选择器添加到伪类中,如下所示: 但是,

  • 我被困在第2天:hackerrank上的操作员问题。任务如下:给定一顿饭的餐费(一顿饭的基本成本)、小费百分比(餐费的百分比作为小费添加)和税收百分比(餐费的百分比作为税收添加),查找并打印餐费的总成本。将结果四舍五入到最接近的整数。 这是我的代码: 截图

  • 问题内容: 我一直在尝试从数据集中为所有行选择一组特定的列。我尝试了以下类似的方法。 我想提一下,所有行都包含在内,但只需要编号的列即可。有没有更好的方法来解决这个问题。 样本数据: 我试图忽略我的数据集中的工作,婚姻,教育和y栏。y列是目标变量。 问题答案: 如果需要按位置选择,请使用: 另一个解决方案是不必要的列: