讓數據庫運行在瀏覽器裏,刪庫再也不用跑路了

作爲一名數據庫技術人員,一直以來都有個夢想,希望有一個數據庫能夠彈性擴展(分佈式)到成百上千節點的規模,易於學習和理解,可以運行在私有云,公有云,multi-cloud, kubernetes, 也能夠跑在嵌入式設備(比如樹莓派)上,更酷的是也能夠直接運行在瀏覽器裏,且不需要任何瀏覽器擴展(Extension),變成口袋數據庫,就像那部電影《蟻人》。

今天,這一切都變成了現實: TiDB 可以直接運行在瀏覽器本地。打開瀏覽器,你可以直接創建數據庫,對數據進行增刪改查,關掉瀏覽器,一切都消失了。乾淨綠色環保。

由於 TiDB 基本兼容 MySQL 協議和語法,因此可以用熟悉的 MySQL 風格,在筆記本瀏覽器(我用的是 MacOS 上面的 Chrome,不確定其它瀏覽器是否正常)打開 play.pingcap.com,可能需要幾秒來加載頁面,然後就能看到熟悉的 Shell 了。 現在來試試幾個 SQL 語句吧!

是不是很酷?無痛體驗 SQL 的時代到了。更酷的是,這一切都運行在瀏覽器本地,刪庫再也不用跑路了。

有了這些,那麼是時候給在線學習 SQL 教程的網站加點功能吧,比如看教程的同步運行 SQL 語句,這裏有個簡單的演示

在瀏覽器裏面運行還有哪些好處呢?還記得你安裝配置數據庫的痛苦嗎?從此以後,每個人隨時隨地都可以擁有一個數據庫,再沒有痛苦的安裝過程,再也不用痛苦的配置參數,隨時享受寫 SQL 的快感。也許我們不再需要 indexdb了,SQL 是更高級的API,TiDB 使得「一次編寫、到處運行」成了現實。

你一定很好奇這一切是怎麼實現的

這個項目的起源是參加 TiDB Hackathon 2019 比賽 Ti-cool 團隊的項目 TiDB-Wasm,是他們的努力讓這一切變成了現實;

同時,Go 語言支持了 Wasm ,是近期最讓人興奮的特性之一,至此,在瀏覽器裏運行 Go 語言編寫的應用程序成爲了現實;

此外,PingCAP 與社區共同努力實現了開源的分佈式數據庫 TiDB,這讓我們可以把 TiDB 編譯成 Wasm,在瀏覽器裏直接運行生成的 Wasm 文件。

至此,在瀏覽器裏運行一個數據庫成爲了現實, 如果沒有記錯,TiDB 好像是 Go 語言編寫的第一個可以在瀏覽器裏面運行的 SQL 數據庫。

TiDB + WebAssembly 爲何如此讓人興奮?

WASM ,全稱:WebAssembly ,是一個可移植、體積小、加載快並且兼容 Web 的全新格式。

  • Wasm 本身是一個很有野心和想象力的技術,極大的擴展了前端的能力,TiDB-Wasm 將數據庫這樣硬核的基礎架構和炫酷的前端領域搭上關係,更進一步讓用戶在離線環境下就能直接體驗。

  • 這種用法是大大降低用戶體驗 TiDB 的成本,只需要一個瀏覽器頁面和等待下載 Binary 的時間,完全不需要安裝部署,就可以體驗 TiDB 基本的功能,無論是嵌入到文檔中快速運行實例還是作爲 Playgroud 網站讓用戶自由發揮,都非常合適。

  • 從實用角度上來看,除了能成爲一個瀏覽器中的 REPL 供配合文檔快速體驗和實驗之外,TiDB-Wasm 甚至未來還可以作爲 js 的 localStorage API 的很好的補充,爲 js 生態提供一個 SQLite 之外的高性能本地數據庫。

誕生於 TiDB Hackathon 2019 的項目,它的出現讓現場評委老師無比激動興奮,都對它的快速落地充滿了期待。

“TiDB-Wasm 極大降低了用戶體驗 TiDB 能力和初步驗證 SQL 兼容性的門檻,使用體驗就像 golang playground 一樣流暢,Wasm 的出現也爲 TiDB 文檔中心的建設提出了新的思路,也許不久的將來,TiDB 用戶可以像 golang 一樣,在閱讀文檔的同時,就能夠在頁面上嘗試實際操作的體驗。我們也期待 Wasm 能夠持續發展,實現 TiKV 的沙箱化運行,提供更貼近真實運行場景的 playground,甚至在自動化運維管理方向上貢獻更新奇思路。”

——李凱(美團 | 數據庫團隊負責人)

“剛看到這個項目的時候真的眼前一亮,這是一個非常酷的創意,而且真的對 DBA 運維管理 TiDB 有非常大的幫助,個人強烈希望這個項目能儘快落地支持!

目前我們公司使用 TiDB 時,有很大一部分是由現在業務改造接入,但是面臨的一個很重要的問題是 應用原來都是基於 MySQL 開發,雖然 TiDB 在 SQL 語法兼容上做了很多的工作,但是仍然未能 100% 覆蓋,所以業務切換前我們都必須要進行 SQL 語法兼容性測試及數據準確性校驗。由於 TiDB 的部署都是在線上服務器,基於數據安全,我們的生產和辦公網環境是隔離的,要實現上面的需求,目前我們有如下幾種方式:a) 研發同學自己寫腳本連接查看;b)DBA 登錄集羣協助驗證;c)開發專用查詢平臺支持。目前這這幾種方式都不夠安全且效率低下。隨着我們維護的 TiDB 集羣越來越多,DBA 的對這種低效工作不堪其煩,急需相關工具支持,而 TiDB-Wasm 無疑會解決這種問題,所以希望官方能夠重視這個項目,並儘快落地實現。”

——於伯偉(58集團 | 數據庫高級經理)

“Wasm 是一個神奇的技術,也許誕生初期的目的只是爲了解決 js 運行速度以及其他語言如何操作 html 的問題,但現在大家在用這種技術廣泛嘗試各種可能。TiDB-Wasm 就是一個很好的嘗試,不僅大幅度降低了新人使用 TiDB 的難度、也給文檔展示提供了神奇的操作環境、還能大幅度降低應用開發者本機調試環境的構建難度。相信這個思路能給其他服務端的軟件一個很好的啓發。”

——李道兵(京東雲 | 高級總監)

“很多用戶希望初步瞭解 TiDB 但是苦於找不到簡單即用的線下環境,這導致他們還未入門就已經放棄。TiDB-Wasm 有望徹底解決這個問題。基於 TiDB-Wasm,用戶可以方便的開啓 session 來探索 TiDB 的特性和功能,調試 TiDB 的行爲,以及對比 TiDB 與 MySQL 等數據庫在 SQL 語法、加鎖行爲、事務隔離等級等細節上的差異,從而幫助用戶更深入的理解 TiDB。對官方而言,甚至可以把路由、計算、存儲層的擴容縮容、遷移等最佳實踐集成到該平臺並可視化該過程,從而給用戶更真實、直觀的感受。這將是一款令人激動的產品,它將促進 TiDB 社區更加繁榮,也將讓所有 TiDB 用戶受益!”

——趙應鋼(美團點評 | 分佈式數據庫平臺開發和運維負責人,研究員)

“TiDB-Wasm 這個項目成功地將 TiDB 移植到了 Wasm,證明了 TiDB 編譯到 Wasm 的可行性,同時也反映了 WebAssembly 已走向成熟,相信後面會有更多項目移植到瀏覽器裏運行。目前項目還處於 demo 階段,後續如果將項目繼續落地,在上面添加更多功能,比如使用 indexedDB 讓數據持久化,比如使用 webrtc 之類的技術讓不同瀏覽器中的 TiDB 可以進行 P2P 通訊,實現分佈式瀏覽器數據庫,我非常期待這些實現。”

——侯聖文(貝殼找房 | 數據技術總監)

接下來讓我們試試更多有趣的想法:

  • 讓更多的在線 SQL 教程都可以直接運行。

  • 讓 TiDB 運行在 go play ground 上,或許需要 Go team 的幫助。

  • 支持持久化數據庫,我們已經有了雲計算,邊緣計算,爲什麼不能有瀏覽器計算呢?

如果你有新的,有趣的想法,歡迎聯繫 TiDB 技術團隊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章