雲端資料庫供應商Supabase協同開發工具開發商Snaplet,合作開發Postgres WASM開源專案,這是一個能夠在瀏覽器運作PostgreSQL伺服器的WebAssembly專案,該專案提供一套完整的功能,包括持久狀態、從pg_dump恢復,以及從遠端資料庫進行邏輯複製等功能。

Postgres WASM以WebAssembly運作Postgres的想法並非原創,而是最先由Postgres服務供應商Crunchydata提出,不過Crunchydata的這個專案並非開源,因此Supabase和Snaplet便共同開發了一個開源版本。

Postgres WASM會在瀏覽器中啟動一個虛擬機器,來執行PostgreSQL伺服器執行個體,開發團隊使用v86模擬器在瀏覽器模擬執行x86作業系統,而v86運用x86虛擬化技術,即時將x86機器碼轉譯為wasm。目前Postgres WASM還在初期階段,其運作Postgres 14.5提供psql和pg_dump等工具,開發者可以利用Postgres WASM從檔案恢復狀態,或是從IndexedDB等其他瀏覽器,儲存和恢復Postgres狀態,其他功能還有上傳CSV檔案到模擬器,或是從模擬器下載檔案等。

官方提到,在瀏覽器以WASM執行Postgres的潛力很大,可以應用的情境很廣,像是可用於教材文件,或是類似sql.js、absurd-sql等瀏覽器離線快取,用戶也可以將其應用在離線資料分析,或是在瀏覽器直接測試PostgresSQL函式、資料建模和邏輯複製等操作。

Postgres WASM也能被用於開發環境,從生產環境擷取資料,或是將資料、函式推送到生產環境,使用者甚至可以使用範例資料創建測試資料庫後,再透過拍攝快照發送給其他開發者。

目前Postgres WASM儲存庫分為三個部分,分別是虛擬機器、網頁應用程式和網路代理。開發團隊以Buildroot創建了一個可嵌入的虛擬機器,並在虛擬機器中內建安裝Postgres的精簡版Linux。

Postgres WASM則是透過WebAssembly在瀏覽器執行虛擬機器的部分,而為了要讓PgAdmin連接到Postgres,因此專案中加入網路代理,開發團隊解釋,由於瀏覽器阻止虛擬機器存取TCP網路,因此必須透過websocket來代理流量,Postgres WASM執行Websockproxy,允許模擬器將websocket埠口發送的資料轉換成TCP封包,並使其與網際網路通訊。

現在的Postgres WASM並非一個純WebAssembly實作,開發團隊嘗試要從原始碼直接利用WebAssembly編譯Postgres,但是過程比預期複雜許多,因此折衷做法便是在瀏覽器中虛擬化一臺機器,透過v86在瀏覽器中模擬和x86相容的CPU與硬體。

現階段Postgres WASM容量約為30 mb,對於一般需要在瀏覽器執行Postgres的用例來說並不夠好,Supabase和Snaplet正尋求更多的開發者貢獻開源專案。

熱門新聞

Advertisement