将csv导入mongodb

将csv导入mongodb,mongodb,csv,Mongodb,Csv,我尝试将一个大的csv文件导入mongodb。。。我用commons csv解析了我的文件,然后将其插入数据库。我的问题是我运行代码需要2天多的时间,只插入420320行(我的文件有700万行) 这是我的密码: for (CSVRecord record : csvFileParser) { HashMap<String, String> doc = new HashMap<String, String>(); doc.pu

我尝试将一个大的csv文件导入mongodb。。。我用commons csv解析了我的文件,然后将其插入数据库。我的问题是我运行代码需要2天多的时间,只插入420320行(我的文件有700万行)

这是我的密码:

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());
}
for(CSVRecord记录:csvFileParser){
HashMap doc=新的HashMap();
doc.put(OCEAN_VOGID,record.get(OCEAN_VOGID));
doc.put(OCEAN_cellidge,record.get(OCEAN_cellidge));
doc.put(OCEAN\u CELLIDSOURCE,record.get(OCEAN\u CELLIDSOURCE));
文件放置(OCEAN_ESWID,记录获取(OCEAN_ESWID));
doc.put(OCEAN_VOGCOMMENT,record.get(OCEAN_VOGCOMMENT));
文件放置(OCEAN_Vogflugsup,记录。获取(OCEAN_Vogflugsup));
文件put(OCEAN_VOGNUMDI,record.get(OCEAN_VOGNUMDI));
文件put(OCEAN_VOGQUI,record.get(OCEAN_VOGQUI));
doc.put(OCEAN_VOGQUAND,record.get(OCEAN_VOGQUAND));
文件放置(OCEAN_VOGVERSION,记录获取(OCEAN_VOGVERSION));
doc.put(OCEAN_MODEID,record.get(OCEAN_MODEID));
BasicDBObject文档=新的BasicDBObject();
文件.putAll(doc);
表.插入(文件);
BasicDBObject searchQuery=新建BasicDBObject();
searchQuery.putAll(doc);
DBCursor=table.find(searchQuery);
System.out.println(cursor.next());
}
任何帮助都将不胜感激。

您试过了吗

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

mongoimport --db dbname --collection collectionname --type csv --headerline --file /home/test.csv
我尝试了这个,并在几分钟内导入了一个复杂的5M行表格/csv

你真的应该试试
mongoimport
。我认为您只需要构建一次DB,然后正确地使用它,然后使用Java和Netbeans

mongoimport --db users --collection contacts --type csv --headerline --file /opt/backups/yourData.csv
这里我有一个和一个的HowToUse

我不知道这种方法有多快,但也试一下


您还应该考虑MongoDB是否适合您的用例。

我建议您尝试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();
//示例代码
com.mongodb.DBCollection=db.getCollection(“mycl”);
BulkWriteOperation BulkWriteOperation=collection.InitializeUnderedBulkOperation();
//在循环中执行insert操作以添加用于批量执行的对象

对于(int i=0;i我找到了解决问题的方法!我找到了这个项目,我用我的文件运行了两次。第一次需要20分钟才能将文件导入mongodb,第二次需要45分钟才能完成(我的电脑有点问题,我想这就是为什么它一直响的原因!!)。
谢谢!!

对不起,我没有这方面的经验。但是,只要你一个接一个地插入文档,就需要很长时间。谢谢你的回复。但是我的老板想使用一个界面来导入许多文件(根据需要)所以他没有接受mongoimport解决方案!@MDM然后我认为他必须等待更长的时间。另一个想法是用Java包装mongoimport,但你会对依赖项有一个老鼠尾巴。是的!!现在我正在尝试另一个解决方案,如果它有效,我会发布它!