我正在尝试使用mongodb(用Java编码)创建一个大数据应用程序。我的收藏包括普通的文本文件。因为我不想要重复和文件'文本字段太大而无法创建唯一索引,我决定为每个文档的文本计算校验和值(MessageDigest with MD5),将此字段保存在文档中并在此字段上创建唯一索引。
我的文档大致有如下结构:
{ "_id": ObjectId('5336b4942c1a99c94275e1e6') "textval": "some long text" "checksum": "444066ed458746374238266cb9dcd20c" "some_other_field": "qwertyuıop" }
因此,当我向我的集合添加新文档时,首先我尝试通过查找具有该校验和值的文档来查找它是否存在。如果它存在,我更新(其他字段),否则我插入新文档。
这个策略有效!但是在收集了一百万份文件后,我开始得到不可接受的插入持续时间。 cheksum查找和插入都减慢了。我可以在近1小时内插入~30,000个文档!我已阅读有关批量插入的内容,但如果我朝这个方向走,则无法决定如何处理重复记录。关于加快战略的战略的任何建议?
答案 0 :(得分: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)
}