【问题标题】:Storing GBs of JSON-like data in MongoDB在 MongoDB 中存储 GB 的类似 JSON 的数据
【发布时间】:2016-03-15 07:55:07
【问题描述】:

我正在使用 MongoDB,因为 Meteor 官方不支持其他任何东西。

主要目标是上传 CSV 文件,在 Meteor 中解析它们并将数据导入数据库。

每个文件插入的数据大小可以是 50-60GB 或更多,但由于文档大小限制,我什至不能插入大于 16MB 的数据。此外,即使插入的 1/10 也需要很多时间。

我正在使用 CollectionFS 在客户端上传 CSV 文件。因此,我也尝试对数据本身使用 CollectionFS,但它给了我一个“不支持的数据”错误。

对此我能做些什么?

编辑:由于我的问题对存储数据技术造成了混淆,我想澄清一些事情:我对上传 CSV 文件不感兴趣;我有兴趣将数据存储在文件中。我想在一个地方收集所有用户的数据,我想用最少的资源获取数据。

【问题讨论】:

    标签: json node.js mongodb csv meteor


    【解决方案1】:

    您可以将 csv 文件作为集合插入(文件名可以成为集合名称),将 csv 的每一行作为一个文档。这将达到每个文档大小限制在 16 MB 左右。你最终可能会得到很多集合,但这没关系。另一个集合可以跟踪文件名到集合名称的映射。

    【讨论】:

    • 感谢您的建议。我考虑将数据保存在文件中,但我会及时为一个用户合并不同的数据,所以我认为将数据保存在数据库中会更好。另外,如果我将数据保存在文件中并在每次用户登录时解析它们以获取一条信息,这不会造成资源效率低下吗?这不意味着要读取整个文件以获取单行信息吗?
    【解决方案2】:

    在 CollectionFS 中,您可以直接保存文件文件系统,只需添加适当的包并创建您的集合,如下所示:

    Csv = new FS.Collection("csv", {
        stores: [
            new FS.Store.FileSystem("csv","/home/username/csv")
        ],
        filter: {
            allow: {
                extensions: ['csv']
            }
        }
    });
    

    【讨论】:

    • 感谢您的回答,但我不是在寻找存储文件,而是在寻找在文件中存储数据,正如我在上面的答案中评论的那样:及时,我将合并不同的数据一位用户,所以我认为将数据保存在数据库中会更好。另外,如果我将数据保存在文件中并在每次用户登录时解析它们以获取一条信息,这不会造成资源效率低下吗?这不意味着要读取整个文件以获取单行信息吗?
    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多