我尝试将一个大的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());
}
任何帮助将不胜感激。
答案 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 MongoImport和Stackoverflow 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分钟才能完成(我的电脑有问题,我认为这就是为什么它需要花费所有时间!!)。 谢谢!!