首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止将重复文档插入Lotus notes数据库

防止将重复文档插入Lotus notes数据库
EN

Stack Overflow用户
提问于 2018-06-02 17:16:01
回答 2查看 102关注 0票数 1

我有一个托管在iis中的lotus web,它有一个post方法,该方法获取要插入到c# notes数据库中的文档in列表。post方法可以被多次调用,我希望防止插入重复的文档。

这是从post调用的代码(在静态类中):

代码语言:javascript
复制
lock (thisLock)
{
   var id = "some unique id";
   doc = vw.GetDocumentByKey(id, false);
   if (doc == null)
   {
      NotesDocument docNew = db.CreateDocument();
      //some more processing
      docNew.Save(true, false, false);
   }
}

即使有了锁,我也会遇到插入重复文档的情况。是因为可以在新进程上执行请求吗?防止这种情况发生的最好方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-06-02 21:42:39

你的问题是: getdocumentbykey依赖于视图索引的更新。在繁忙的服务器上,不能保证这是真的。您可以尝试调用vw.Update,但不幸的是,这不会触发视图索引的更新,因此它可能没有任何影响(它只更新vw对象以表示后端中发生的更改,如果后端没有更新,则它什么也不做)。

您可以改用db.Search('IdField ="' & id & '"', Nothing, 0),因为搜索不依赖于要重建的索引。这会稍微慢一点,但应该更准确。

票数 2
EN

Stack Overflow用户

发布于 2018-06-03 00:38:43

您可能希望将插入的ids存储在某个单例对象中,或者甚至是简单的静态列表中。和这个列表上的锁-任何获得锁的人都会验证它想要插入的ids不存在,然后将它们添加到列表本身。

你只需要在很短的时间内保存它们,这样两个具有相同内容的并发帖子就不会更新,而且普通的视图索引也会更新。因此,将时间戳与id一起存储,以便在列表变长时可以清除较旧的记录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50655315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档