【问题标题】:How to store a over 16MB document in mogodb or any other best approach如何在 mongodb 或任何其他最佳方法中存储超过 16MB 的文档
【发布时间】:2021-05-08 16:25:45
【问题描述】:

在我的项目中,我们需要存储超过 16MB 大小的文档,我的文档定义如下所示

@Document
@Data
public class Execution {

  @Id
  private String executionId;
  private String queryId;
  private Type type;
  private String status;
  private Long startTime;
  private Long finishedTime;
  private String executedBy;
  private List<HashMap<String,String>> data;
  private Integer recordCount;
  private Attribute attribute;
  private String version;
}

这里的字段data 是一个包含超过200k 记录的列表,我们需要通过在字段data 上分页来从mongodb 获取此文档。但是 mongodb 不允许存储大小超过 16MB 的文档。我尝试将列表的每个元素作为单独的文档存储在不同的集合中,但是随着集合中文档的增长,执行查询所花费的时间也在增加

请有人建议任何解决方法来存储大小大于 16MB 的文档或满足此要求的任何其他方法。

【问题讨论】:

    标签: mongodb spring-boot


    【解决方案1】:

    处理大于 16MB 的文档的建议方法是 gridfs

    【讨论】:

    • 这无济于事;您无法查询 gridfs 文件内容。或者在上述场景中,所需的元数据字段将与文件本身一样大。
    • 查询所需的大小。这里没有理想的解决方案,但 gridfs 提供了一种内置方式来处理大于 16MB 的文件,例如支持索引。所以选择的解决方案应该考虑权衡并基于目标
    【解决方案2】:

    如果您不需要查询“数据”字段;最好将外部存储(ftp、网络存储、AWS S3 或类似)中“数据”字段中的值存储为文件。那么你只需要在文档中存储文件的引用(URI或文件路径)即可。

    【讨论】:

    • 在我的项目中,我们需要查询数据字段。
    • 那么我可以建议您将文档简单地分成较小的块,例如 1 MB 或 1K - 也​​许。因此,如果数据字段包含超过 1K(根据您的需要调整)项;为每个 1K 条目插入一个新文档。这有助于解决在单独的文档中插入每个条目时引起的性能问题。
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    相关资源
    最近更新 更多