我使用spring作为框架,mongodb作为db。我注意到mongo可以很好地查找文档,但是当它处理大量的记录时,它会变得非常慢(大约需要6分钟来保存一百万个文档)。在我的数据库中,在另一个表中,有很多数据(大约有2000万条记录)。有问题吗?
我怎样才能加快这个过程?
我将向您展示如何在spring中编写数据:
@Document
public class Message {
@Id
private String id;
...other 20 fields with getter and setter...
}
为了保存数据,我尝试了:
第一次尝试:
mongotemplate.insertAll(messages)
第二次尝试:
BulkOperations bulkOp = mongotemplate.bulkOps(BulkMode.UNORDERED , Message.class);
bulkOp.insert(messages.parallelStream()
.map(Message::flatToTmpMessage) // map a DtoMessage into Message
.collect(Collectors.toList()));
long nMessage = bulkOp.execute().getInsertedCount();
第三次尝试:
List<Document> documents = messages.parallelStream()
.map(Message::flatToDocument) // I create a Bson from DtoMessage foreach document
.collect(Collectors.toList());
String collectionName = mongotemplate.getCollectionName(Message.class);
mongotemplate.getCollection(collectionName).insertMany(documents);
实际上最后一个比其他的稍微好一点,但是没有一个能让我满意。我怎样才能减少写作时间?使用其他类型的数据库(如cassandra或sql)方便吗?如果答案是肯定的,那么在一张几乎空荡荡的表中,哪一个是最快写出400万条记录的?
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!