背景:
我正在尝试关注here,其中我导入的CSV文件大约为324MB
到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文件相同的数据?或者我在这里做些什么?
更多信息:
以下是数据库指标:
这是我使用的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:])
答案 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的限制。