3

我正在尝试使用 mongodb(Java 编码)创建一个大数据应用程序。我的收藏包括普通的文本文档。由于我不希望重复并且文档的文本字段太大而无法创建唯一索引,因此我决定为每个文档的文本计算校验和值(带有 MD5 的 MessageDigest),将此字段保存在文档中并在此创建唯一索引场地。

大致我的文档具有如下结构:

{
"_id": ObjectId('5336b4942c1a99c94275e1e6')
"textval": "some long text"
"checksum": "444066ed458746374238266cb9dcd20c"
"some_other_field": "qwertyuıop"
}

因此,当我向我的集合中添加一个新文档时,首先我尝试通过查找具有该校验和值的文档来查找它是否存在。如果它存在,我更新它(其他字段),否则我插入新文档。

这个策略有效!但是在集合中的一百万个文档之后,我开始获得不可接受的插入持续时间。校验和查找和插入都变慢了。我可以在将近 1 小时内插入约 30,000 个文档!我已经阅读了有关批量插入的信息,但如果我朝那个方向前进,我无法决定如何处理重复记录。关于加快速度的策略有什么建议吗?

4

1 回答 1

1

我认为如果您使用另一个仅包含校验和和 update_time 文件的集合,它会快得多。当你插入你的普通 JSON 文档时,你也应该插入这个简短的 JSON 文档:

Your normal JSON document:
{
"_id": ObjectId('5336b4942c1a99c94275e1e6')
"textval": "some long text"
"checksum": "444066ed458746374238266cb9dcd20c"
"update_time": new Date(1396220136948)
"some_other_field": "qwertyuıop"
}

The short JSON document:
{
"_id": ...
"checksum": "444066ed458746374238266cb9dcd20c"
"update_time": new Date(1396220136948)
}
于 2014-04-01T12:17:35.503 回答