生產端:應用寫日志 → solidDB(內存緩存,高吞吐、解耦) → Java Load Tool 讀取推送 → WebSphere MQ(持久隊列、事務傳輸) → WebSphere Message Broker (WMB)(XML 解析、路由、映射、分離) → DB2 pureXML(原生 XML 存儲、索引、查詢)。全鏈路事務性保證零丟失。
| 組件 | 定位 | 關鍵能力 |
|---|---|---|
| solidDB 6.3 | 邊緣緩存 | 全內存、微秒延遲、持久事務日誌、ODBC/JDBC 接口 |
| WebSphere MQ 7.0 | 傳輸總線 | 持久隊列、事務、集群、路由 |
| WMB 6.1 + Toolkit | 智能處理層 | XMLNSC 解析、路由節點、映射節點、JavaCompute、DatabaseInsert |
| DB2 9.5 Express-C | 核心存儲 | pureXML 原生存儲、SQL/XML/XQuery、壓縮、分區 |
| 隊列 | 用途 | 消息格式 |
|---|---|---|
| AL_INQUEUE1 | 輸入隊列 1 | 單條 Record 元素 |
| AL_INQUEUE2 | 輸入隊列 2 | File 元素(含多 Record) |
| AL_OUTQUEUE | 路由後的 Record 匯總 | Record |
| AL_SUMMARYQUEUE | 摘要消息 | LogSummary |
| AL_XMLFILES | 入庫隊列 | Record(寫入 DB2) |
MQInput(AL_INQUEUE1) → ResetContentDescriptor(XMLNSC, logAppMessages) → Route(依 $Body/Record/Header/Id mod 2 分流 Odd/Even) → Map(Odd 支轉換為 LogSummary) → MQOutput(Odd→AL_SUMMARYQUEUE, Even→AL_OUTQUEUE)
MQInput(AL_INQUEUE2) → ResetContentDescriptor → Map (Split):
輸入 File,輸出兩類:
① 迭代 for $r in $Body/File/Record return $r 生成多條 Record
② 同步生成 LogSummary(聚合字段)
→ JavaCompute:檢查 ./Record 或 ./LogSummary 分流至 Out/Alternate 終端
→ MQOutput(Record→AL_XMLFILES, Summary→AL_SUMMARYQUEUE)
MQInput(AL_XMLFILES) → ResetContentDescriptor → DatabaseInsert(ODBC 連接 LOGAPPDB,映射 esql:asbitstream($source/Record) 整個 XML 片段寫入 DOC XML 列)
SELECT doc FROM LOGS,逐行 MQMessage.write(bytes) → queue.put()。注意 solidDB JDBC 不支持 XA,故應用層保譪冪等。LogFile.xsd、LogSummary.xsd,重命名 RecordType→Record 使根元素名匹配。esql:asbitstream() 序列化整個節點為位流寫入 XML 列。LOGAPPDB(IBM DB2 ODBC DRIVER),勾選 Save Password,WMB DatabaseInsert 節點引用該 DSN。SELECT XMLQUERY('$d/Record/Header/Time' PASSING doc AS "d") FROM LOGAPP.LOGS;
CREATE INDEX ... GENERATE KEY USING XMLPATTERN ...)加速查詢