如何加快在mongodb中插入100万到400万文档的速度?

xdyibdwo  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(256)

我使用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万条记录的?
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题