我正在尝试使用mongodb(Java编码)创建一个大数据应用程序。我的集合由普通文本文档组成。由于我不想要重复项,而且文档的文本字段太大了,无法创建唯一索引,因此我决定为每个文档的文本计算校验和值(使用MD5的MessageDigest),将该字段保存在文档中,并在该字段上创建唯一索引。
大致上,我的文档结构如下:
{
"_id": ObjectId('5336b4942c1a99c94275e1e6')
"textval": "some long text"
"checksum": "444066ed458746374238266cb9dcd20c"
"some_other_field": "qwertyuıop"
}
当我向我的集合添加新文档时,首先尝试通过查找具有该校验和值的文档来查看其是否存在。如果存在,则更新(其他字段),否则插入新文档。
这种策略很有效!但是,在集合中添加了一百万个文档后,我开始遇到无法接受的插入持续时间。校验和查找和插入都变慢了。我可以在将近1小时内插入约30,000个文档!我已经阅读了关于批量插入的文章,但是如果我采用这种方式,该怎么处理重复记录呢?请问有什么建议可以加速操作吗?
checksum
和update_time
上有一个复合索引,并且正在尝试使用upsert选项进行更新吗? - Anand Jayabalan