RX 是一種嵌入式資料儲存,專為 JSON 形狀的資料設計。編碼一次,然後直接查詢編碼後的資料 — 無需解析,無物件圖,無垃圾回收壓力。將其視為無 SQL 的 SQLite:非結構化資料,具備資料庫風格的隨機存取。
當編碼為 RX 時,指標會自動去重複:^z 重用「apple」,^h 重用共享的鍵佈局。編碼後的格式可直接查詢 — 無需解析步驟,直接從緩衝區讀取。
在實際的 92 MB 部署清單和 35,000 個路由鍵上進行基準測試:
RX 填補了一個特定的空白:您的資料對於 JSON 的完全解析模型來說太大,但對於 SQLite 或 Protobuf 來說又過於非結構化。
傳回的值是唯讀的 Proxy。它支援屬性存取、Object.keys()、Object.entries()、for...of、for...in、Array.isArray()、.map()、.filter()、.find()、.reduce()、展開、解構和 JSON.stringify()。現有的讀取路徑通常無需變更即可正常運作。
對於效能關鍵的路徑,請跳過字串轉換:
stringify / parse 處理字串。encode / open 處理 Uint8Array。相同的選項,相同的 Proxy 行為。
上述快速入門範例很小 — 對於它,JSON 就足夠了。RX 在大型資料和稀疏讀取時才能顯現其優勢。這是一個網站清單(請參閱 samples/ 以取得完整檔案):
將此規模擴大到 35,000 個路由,每次查找的差異為 69 毫秒對 0.003 毫秒。
samples/ 目錄包含四個展示不同存取模式的資料集 — 路由清單、RPG 遊戲狀態、表情符號元資料和感測器遙測。如果您正在評估格式,請從 site-manifest 和 quest-log 開始。
如果編碼器使用了外部引用,請將相同的字典傳遞給解碼器:
輸出格式預設為 tree,當 stdout 是終端機時;當管道或重新導向時為 json。使用 -f tree|json|rx|rxb 覆寫,或設定 RX_FORMAT。
提示:為快速分頁、著色檢視新增一個 shell 函數:
進階(rx help --all):rx inspect、rx stats、rx demo、rx completions。
RX 是一種文字編碼 — 不像 JSON 那樣人類可讀,但可以安全地複製貼上、嵌入字串,並透過那些對二進位檔案感到困擾的工具進行傳輸。
每個值都是從右到左讀取的。解析器向左掃描 base64 位數以尋找標記字元,然後使用該標記來解釋更左邊的任何位元組:
鐵路圖即將推出 — 請參閱格式規格以取得所有圖表。
標記:+ 整數 · * 小數 · , 字串 · ' 引用/字面值 · : 物件 · ; 陣列 · ^ 指標 · . 鏈 · # 索引
編碼器會自動去重複值、共享物件結構描述、壓縮共享字串前綴,並新增排序索引。請參閱格式規格以取得完整的語法、鐵路圖,以及如何逐位元組編碼完整物件的說明。
inspect() 返回一個惰性 AST,它與位元組編碼一一對應 — 指標保持為指標,鏈為鏈,索引為索引:
每個節點暴露:tag、b64、left、right、size、data 和 value(惰性)。具有子節點的節點(:、;、.、*、#)是可迭代的,並支援索引存取。子節點是惰性解析並快取的。
若要進行零配置的遍歷而不使用 Proxy 層,請參閱 docs/cursor-api.md。
RXB 是一種二進位格式的同類產品 — 與文字格式具有相同的資料模型和從右到左的設計,但採用 varint-tag 編碼以獲得更小的輸出和更快的解析。當您不需要可複製貼上的文字屬性時,請使用它。
parse / open 返回的完整讀取器和游標 API 鏡像文字端,並帶有 rxb 前綴:rxbMakeCursor、rxbRead、rxbFindKey、rxbHandle 等。請參閱 docs/rxb-format.md 以取得線路格式。
parse / open 返回的值是唯讀的:
逃生艙到底層緩衝區:
RX 編碼器、解碼器和 CLI 資料工具