Mongory, let you query everywhere!
這是一個從 Ruby JSON 過濾器開始,逐步演進為跨語言支援、擁有 C 核心的通用查詢引擎的 side project。
在這 30 天內,我會完整分享 Mongory 的開發過程:從 AST 設計、matcher 實作、效能瓶頸,到 C 擴充、multi-platform gem 打包,以及 Go/Python/JS 的橋接規劃。
喜歡從「解決痛點」出發、一路打怪成長的你,不妨一起來看這趟技術旅程。
這一篇是整個效能的關鍵取捨點,筆者接著會把 Day 18 的震撼與 Day 19 的兩個關鍵修復接起來,補上最後一塊:把原本「看似已經很省」的淺層轉換從 O(n...
這會是 Mongory 能夠被大多數讀者輕鬆用起來的轉折點:預編譯。筆者在公司的 pod 實際安裝時,從「本機沒 toolchain 裝不起來」的挫折出發,走過...
Ruby 這一季的橋接已經證明可行:讀者能用 Mongory 的 DSL 操作任意 Ruby 結構,性能也在一連串優化後到位。接下來,筆者把目光放到 Go。這不...
Go 端的第一個現實問題,並不是 API 長什麼樣,而是「讀者 go get 下來能不能直接編、可不可用」。筆者在設計 Mongory 的 Go Bridge...
在 Go 版的 Mongory,最棘手的不是 matcher 邏輯,而是「資料如何過橋」。筆者最終採用 shallow/deep/recover 的分工,盡量把...
Go 與 C 溝通時,指標與生命週期是第一原則。這篇以 Mongory 的 Go Bridge 為例,整理出在實作中踩過、避過的雷,並給出可直接對照的實作片段...
在 Go 版的 Mongory,C 的記憶體池(memory pool)與 Go 的 GC 必須協同工作:既要確保不洩漏,也要避免過早釋放。本篇整理生命週期設計...
在 Ruby 版的震盪之後,Go 版也迎來一次「下巴掉下來」的時刻: 純 Go:≈ 2ms(十萬筆簡單條件) cgo 版 Mongory:≈ 90ms(同條件...
Day 27 的數字已經說服筆者:在 Go 的世界,跨界成本是壓倒性的常數項。這篇把「為什麼要 native 重寫」講清楚,回到編譯器與執行模型的基礎,並提出實...