我有一个任务,每隔 n 秒运行扫描文件系统以获取新文件并将它们存储到集合中。
我不确定确保在数据库中两次不使用同一文件的最佳方法。目前我正在获取文件绝对路径并检查数据库中的其他绝对路径
public Movie findByAbsolutePath(String absolutePath) {
return getDatastore().find(Movie.class, "absolutePath", absolutePath).limit(1).get();
}
如果返回null,则继续并保存。
是否正在针对数据库检查每个文件,这是最好的方法吗?我已经尝试使用以下索引注释,但它似乎不起作用,我最终得到重复
@Indexes(@Index(fields = {@Field("fileName"), @Field("absolutePath")}, options = @IndexOptions(unique = true, dropDups = true)))
这比我检查重复的方式更快(假设我可以让它工作)吗?
答案 0 :(得分:1)
您的索引不起作用,因为fileName
和absolutePath
上的唯一性约束。您将仅在absolutePath
上的单独索引上需要唯一约束。
要在Morphia中进行upsert,您需要将UpdateOptions
个实例传递给datastore.update()
,如文档here所示。 UpdateOptions
有upsert(boolean)
,您只需将true
传递给ob_start
。
答案 1 :(得分:0)
您也可以在集合中存储文件路径,并在文件路径上具有唯一索引。如果要在集合中添加新文件,可以在文件路径上执行upsert。