将csv导入mongodb

时间:2015-07-06 10:41:35

标签: mongodb csv

我尝试将一个大的csv文件导入mongodb ...我使用commons csv解析我的文件,然后将其插入到我的数据库中。我的问题是我运行代码,它需要超过2天,只插入420320行(我的文件有7百万行)!

这是我的代码:

for (CSVRecord record : csvFileParser) {
            HashMap<String, String> doc = new HashMap<String, String>();
            doc.put(OCEAN_VOGID, record.get(OCEAN_VOGID));
            doc.put(OCEAN_CELLIDCIBLE, record.get(OCEAN_CELLIDCIBLE));
            doc.put(OCEAN_CELLIDSOURCE, record.get(OCEAN_CELLIDSOURCE));
            doc.put(OCEAN_ESWID, record.get(OCEAN_ESWID));
            doc.put(OCEAN_VOGCOMMENT, record.get(OCEAN_VOGCOMMENT));
            doc.put(OCEAN_VOGFLGSUP, record.get(OCEAN_VOGFLGSUP));
            doc.put(OCEAN_VOGNUMDI, record.get(OCEAN_VOGNUMDI));
            doc.put(OCEAN_VOGQUI, record.get(OCEAN_VOGQUI));
            doc.put(OCEAN_VOGQUAND, record.get(OCEAN_VOGQUAND));
            doc.put(OCEAN_VOGVERSION, record.get(OCEAN_VOGVERSION));
            doc.put(OCEAN_MODEID, record.get(OCEAN_MODEID));
            BasicDBObject document = new BasicDBObject();
            document.putAll(doc);
            table.insert(document);
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.putAll(doc);
            DBCursor cursor = table.find(searchQuery);
            System.out.println(cursor.next());
}

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

你试过mongoimport吗?

您可以使用以下命令导入它:

mongoimport --db dbname --collection collectionname --type csv --headerline --file /home/test.csv

我尝试了这个,并在几分钟内导入了一个复杂的5M行table / csv。

答案 1 :(得分:0)

你应该真的尝试mongoimport。我认为你只需要构建一次DB并使用它然后使用Java和Netbeans。

mongoimport --db users --collection contacts --type csv --headerline --file /opt/backups/yourData.csv

这里我有Link to the official MongoDB Docs for MongoImportStackoverflow Question的HowToUse

我不知道this方法有多快,但也要尝试一下。

如果MongoDB适合您的用例,您还应该考虑。

答案 2 :(得分:0)

我建议你尝试mongoDB的批量插入功能。以下是示例代码。

// Sample code
com.mongodb.DBCollection collection = db.getCollection("mycol");

BulkWriteOperation  bulkWriteOperation= collection.initializeUnorderedBulkOperation();

//perform the insert operation in the loop to add objects for bulk execution
for (int i=0;i<100;i++)
{
bulkWriteOperation.insert(new BasicDBObject("_id",Integer.valueOf(i)));
}

// execute bulk operation on mycol collection
BulkWriteResult result=bulkWriteOperation.execute();

答案 3 :(得分:0)

我找到了解决问题的方法!我找到了这个项目https://github.com/deafgoat/CSV2MongoDB我用我的文件运行了两次。第一次将文件导入我的mongodb需要20分钟,而seconde需要45分钟才能完成(我的电脑有问题,我认为这就是为什么它需要花费所有时间!!)。 谢谢!!