2015-04-24 23 views
2

背景:將CSV文件導入到MongoDB時,文件大小需求是否發生變化?

我試圖在我導入CSV文件,該文件約324MB

enter image description here

到MongoLab的沙盒計劃,以遵循tutorial(以500MB爲上限) ,通過Python 3.4中的pymongo。

的文件保存〜77萬點的記錄,之後插入〜164000,我打我的配額並獲得:

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

OperationFailure: quota exceeded 

問:

難道是準確的說了JSON樣NoSQL的結構需要更多空間來保存與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:]) 

回答

1

不考慮像壓縮這樣的事情,一組json文檔佔用的空間比csv多,因爲每個記錄中都重複了字段名稱,而在csv中,字段名稱只在第一行。

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

在數據庫度量的文件大小部分截圖中連接,通知,它說的是分配的第一個文件是16MB,那麼下一個是32MB,等等。所以當你的數據總共增加到240MB時,你有5個文件,16MB,32MB,64MB,128MB和256MB。這就解釋了爲什麼您的文件大小總計爲496MB,即使您的數據大小隻有大約317MB。下一個將被分配的文件將是512MB,這將超過500MB的限制。

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個字符。