iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
佛心分享-SideProject30

Mongory:打造跨語言、高效能的萬用查詢引擎系列 第 30

Day 29:總結與行動呼籲:開源協作與下一個里程碑

  • 分享至 

  • xImage
  •  

二十九天,從 Ruby 的 DSL 與觀測,到 C Core 的資料結構與匹配引擎,再到 Ruby bridge 的效能之戰,最後踏入 Go 的現實與抉擇。筆者把能踩的坑與常見權衡都記下,以下以精簡版回顧、可複用的最佳實踐與明確的下一步作收


回顧重點與最佳實踐

  • 抽象:
    • DSL/AST 一次定義,多語言共享,避免各語言分叉
    • matchers 拆分 base/composite/explainable/traversable,讓可觀測與優化有明確掛點
  • 記憶體與資料結構:
    • memory pool(chunk 倍增 + reset)讓 C 端像高階語言一樣操作
    • value wrapper + 函式指標 dispatch,泛型值仍保留類型語意與 to_string 能力
  • 可觀測性:
    • explain/trace 不是附加功能,而是設計中的第一公民
    • 「先看得到,再談優化」是此專案能持續推進的關鍵
  • Ruby bridge:
    • pool reset、key cache、shallow O(1) 取值串起來,性能持續靠攏純 Ruby
    • API 穩定、零拷貝與 GC 協同並重
  • Go bridge:
    • cgo 邊界固定成本主導,native Go 是長期方向
    • 保留 DSL/AST 與使用者介面,替換執行核心

Roadmap

mongory-go(native)

  • 目標:保留 DSL/AST 與 explain/trace,替換 matcher 執行核心為純 Go
  • 里程碑:
    • v0.x:$eq/$gt/$gte/$lt/$lte/$in/$nin/$and/$or、基本 explain/trace
    • v0.y:欄位 accessor 介面(降低反射)、$elemMatch/$every、regex/custom
    • v1.0:覆蓋度與性能達標,預設關閉 cgo 路徑(保留維運旗標)

mongory-js(C core)

  • 目標:以 WebAssembly 或 N-API 兩路線探索,優先針對 Node 端提供 C Core 能力
  • 里程碑:
    • v0.x:Node N-API bridge PoC,最小 matcher 與 explain
    • v0.y:WASM PoC(限定條件),瀏覽器端演示
    • v1.0:Node 實用化;WASM 視限制提供子集能力

mongory-py(C core)

  • 目標:以 CPython 擴充(C-API / CFFI)橋接 C Core,對齊 Ruby 版的能力
  • 里程碑:
    • v0.x:CFFI PoC + 最小 matcher
    • v0.y:CPython C-API 擴充、完整 explain/trace
    • v1.0:與 Ruby/C 版一致的 matcher 覆蓋與相容性

mongory-center(統一 JSON 測資與一致性驗證)

  • 目標:建立跨語言共享的條件與資料集(JSON/NDJSON),支援一致性測試與性能基準
  • 里程碑:
    • v0.x:核心資料集與基準程式、最小結果規範
    • v0.y:GitHub Actions matrix 自動驗證、報表
    • v1.0:穩定版本化與貢獻流程

下一個里程碑(30/60/90 天)

  • 30 天:
    • mongory-rb:發佈穩定平台 gem,補足文件
    • core/center:整理第一批一致性資料集與 trace 規範
  • 60 天:
    • mongory-go:native 原型可用(基本運算子 + explain)
  • 90 天:
    • center:完善跨語言一致性測資
    • js/py:PoC 路線與 CI 雛形

行動呼籲(你可以怎麼幫忙)

  • 提需求:用例、資料形狀、效能瓶頸,都是最珍貴的方向感
  • 補測試:一致性、邊界與錯誤路徑,越多越好
  • 寫文件:README/CHANGELOG/Examples,對新讀者最有幫助
  • 開 PR:
    • 小改動也歡迎(typo、註解、變數命名)
    • 大改動請先開 RFC issue 對齊設計

最後...

感謝每一位讀者、使用者、與在 issue/PR 上給建議的夥伴。Mongory 的意義,不只是「把 MongoDB 風格的 DSL 帶到記憶體內」,更是「在多語言世界維持一致的語意與體驗」。筆者會持續前進,也期待讀者一起把這件事做得更好

接著會用 Bonus 系列文章補完 30 days (預告:會超過 30 天 XD)
主要的主題會是這 Mongory 系列文章內有使用到但沒有細講的技術,將其導入讀者您的專案的教學
你想看到什麼技術的教學也歡迎留言唷!

Mongory-rb
Mongory-core
Mongory-go


上一篇
Day 28:為什麼 Go 需要 native 重寫:cgo overhead 與編譯器演進
系列文
Mongory:打造跨語言、高效能的萬用查詢引擎30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言