最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決

 更新時間:2022年09月15日 10:50:12   作者:南城FE???????  
這篇文章主要介紹了Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

背景

事情是這樣的,在公司內(nèi)部新開發(fā)了一個功能還沒有上線,目前部署在測試環(huán)境,Node服務(wù)會開啟一個定時任務(wù),每5分鐘會處理好一部分?jǐn)?shù)據(jù)寫入到mysql數(shù)據(jù)庫中。

在這之前,一切都運(yùn)行正常,中秋節(jié)后上班第一天打開后臺系統(tǒng)發(fā)現(xiàn)沒有數(shù)據(jù)展示了,然后查詢數(shù)據(jù)庫發(fā)現(xiàn)歷史存儲的數(shù)據(jù)都沒了,沒了?,F(xiàn)在只會存儲最新的定時任務(wù)執(zhí)行后的數(shù)據(jù)。可在此之間沒有修改過任何代碼,這個就神奇了。

頭疼時間

查看寫入的數(shù)據(jù)始終都只會存儲最新的數(shù)據(jù),則檢查是否沒有觸發(fā)更新的邏輯,全部都命中新增的邏輯。

const isExist = await this.Model.findOne({
  where: {
    projectId
  }
});
if (isExist) {
  await isExist.destroy()
  updateList.push(item)
} else {
  createList.push(item)
}

現(xiàn)在的邏輯是將新增和更新分開處理,經(jīng)檢查發(fā)現(xiàn)所有的isExist都是null,導(dǎo)致全部命中新增的邏輯??墒菙?shù)據(jù)庫中明明是有數(shù)據(jù)的,為什么查詢不出來呢?懷疑是有第三方數(shù)據(jù)存在臟數(shù)據(jù)之類的情況,所以我將數(shù)據(jù)庫現(xiàn)存數(shù)據(jù)全部清空,重新寫入查看效果。結(jié)果第一次寫入是正常的,后續(xù)還是不會觸發(fā)更新,經(jīng)過查詢發(fā)現(xiàn)每次寫入數(shù)據(jù)庫大約十幾秒數(shù)據(jù)就被清空了。

可是在寫入后的代碼邏輯中是沒有執(zhí)行刪除數(shù)據(jù)的處理,而且每次都是穩(wěn)定復(fù)現(xiàn),寫入后就被刪除了,查詢無果無奈找到db幫找原因。db查詢?nèi)罩窘o出的結(jié)論就是有定時執(zhí)行刪除的邏輯。

看到日志只能繼續(xù)在代碼中找原因了。由于此時是使用的 sequelize 的 bulkCreate 批量創(chuàng)建數(shù)據(jù),所以開始懷疑是不是這個批量處理的過程中出現(xiàn)了問題,當(dāng)初是因?yàn)槊看螆?zhí)行的數(shù)據(jù)量太多所以沒有選擇單條執(zhí)行,這個時候?yàn)榱伺挪閱栴},所以我改成了單條數(shù)據(jù) create 方式創(chuàng)建數(shù)據(jù)。

this.Model.bulkCreate(list)

修改為:

for (const item of list) {
  this.Model.create(item)
}

結(jié)果不出意外的還是定時被刪除了,?? 然后開始懷疑是事務(wù)沒有提交的問題,雖然此邏輯是完全不需要用到事務(wù)操作,但還是抱著懷疑的心態(tài)試試看。

let transaction;
try {
  // 建立事務(wù)對象
  transaction = await this.ctx.model.transaction();
  for (const item of list) {
    // 事務(wù)增操作
    await this.Model.create(item, {
        transaction,
    });
    // 提交事務(wù)
    await transaction.commit();
  }
} catch (err) {
    // 事務(wù)回滾
    await transaction.rollback();
}

結(jié)果不出意外的還是定時被刪除了,??????此時已經(jīng)沒有改動的余地了,此時的天都已經(jīng)黑了,可是問題還沒解決,只能繼續(xù)面向百度編程了,此時搜索到也有同一個人遇到這樣的問題,他的解決方案是修改表名稱,這時候也只能死馬當(dāng)作活馬醫(yī)了。

結(jié)果出意外的恢復(fù)正常寫入以及更新了。

為什么更改了表名稱后就正常呢,思來想去也想不出為什么。結(jié)果今天在重新部署服務(wù)的時候看了一眼歷史部署記錄,發(fā)現(xiàn)了端倪。就在假期的最后一天晚上有一個部署記錄,然后我回看了和最開始發(fā)生數(shù)據(jù)異常的時間段相差無幾?;揪涂梢詳喽ê痛舜尾渴鹩泻艽蟮年P(guān)系,由于公司內(nèi)部的部署方案有docker和虛擬機(jī)兩種方式,導(dǎo)致每個時間段都會有兩個定時任務(wù)同時執(zhí)行,由于數(shù)據(jù)處理的過程中需要查詢第三方數(shù)據(jù),最后兩邊寫入的時間會存在一定的延時,導(dǎo)致寫好的數(shù)據(jù)被另一邊執(zhí)行了刪除的邏輯,由于那臺服務(wù)器一直未更新修改的代碼,一直執(zhí)行的是最開始那份先刪除再更新的邏輯。至于為啥執(zhí)行了刪除但是沒有更新,猜想是刪除后更新的邏輯出錯了。這也是為什么修改了表名稱后就正常了,因?yàn)槟桥_服務(wù)器上面還是舊的代碼,新增刪除不能讀到之前的那張表了,問題到此終于是告一段落了。

總結(jié)

到此是否感覺看了一個大烏龍事件,最終的原因和代碼沒有任何關(guān)系,但是卻三番五次的改動無果。在排查過程中還有很多沒有寫的,比如懷疑重復(fù)數(shù)據(jù)導(dǎo)致所以增加唯一索引,懷疑自增ID多大重新清零,但是這個改動的過程中也學(xué)到了不少新的知識,如何使用事務(wù),新增唯一索引,修改表名稱,重置自增ID等很多服務(wù)端相關(guān)的知識。最后的總結(jié)是遇到問題先不要質(zhì)疑代碼,從系統(tǒng)層面,運(yùn)行版本,環(huán)境變量,運(yùn)維等方面也要有一定的思考

到此這篇關(guān)于Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決的文章就介紹到這了,更多相關(guān)Mysql數(shù)據(jù)自動刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

阿巴嘎旗| 耒阳市| 石泉县| 连南| 新民市| 长宁县| 响水县| 东海县| 千阳县| 睢宁县| 慈溪市| 曲麻莱县| 师宗县| 桃源县| 鲜城| 兰州市| 家居| 昔阳县| 庐江县| 保定市| 永胜县| 海口市| 聂拉木县| 阿合奇县| 剑河县| 织金县| 呈贡县| 荔波县| 卓资县| 左贡县| 凉城县| 绥宁县| 洛川县| 静乐县| 平邑县| 裕民县| 黄平县| 淮阳县| 大连市| 伊通| 泸水县|