我正在尝试防止由于同时有多个并行请求而将项重复插入集合。
我的业务逻辑是,如果集合中没有唯一的项XYZ,我将插入它,否则我将返回文档。
现在这些项目不能在数据库中重复。如果Nodejs中有多个并发请求,我们会在数据库中得到重复的项目,因为所有请求在同时从数据库读取时,发现项目不存在,然后插入导致重复的项目。
我知道我们可以使用唯一索引来防止这种情况,但我不想使用索引,因为集合非常大,包含不同类型的数据,而且我们已经在其他集合上使用了大量索引。
请建议一些其他的方法,我该如何处理?
我可以使用索引,但需要其他的解决方案,以避免内存内存RAM过度使用。
1条答案
按热度按时间guykilcj1#
你使用insert吗?如果是的话,我建议使用update,opts upsert=true,但是,根据这个,只有当有一个唯一索引时,这才是原子的。
除此之外,我不知道您是否使用了任何类型的互斥锁来实现并发,如果没有,您应该考虑一下。Here是一个很好的起点。
如果没有原子操作或互斥锁,就不能保证并行线程中的任何数据竞争安全性。