将 CSV 文件导入 MongoDB 时,文件大小要求会发生变化吗?

Do file size requirements change when importing a CSV file to MongoDB?

背景:

我正在尝试按照 tutorial 导入大约 324MB 的 CSV 文件

到 MongoLab 的沙箱计划(上限为 500MB),通过 Python 3.4.

中的 pymongo

该文件包含约 770,000 条记录,插入后约 164,000 条记录,我达到了配额并收到:

raise OperationFailure(error.get("errmsg"), error.get("code"), error)

OperationFailure: quota exceeded 

问题:

NoSQL 的 JSON 类结构需要更多 space 来保存与 CSV 文件相同的数据是否准确?还是我在搞什么鬼?

更多信息:

以下是数据库指标:

这是我使用的 Python 3.4 代码:

import sys
import pymongo
import csv


MONGODB_URI = '***credentials removed***'


def main(args):

    client = pymongo.MongoClient(MONGODB_URI)

    db = client.get_default_database()

    projects = db['projects']

    with open('opendata_projects.csv') as f:
        records = csv.DictReader(f)
        projects.insert(records)

    client.close()


if __name__ == '__main__':
    main(sys.argv[1:])

是的,JSON 比 CSV 占用 space 多得多。这是一个例子:

name,age,job
Joe,35,manager
Fred,47,CEO
Bob,23,intern
Edgar,29,worker

翻译成JSON,会是:

[
    {
        "name": "Joe",
        "age": 35,
        "job": "manager"
    },
    {
        "name": "Fred",
        "age": 47,
        "job": "CEO"
    },
    {
        "name": "Bob",
        "age": 23,
        "job": "intern"
    },
    {
        "name": "Edgar",
        "age": 29,
        "job": "worker"
    }
]

即使去掉所有的白色space,JSON也是158个字符,而CSV只有69个字符。

不考虑压缩之类的因素,一组 json 文档比一个 csv 占用更多 space,因为字段名称在每条记录中重复,而在 csv 中字段名字只在第一行。

文件的分配方式是另一个因素:

在您附加的数据库指标屏幕截图的 filesize 部分,请注意它表示分配的第一个文件为 16MB,然后下一个为 32MB,依此类推。因此,当您的数据总量超过 240MB 时,您有 5 个文件,分别为 16MB、32MB、64MB、128MB 和 256MB。这解释了为什么您的文件总大小为 496MB,即使您的数据大小仅为 317MB 左右。下一个将分配的文件将是 512MB,这将使您超过 500MB 的限制。