摘要:公司采用作為新項(xiàng)目的數(shù)據(jù)存儲(chǔ)方式,以前沒(méi)那么大規(guī)模用過(guò),心里還是有點(diǎn)懸,不知道會(huì)掉在哪些坑里,先給自己挖個(gè)坑。的第一個(gè)大坑好大的坑,讓我忙了一個(gè)下午。。。
公司采用 MongoDB 作為新項(xiàng)目的數(shù)據(jù)存儲(chǔ)方式,以前沒(méi)那么大規(guī)模用過(guò),心里還是有點(diǎn)懸,不知道會(huì)掉在哪些坑里,先給自己挖個(gè)坑。
mongoDB 的第一個(gè)大坑:好大的坑,讓我忙了一個(gè)下午。。。mongodb對(duì)自己開(kāi)發(fā)的nodejs驅(qū)動(dòng)太不負(fù)責(zé)任了吧。。。
問(wèn)題描述:采用異步方式插入三條數(shù)據(jù)(三條數(shù)據(jù)的插入間隔時(shí)間不超過(guò)1s),當(dāng)?shù)谝粭l數(shù)據(jù)寫(xiě)入但還沒(méi)有執(zhí)行回調(diào)的時(shí)候就開(kāi)始插入下一條數(shù)據(jù)就會(huì)出現(xiàn)索引異常,提示大意就是插入了兩條相同鍵值的記錄。
為什么呢:之前在用 php 寫(xiě)入數(shù)據(jù)的時(shí)候不會(huì)發(fā)生這個(gè)問(wèn)題,大概是因?yàn)?php 是順序執(zhí)行的,沒(méi)有異步的特征??戳斯俜降奈臋n,mongodb 的 _id 生成機(jī)制是基于時(shí)間戳,當(dāng)前進(jìn)程ID以及當(dāng)前計(jì)數(shù)器的值,由于時(shí)間很短,當(dāng)前時(shí)間戳是一樣的,當(dāng)前的進(jìn)程也是一樣的,問(wèn)題發(fā)生的關(guān)鍵就是 mongodb nodejs 驅(qū)動(dòng)在還沒(méi)有執(zhí)行回調(diào)的時(shí)候計(jì)數(shù)器的值不會(huì)增加(天啊,mongo是怎么想的啊,mysql 很早就避免了這個(gè)問(wèn)題,執(zhí)行一次id就會(huì)遞增一次,而且不管這條信息是否執(zhí)行成功,保證了是原子性的遞增方式,這樣才比較有業(yè)界良心啊),這樣就造成了nodejs幾乎同時(shí)寫(xiě)入mongodb時(shí)會(huì)發(fā)生索引錯(cuò)誤,就是11000錯(cuò)誤代碼
方案:采用自己生成的 _id 來(lái)代替 mongo 生成的 _id 值,這樣就能夠有效進(jìn)行避免。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/18715.html
摘要:傳統(tǒng)的網(wǎng)頁(yè)編程采用的三劍客來(lái)實(shí)現(xiàn),在微信小程序中同樣有三劍客。觀察者模式不難實(shí)現(xiàn),重點(diǎn)是如何在微信小程序中搭配其特有的生命周期來(lái)使用。交互事件傳統(tǒng)的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權(quán)網(wǎng)易云社區(qū)發(fā)布。 簡(jiǎn)介為了更好的展示我們即時(shí)通訊SDK強(qiáng)悍的能力,網(wǎng)易云信IM SDK微信小程序DEMO的開(kāi)發(fā)就提上了日程。用產(chǎn)品的話說(shuō)就是: 云信 IM 小程序 S...
摘要:它就是史上最簡(jiǎn)單的教程第三篇服務(wù)消費(fèi)者后端掘金上一篇文章,講述了通過(guò)去消費(fèi)服務(wù),這篇文章主要講述通過(guò)去消費(fèi)服務(wù)。概覽和架構(gòu)設(shè)計(jì)掘金技術(shù)征文后端掘金是基于的一整套實(shí)現(xiàn)微服務(wù)的框架。 Spring Boot 配置文件 – 在坑中實(shí)踐 - 后端 - 掘金作者:泥瓦匠鏈接:Spring Boot 配置文件 – 在坑中實(shí)踐版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處本文提綱一、自動(dòng)配置二、自定義屬性三、ran...
摘要:在使用過(guò)程中我們可以通過(guò)增加哈希次數(shù)來(lái)提高數(shù)據(jù)的安全性。當(dāng)然,對(duì)密碼的哈希操作應(yīng)該在保存數(shù)據(jù)之前。 showImg(https://segmentfault.com/img/remote/1460000010821081); 毫無(wú)疑問(wèn),幾乎所有的應(yīng)用都會(huì)涉及到數(shù)據(jù)存儲(chǔ)。但是 Express 框架本身只能通過(guò)程序變量來(lái)保存數(shù)據(jù),它并不提供數(shù)據(jù)持久化功能。而僅僅通過(guò)內(nèi)存來(lái)保存數(shù)據(jù)是無(wú)法應(yīng)對(duì)...
摘要:接下來(lái)繼續(xù)介紹三種架構(gòu)模式,分別是查詢分離模式微服務(wù)模式多級(jí)緩存模式。分布式應(yīng)用程序可以基于實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布訂閱負(fù)載均衡命名服務(wù)分布式協(xié)調(diào)通知集群管理選舉分布式鎖和分布式隊(duì)列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最簡(jiǎn)單的 SpringCloud 教程 | 第九篇: 服務(wù)鏈路追蹤 (Spring Cloud Sleuth) 史上最簡(jiǎn)單的 S...
摘要:是為結(jié)果導(dǎo)向型人群開(kāi)設(shè)的深度學(xué)習(xí)在線課程。但是最關(guān)鍵的是,我想通過(guò)構(gòu)建簡(jiǎn)單的深度學(xué)習(xí)解決方案來(lái)實(shí)現(xiàn)理論和實(shí)踐的相結(jié)合。我的目標(biāo)是在一天結(jié)束前進(jìn)入排名的前。我的時(shí)間都用于學(xué)習(xí)庫(kù)組織數(shù)據(jù)和評(píng)估結(jié)果都是一些與深度學(xué)習(xí)無(wú)關(guān)的簡(jiǎn)單流程。 Fast.ai是Jeremy Howard為結(jié)果導(dǎo)向型人群開(kāi)設(shè)的深度學(xué)習(xí)在線課程。我讀過(guò)很多關(guān)于機(jī)器學(xué)習(xí)的書(shū),也參加過(guò)不少這方面的課程,但我認(rèn)為Fast.ai是迄今為...
閱讀 1028·2021-11-24 10:42
閱讀 3579·2021-11-19 11:34
閱讀 2729·2021-09-29 09:35
閱讀 2611·2021-09-09 09:33
閱讀 753·2021-07-26 23:38
閱讀 2591·2019-08-30 10:48
閱讀 1455·2019-08-28 18:07
閱讀 482·2019-08-26 13:44