資料庫選取之路
公司的一個專案需要搭建一套伺服器,伺服器部署Tomcat+資料庫一套環境。伺服器的功能不是很複雜,將獲取的請求下發到RabbitMQ(佇列,一個開源軟體),並將請求插入資料庫。有個監聽器持續監聽RabbitMQ,如果有返回值,就將其插入資料庫。在此過程中,會有執行緒呼叫伺服器的介面查詢資料庫,直到有結果返回。資料庫設計也很簡單,只需要一張表格。
一開始考慮到資料量不大,而且需要的表結構不復雜,所以一開始選用的是SQLite輕型資料庫。它是一個檔案型資料庫,資料都儲存的一個檔案裡面,操作簡單,效率高。開發測試通過之後,提供給內部使用者試用。但很快就發現問題了。使用者請求量大的時候會有資料丟失的現象。查詢了一些資料,預設狀態下,SQLite執行在自動提交模式下,在完成SQL語句的執行後,並沒有像標準的JDBC那樣直接把資料寫入到資料儲存檔案中。如果在insert操作進行的中途,有一個select操作到來,並且出現異常,就可能導致剛才insert的資料被丟失。本來是考慮在程式碼里加同步鎖來規避這個問題。但經過討論覺得這樣效率太低了,最後決定臨時更換資料庫。
專案在開發的時候,是將資料庫操作寫在一個工具類裡面的,所以只是修改工具類,其他的程式碼不用變動,所以很快就改好了。安裝MySQL,測試,果然併發問題解決了。但在試用了一段時間之後,出現問題了,資料庫連線預設在8小時後自動斷開連線,導致了請求運算元據庫時報錯。一開始,是在資料庫連線路徑加個autoReconnect=true,讓其自動連線,但並沒有生效。查詢了資料,應該是資料庫版本造成的。最後,只能在my.cnf裡將interactive_timeout和wait_timeout時間延長,這個問題才算解決了。在試用了一段時間之後,又出現了一個問題,是有關max_allowed_packet ,由於請求返回值過大,MySQL根據配置檔案會限制server接受的資料包大小。大的插入和更新會被max_allowed_packet 引數限制掉,導致失敗。這個錯誤,一開始以為很容易解決,就在my.cnf裡將max_allowed_packet配置大一點,但是試了以後發現還是報錯了。這下就懵了,啥情況,配置的max_allowed_packet沒有生效,還是報錯。找了好久資料,終於在網上一個旮旯的角落找到了一個和我出現同樣的問題的帖子。最後他是將表的儲存引擎修改為MyISAM,我試了一下確實是解決了,但是原因,帖子最後還是沒有人給出個滿意的回答來。
伺服器的資料庫選擇真是一波三折,前前後後花了我近2個月的時間才將這個伺服器搞穩定。
相關文章
- 金山雲資料庫之路資料庫
- java從資料庫讀取選單,遞迴生成選單樹Java資料庫遞迴
- 小景的Dba之路--壓力測試和Oracle資料庫快取Oracle資料庫快取
- 騰訊雲資料庫的向上之路資料庫
- 利用反射讀取資料庫資料反射資料庫
- sqlserver讀取oracle資料庫資料SQLServerOracle資料庫
- memcached資料庫快取資料庫快取
- 鵝廠資料庫的進階之路資料庫
- 架構之路(五):忘記資料庫架構資料庫
- eazyexcel 讀取excel資料插入資料庫Excel資料庫
- 資料量與資料庫選型資料庫
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- 阿里資料庫的極致彈性之路阿里資料庫
- 金融業資料庫自主創新之路資料庫
- 故事篇:資料庫架構演變之路資料庫架構
- FastAPI 學習之路(三十二)建立資料庫ASTAPI資料庫
- SQL Azure方便開發者踏上雲資料庫之路SQL資料庫
- PostgreSQL:資料庫的選擇SQL資料庫
- 資料庫索引選擇策略資料庫索引
- java連線Oracle資料庫獲取資料JavaOracle資料庫
- 【資料庫資料恢復】SqlServer資料庫無法讀取的資料恢復案例資料庫資料恢復SQLServer
- 快速搭建Redis快取資料庫Redis快取資料庫
- 各資料庫取前x行資料庫
- jdbc獲取資料庫連線JDBC資料庫
- 阿里分散式資料庫未來技術之路阿里分散式資料庫
- 分散式資料庫的架構演變之路分散式資料庫架構
- 12月7日雲棲精選夜讀|阿里資料庫的極致彈性之路阿里資料庫
- python爬取股票資料並存到資料庫Python資料庫
- ajax讀取資料庫資料程式碼例項資料庫
- 資料庫選型的依據資料庫
- 使用Redis和Java進行資料庫快取 - DZone資料庫RedisJava資料庫快取
- C#取資料庫名稱與資料庫中表名的方法C#資料庫
- 萬里GreatDB資料庫的學習之路--GreatDB資料庫的管理和使用(2)資料庫
- Kettle 從資料庫讀取資料存到變數中資料庫變數
- 京東資料庫智慧運維平臺建設之路資料庫運維
- 資料庫重構之路,以 OrientDB 到 NebulaGraph 為例資料庫
- 對話蔣傑、丁奇,騰訊雲資料庫之路資料庫
- Python操作Redis快取資料庫PythonRedis快取資料庫