【发布时间】:2020-07-13 01:16:48
【问题描述】:
我有一个庞大的数据集,我使用的是猫鼬模式,每个数据元素看起来像这样:
{
field1: “>HWI-ST700660_96:2:1101:1455:2154#5@0/1”:
field2: “GAA…..GAATG”
}
如您所见,单个元素简单而小,但数量巨大!它们加起来将超过 200MB。
问题是:我无法将它保存到 mongo,因为它太大(> 200MB)。
不过,我找到了 GridF,
到目前为止,我找到的所有材料都是关于图像和视频上传的;
他们没有说我怎么还能使用猫鼬模式功能;
到目前为止,我看到的示例并没有将数据保存到用户定义的路径中,就像我们使用猫鼬所做的那样。
在最简单的场景中:如何使用 GridFS 或任何类似的解决方案来保存 JSON 文件,就像使用小型 JSON 文件一样。与其他方法相比,这种方法有哪些优点和缺点(如果有的话)?你认为我的方法有效吗?我的意思是,我在这里提到的那个,使用 JSON 文件树和稍后的populate,它可以工作!
作为使用 mongoose 保存 JSON 文件的示例:
Model.create([
{
field1: “>HWI-ST700660_96:2:1101:1455:2154#5@0/1”:
field2: “GAA…..GAATG”
},
{
field1: “>HWI-ST700660_96:2:1101:1455:2154#5@0/1”:
field2: “GAA…..GAATG”
}]);
这里我刚刚保存了一个包含两个元素的 JSON 文件,我不能用一个很大的文件来做到这一点,我需要分成更小的部分(比如 1% 的块),然后创建刚才提到的树,至少那是我的解决方案。
恐怕我正在重新发明轮子。我可以独立保存这些文件,它可以工作,但我需要保持它们的相关性,因为它们属于同一个文件,就像图像的较小块属于同一个图像一样。
恐怕我要重新发明轮子了。
当前解决方案
这是我目前的解决方案,使用我自己的见解! 看到我在这里提到只是出于好奇,它不使用 GridFS,因此,我仍然愿意接受使用 GridFS 的建议。它只使用 JSON 文件,并将文档分成更小的文件,就像层次结构一样。它是一棵树,我只想要溶液中的叶子。
我已经用这张图解决了这个问题,不过,出于学习目的,我想看看是否可以使用 GridFS 来做同样的事情。
讨论
我的第一个方法是将它们保留为 subdoc:它失败了!然后我试图只保留他们的 id,他们的 id 对应于整个块的 35%,并且大于 16MB:失败!然后我决定创建一个虚拟文档,仅保留 id,并仅存储虚拟文档的 id:成功!
【问题讨论】:
-
如果我的回答对你有帮助,请告诉我
-
是的,我几乎对它已经 5 岁的事实发表了评论。尽管如此,我认为 GridFS 在这方面没有改变。检索/存储时间与文档大小成正比这一事实与 GridFS 的设计有关,即它将数据拆分为块的方式。所以 5 年后,据我所知,这方面没有任何改变。
-
希望你能得到其他更有见地的答案!
-
您可以使用 GridFS 在 Mongo 中存储文件。如果使用 GridFS,无论文件中的数据是什么类型,都无法查询。您不能使用
find()、save()或任何其他 Collection 方法访问使用 GridFS 保存的文件中的数据。您可以仍然使用find()和其他Collection数据来查询/访问GridFS存储文件的元数据,其中包含文件大小、文件名、块数,以及您希望与文件一起保存的任何其他数据。您仍然可以在任何常规文档(不是 GridFS 文件)上使用 Collection 方法 -
谢谢,现在事情似乎更清楚了。我会尽快测试您的见解,上次我尝试过,我没有成功。最好的学习方式是编码!谢谢。
标签: javascript json mongodb mongoose