Skip to content

2.2.3|修資料庫相關的 Bug 、讓存檔更穩定、更快速

Choose a tag to compare

@RICE0707 RICE0707 released this 13 Jun 09:57
· 12 commits to main since this release
  1. 重要 Bug 修正
    1. 修正 SQLite 存檔會「存錯指令」的問題
      • 之前在 SQLite 模式下,遇到一個還沒存進資料庫的新區塊時,
      • 會丟出一個「刪除」指令(DELETE),導致資料根本沒被正確寫進去。現在已經改成正確的「新增」(INSERT)。
    2. 修正 SQLite 寫入參數位置全錯的問題
      • 原本程式碼使用setInt(0, ...)來填寫資料,但資料庫的欄位編號其實是從 1 開始算的,
      • 所以這些寫入根本對不上、會直接出錯。這次把欄位順序跟編號全部修正回來了。
    3. 修正 MySQL 讀取資料時會「吃掉第一筆」的問題
      • 之前讀取區塊清單時有一段多餘的判斷,會不小心把查詢結果的第一筆資料跳過去,
      • 造成資料漏讀。現在已經移除這段邏輯。
  2. 效能與穩定性改善
    1. 資料庫寫入改用「批次處理」,速度大幅提升
      • 以前是一筆一筆送進資料庫(一次一個指令),現在改成打包成一整批一次送出(batch),
      • 存檔時對資料庫的壓力更小、速度更快。
    2. 新增「寫入失敗自動重試」機制
      • 以前存檔如果中途失敗,那些還沒寫進去的資料就直接消失了。
      • 現在如果這批沒存成功,會自動把它們放回佇列,下次再試一次,資料不會憑空不見。
    3. INSERT 改用 Upsert(有就更新、沒有就新增)
      • MySQL 用ON DUPLICATE KEY UPDATE、SQLite 用ON CONFLICT DO UPDATE
      • 避免遇到重複的區塊時跳出「主鍵重複」的錯誤。
    4. 多執行緒安全性強化
      • 把任務佇列(Queue)跟資料庫快取(cache)換成執行緒安全的版本(ConcurrentLinkedQueueConcurrentHashMap),
      • 降低在多執行緒環境下資料錯亂或當機的風險。
    5. 清掉 MySQL 一段沒在用的多餘連線
      • set()方法裡原本會開一條資料庫連線但其實根本沒用到,這次移除,減少不必要的連線開銷。
  3. 預設設定調整
    1. 存檔頻率調快
      • data-save-time-tick的預設值從3600改成1200(也就是從每 180 秒存一次,變成每 60 秒存一次),
      • 降低伺服器意外關閉時的資料遺失量。
      • -# 已經有自己的設定檔的使用者不受影響,如果想跟進可以自行修改。
    2. sql-processing-count支援「不限制」

⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。

⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。

⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動

-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar