2.2.3|修資料庫相關的 Bug 、讓存檔更穩定、更快速
- 重要 Bug 修正
- 修正 SQLite 存檔會「存錯指令」的問題
- 之前在 SQLite 模式下,遇到一個還沒存進資料庫的新區塊時,
- 會丟出一個「刪除」指令(DELETE),導致資料根本沒被正確寫進去。現在已經改成正確的「新增」(INSERT)。
- 修正 SQLite 寫入參數位置全錯的問題
- 原本程式碼使用
setInt(0, ...)來填寫資料,但資料庫的欄位編號其實是從 1 開始算的, - 所以這些寫入根本對不上、會直接出錯。這次把欄位順序跟編號全部修正回來了。
- 原本程式碼使用
- 修正 MySQL 讀取資料時會「吃掉第一筆」的問題
- 之前讀取區塊清單時有一段多餘的判斷,會不小心把查詢結果的第一筆資料跳過去,
- 造成資料漏讀。現在已經移除這段邏輯。
- 修正 SQLite 存檔會「存錯指令」的問題
- 效能與穩定性改善
- 資料庫寫入改用「批次處理」,速度大幅提升
- 以前是一筆一筆送進資料庫(一次一個指令),現在改成打包成一整批一次送出(batch),
- 存檔時對資料庫的壓力更小、速度更快。
- 新增「寫入失敗自動重試」機制
- 以前存檔如果中途失敗,那些還沒寫進去的資料就直接消失了。
- 現在如果這批沒存成功,會自動把它們放回佇列,下次再試一次,資料不會憑空不見。
- INSERT 改用 Upsert(有就更新、沒有就新增)
- MySQL 用
ON DUPLICATE KEY UPDATE、SQLite 用ON CONFLICT DO UPDATE, - 避免遇到重複的區塊時跳出「主鍵重複」的錯誤。
- MySQL 用
- 多執行緒安全性強化
- 把任務佇列(Queue)跟資料庫快取(cache)換成執行緒安全的版本(
ConcurrentLinkedQueue與ConcurrentHashMap), - 降低在多執行緒環境下資料錯亂或當機的風險。
- 把任務佇列(Queue)跟資料庫快取(cache)換成執行緒安全的版本(
- 清掉 MySQL 一段沒在用的多餘連線
set()方法裡原本會開一條資料庫連線但其實根本沒用到,這次移除,減少不必要的連線開銷。
- 資料庫寫入改用「批次處理」,速度大幅提升
- 預設設定調整
- 存檔頻率調快
data-save-time-tick的預設值從3600改成1200(也就是從每 180 秒存一次,變成每 60 秒存一次),- 降低伺服器意外關閉時的資料遺失量。
- -# 已經有自己的設定檔的使用者不受影響,如果想跟進可以自行修改。
sql-processing-count支援「不限制」- 現在如果把這個值設成 0(或負數),代表一次把佇列裡所有指令全部處理完,不再卡上限。
-# https://github.com/BrilliantTeam/NatureRevive-brilliant/releases/tag/2.2.3
- 現在如果把這個值設成 0(或負數),代表一次把佇列裡所有指令全部處理完,不再卡上限。
- 存檔頻率調快
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar