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

时间:2015-04-24 17:49:35

标签: python mongodb csv python-3.x pymongo

背景:

我正在尝试关注here,其中我导入的CSV文件大约为324MB

enter image description here

到MongoLab的沙盒计划(上限为500MB),通过Python 3.4中的pymongo。

该文件包含~770,000条记录,插入~164,000后我点击了我的配额并收到了:

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

OperationFailure: quota exceeded 

问题:

NoSQL的类JSON结构是否需要更多空间来保存与CSV文件相同的数据?或者我在这里做些什么?

更多信息:

以下是数据库指标:

enter image description here

这是我使用的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:])

2 个答案:

答案 0 :(得分:2)

是的,JSON比CSV占用更多空间。这是一个例子:

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"
    }
]

即使删除了所有空格,JSON也是158个字符,而CSV只有69个字符。

答案 1 :(得分:1)

不考虑像压缩这样的东西,一组json文档会占用比csv更多的空间,因为字段名称在每个记录中重复,而在csv中,字段名称只在第一行中。

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

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