Class MemRS

java.lang.Object
server.quest.MemRS

public final class MemRS extends Object
極簡「記憶體列游標」(In-Memory Result cursor)。

目的:消除 MapleQuest.initQuests() 的 N+1 查詢。原本每一筆任務都要再對 wz_questreqdata / wz_questactdata / wz_questpartydata 各跑一次 WHERE questid=?,每個動作再對 wz_questact{item,skill,quest}data 各跑一次 WHERE uniqueid=?,共約 2 萬多次序列化查詢(實測佔開服時間約 54 秒)。

改法:每個子表只整批 SELECT * 一次,在記憶體用 groupBy(Connection, String, String) 依鍵分組; 之後以本類別重播某一鍵的資料列。本類別只實作既有解析邏輯用到的 next()/getInt(String)/getString(String)/close(),因此 MapleQuest.loadQuest(ResultSet, MemRS.Grouped, MemRS.Grouped, MemRS.Grouped, MemRS.Grouped, MemRS.Grouped, MemRS.Grouped)MapleQuestActionMapleQuestRequirement 的逐欄解析程式碼幾乎原封不動,只是把資料來源從「DB 查詢」換成「記憶體查表」。 語意比照 JDBC:getInt 遇 SQL NULL 回傳 0;getString 遇 NULL 回傳 null。