摘要:公司采用作为新项目的数据存储方式,以前没那么大规模用过,心里还是有点悬,不知道会掉在哪些坑里,先给自己挖个坑。的第一个大坑好大的坑,让我忙了一个下午。。。
公司采用 MongoDB 作为新项目的数据存储方式,以前没那么大规模用过,心里还是有点悬,不知道会掉在哪些坑里,先给自己挖个坑。
mongoDB 的第一个大坑:好大的坑,让我忙了一个下午。。。mongodb对自己开发的nodejs驱动太不负责任了吧。。。
问题描述:采用异步方式插入三条数据(三条数据的插入间隔时间不超过1s),当第一条数据写入但还没有执行回调的时候就开始插入下一条数据就会出现索引异常,提示大意就是插入了两条相同键值的记录。
为什么呢:之前在用 php 写入数据的时候不会发生这个问题,大概是因为 php 是顺序执行的,没有异步的特征。看了官方的文档,mongodb 的 _id 生成机制是基于时间戳,当前进程ID以及当前计数器的值,由于时间很短,当前时间戳是一样的,当前的进程也是一样的,问题发生的关键就是 mongodb nodejs 驱动在还没有执行回调的时候计数器的值不会增加(天啊,mongo是怎么想的啊,mysql 很早就避免了这个问题,执行一次id就会递增一次,而且不管这条信息是否执行成功,保证了是原子性的递增方式,这样才比较有业界良心啊),这样就造成了nodejs几乎同时写入mongodb时会发生索引错误,就是11000错误代码
方案:采用自己生成的 _id 来代替 mongo 生成的 _id 值,这样就能够有效进行避免。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/18715.html
摘要:传统的网页编程采用的三剑客来实现,在微信小程序中同样有三剑客。观察者模式不难实现,重点是如何在微信小程序中搭配其特有的生命周期来使用。交互事件传统的事件传递类型有冒泡型与捕获型,微信小程序中自然也有。 本文由作者邹永胜授权网易云社区发布。 简介为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程。用产品的话说就是: 云信 IM 小程序 S...
摘要:它就是史上最简单的教程第三篇服务消费者后端掘金上一篇文章,讲述了通过去消费服务,这篇文章主要讲述通过去消费服务。概览和架构设计掘金技术征文后端掘金是基于的一整套实现微服务的框架。 Spring Boot 配置文件 – 在坑中实践 - 后端 - 掘金作者:泥瓦匠链接:Spring Boot 配置文件 – 在坑中实践版权归作者所有,转载请注明出处本文提纲一、自动配置二、自定义属性三、ran...
摘要:在使用过程中我们可以通过增加哈希次数来提高数据的安全性。当然,对密码的哈希操作应该在保存数据之前。 showImg(https://segmentfault.com/img/remote/1460000010821081); 毫无疑问,几乎所有的应用都会涉及到数据存储。但是 Express 框架本身只能通过程序变量来保存数据,它并不提供数据持久化功能。而仅仅通过内存来保存数据是无法应对...
摘要:是为结果导向型人群开设的深度学习在线课程。但是最关键的是,我想通过构建简单的深度学习解决方案来实现理论和实践的相结合。我的目标是在一天结束前进入排名的前。我的时间都用于学习库组织数据和评估结果都是一些与深度学习无关的简单流程。 Fast.ai是Jeremy Howard为结果导向型人群开设的深度学习在线课程。我读过很多关于机器学习的书,也参加过不少这方面的课程,但我认为Fast.ai是迄今为...
阅读 962·2021-11-24 10:42
阅读 3474·2021-11-19 11:34
阅读 2604·2021-09-29 09:35
阅读 2525·2021-09-09 09:33
阅读 640·2021-07-26 23:38
阅读 2515·2019-08-30 10:48
阅读 1384·2019-08-28 18:07
阅读 421·2019-08-26 13:44