前腳剛往資料庫插入資料,後腳就查不出來?
前腳剛往資料庫插入資料,後腳就查不出來?
線上出現了一個Bug,前腳剛插入的資料,後腳就查不出來。導致了請求的失敗, 資料庫還可不可信了?
先看看程式碼流程
這是一個很簡單的流程,就是插入了一條資料,然後緊接著select。
insert test (id) values (1);
select test where id=1; => 查出來為空
前腳剛插入,而且採用的是自動提交模式,那麼insert這條就自動提交了。那為何緊接著查不出來呢?這個是在同一個執行緒之內啊,不存在時序混亂的問題。這時候,我們就得看看我們的環境了
部署模式
我們先看一看我們的應用部署模式吧。
我們的應用是通過APP是通過DBProxy去查詢資料庫的。DBProxy可以有效的管理連線,以及一系列的分析/審計/許可權功能,相當好用。
在它們提供的功能裡面,有一項功能引起了我的注意,就是透明主從功能。這個功能的描述為:
推理
按照啟用了這個功能後,我們的sql執行模式應該是這樣insert到主庫而select到從庫。
這時候只要主從稍微有些延遲,那麼select去從庫就找不到資料從而引起問題了!
解決方案
首先,我們讓DBProxy先下掉這個功能,至於主從負載分離,我們採用了另一個方案。
雖然需要修改程式碼,但比起線上出問題好多了。
最後
感謝大家看到這裡,文章有不足,歡迎大家指出;如果你覺得寫得不錯,那就給我一個贊吧。
也歡迎大家關注我的公眾號:程式設計師麥冬,麥冬每天都會分享java相關技術文章或行業資訊,歡迎大家關注和轉發文章!
相關文章
- 關於PHP往mysql資料庫中批次插入資料例項教程PHPMySql資料庫
- YII2 一次性往資料庫插入多行資料資料庫
- 資料庫查不出資料:傳參不要加引號資料庫
- Python實現http介面請求資料後,往RabbitMQ裡面插入資料PythonHTTPMQ
- mongodb資料庫中插入資料MongoDB資料庫
- python 建立mysql資料庫腳(執行sql)指令碼程式碼PythonMySql資料庫指令碼
- python如何將資料插入資料庫Python資料庫
- eazyexcel 讀取excel資料插入資料庫Excel資料庫
- python資料插入連線MySQL資料庫PythonMySql資料庫
- 鳳姣一記後腳轉身踢中,譚雪琴見機用前腳.
- 如何精簡企業主資料“裹腳布”
- 前後端分離開發腳手架後端
- mybatis插入資料、批量插入資料MyBatis
- SAP HANA Cloud 學習教程之二: 如何往SAP BTP 上 HANA Cloud 資料庫表裡插入資料Cloud資料庫
- 分庫分表插入資料
- MapReduce之----往hbase資料庫寫入資料時, 出現資料異常資料庫
- 90後資料庫大咖,如何看雲資料庫的未來?資料庫
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- MySQL 資料庫表格建立、資料插入及獲取插入的 ID:Python 教程MySql資料庫Python
- Vue CLI 3.0腳手架如何在本地配置mock資料VueMock
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 向PostgreSQL資料庫插入Date型別資料包錯SQL資料庫型別
- laravel實現100w大量資料插入資料庫Laravel資料庫
- Mysql在資料插入後立即獲取插入的IdMySql
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- .NET 百萬級 大資料插入、更新 ,支援多種資料庫大資料資料庫
- 通過append hint來插入資料,演示它和普通插入資料的效能比較。APP
- Laravel前後臺共享資料Laravel
- oracle-資料庫- insert 插入語句Oracle資料庫
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- 向資料庫中插入一條新的資料,並返回新增資料的ID資料庫
- Python 利用pymysql和openpyxl操作MySQL資料庫並插入Excel資料PythonMySql資料庫Excel
- ABAP資料庫表的後設資料資料庫
- 前後端資料的互動--如何確保前後端資料的安全性?後端
- mysql資料表插入資料後,獲取自增欄位值的方法MySql
- Pytorch資料前後處理整理PyTorch
- 前後端分離——資料mock後端Mock
- ORACLE資料庫中如何插入生僻字Oracle資料庫