将 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 的限制。
背景:
我正在尝试按照 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 的限制。