【问题标题】:What is the best file format to upload to MongoDB上传到 MongoDB 的最佳文件格式是什么
【发布时间】:2016-08-10 15:52:03
【问题描述】:

我对 MongoDB 完全不熟悉,如果我的问题太简单,请原谅。

我有4个数据集,每个数据集都有对应样本的文件,每个样本有3个文件对应三种归一化方法。所有 4 个数据集中的样本总数为 20000,因此文件总数为 60000(由于 3 种归一化方法)。每个文件大约有 2-5 列和 60000 行。我想创建一个具有以下列的数据库:

Dataset, Sample, Type, Normalization, ID, Value

示例:对于 dataset Pnoc,我有一个 sample C021_0001_20140916 Tumor type 并且它有文件对应三个标准化方法KallistoRSEM_GenesRSEM_Isoforms。所有这些信息都编码在文件名中。 IDvalue 将取自文件内容中的 target_idtpm

target_id   length  eff_length  est_counts  tpm
ENST00000619216.1   68  22.4958 3.07692 1.17482
ENST00000473358.1   712 527.104 0   0
ENST00000469289.1   535 350.229 0   0
ENST00000607096.1   138 16.1984 0   0
ENST00000417324.1   1187    1002.07 0.071357    0.000611642
ENST00000461467.1   590 405.167 0   0
ENST00000335137.3   918 733.078 0   0
ENST00000466430.5   2748    2563.07 233.847 0.783663
ENST00000495576.1   1319    1134.07 0   0

我正在python 中编写一个脚本,以递归方式遍历每个文件,创建一个 JSON 对象,然后我将在脚本本身中将其上传到 MongoDB。我想的 JSON 对象看起来像这样:

# 20000 Sample names, 3 Normalization methods and 60000 IDs in each file.
DatasetName1 {
    SampleName1 {
        Type {
            Normalization1 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization2 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization3 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            }
        }   
    },
    SampleName2 {
        Type {
            Normalization1 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization2 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization3 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            }
        }   
    },
    ...
    SampleName20000{
        Type {
            Normalization1 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization2 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            },
            Normalization3 {
                { ID1: value, Expression: value },
                { ID2: value, Expression: value },
                ...
                { ID60000: value, Expression: value }
            }
        }
    }
}

然而,在我开始编写脚本来处理这么多文件并转换为 JSON 之前,我想知道上传到 MongoDB 的最佳格式是什么 - JSON/plaintext/csv 或任何其他格式?

如果我可以提供有关我的代码的任何其他信息,请告诉我。

谢谢!

【问题讨论】:

  • 您需要解析每个文件并将其内容上传到 MongoDB 集合中,无需上传文件。对吗?
  • 技术上我必须上传整个文件内容。我只是不知道什么是最好的方法,所以我正在考虑将内容转换为 JSON,然后上传到 mongodb。
  • 您的示例有嵌套的子文档。为此,您只能使用 json 格式。您不能使用 csv。解析所有文件并将其内容写入 json 文件。然后使用 mongoimport 实用程序将 json 文件导入 MongoDB。
  • 是的,我举了一个例子来说明我是如何考虑创建一个 JSON 对象的。我只是想知道这是否更快或从文件中读取每一行并作为 csv 或 tsv 上传到 mongodb。
  • 这个导入的目的是什么?你打算用这些数据做一些分析吗?如果是这个原因,我不会以这种方式导入它。我将以不同的方式对其进行架构。

标签: python json mongodb


【解决方案1】:

根据您的要求,我会按照以下方式进行。

创建一个包含以下列的 CSV。解析您的文件并将数据转储到 CSV。在任何编程语言中创建 CSV 都非常容易。

dt_set, sample, type, norm, id, value

之后,使用MongoImport 将您的 CSV 导入 MongoDB。此架构更容易满足您的要求。聚合,过滤等更容易。我觉得你的嵌套结构示例做这些事情很复杂。

【讨论】:

    猜你喜欢
    • 2023-01-27
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2014-07-27
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多