MongoDB更新失败怎么办,如何才能减少失败
Admin 2022-05-27 群英技术资讯 552 次浏览
现象:
WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS");
获取res.getN()返回值时,发现偶尔情况下该返回值为0,表示该更新操作没有更新到任何数据。并且如果是多线程并发更新,失败几率大大提高。
官网表示不能保证更新操作的成功性....
方案:
一次失败后,另起线程多次重试。
private ThreadPoolExecutor exec = new ThreadPoolExecutor(2, 10, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), new ThreadPoolExecutor.CallerRunsPolicy()); 主要代码: WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS"); //如果更新失败,进入其他线程重试更新 if (res.getN() == 0) { exec.execute(new Runnable() { @Override public void run() { int num = 0; WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS"); while (res.getN() == 0 && num < 100) { res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS"); num++; try { Thread.sleep(300); } catch (InterruptedException e) { logger.error("响应更新失败{}", e); } } if (res.getN() == 0) { logger.error("响应更新失败!!!gwMsgId:{},masMsgId:{}", gwMsgId, masMsgId); } } });
如此失败率,大大减少。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
MongoDB中文档增删查改怎样操作的呢?分享一篇关于“MongoDB中的文档如何进行增删查改”的文章内容给大家,有需要的小伙伴可以自行参考下,希望小编所整理的资料能帮助到你解决问题,接下来就一起看一看吧!
mongodb删除数据的方法:可以使用remove()函数删除数据,remove()函数不会删除集合本身,同时原有的索引也不会被删除。
在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。
MongoDB 原子操作 mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。 但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。 所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。 原子操作数据模型 考虑下面的例子,图书馆的书籍及结账信息。 实例说明了在一个相同的..
mongodb重启中文字符乱码的解决方法:1、服务器返回值设置一定要是UTF-8;2、服务端数据流读取一定要设置为UTF-8;3、客户端上传HTTP请求,一定要设置为UTF-8格式;4、数据流编辑也设置为UTF-8。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008