我有一个包含100万个唯一编号的MongoDB集合。
我有一个操作,我需要在集合中添加30,000个数字,但如果这些数字已经在集合中,我需要取消操作。
使用C#,想法#1是做这样的事情:
private void DoImport(List<long> numbersToImport)
{
// brings over 1 million records from the DB. Yikes!
var numbersInDatabase = numberRepository.GetAll();
// convert list into a more lookup-able format
var numbersHash = new HashSet<long>(numbersInDatabase);
// determine if any numbers are already in the database
var duplicates = numbersToImport.Where(number => numbersHash.Contains(number));
if (duplicates.Any()) {
// abort processing - at least one input list element is already in the database
}
}
但是,为了进行比较,引入500万个数字会有明显的性能和可扩展性问题。
由于我有一个唯一索引,想法#2是批量插入,如果新插入的集的计数与初始列表的计数不匹配,则删除所有新记录。我不喜欢这不是确定性的。在我进入数据库之前,似乎我应该更多地了解唯一性。
在添加到集合之前,是否有可扩展且有效的方法来检查集合的唯一性?