Linux中國

gitbase:用 SQL 查詢 Git 倉庫

Git 已經成為了代碼版本控制的事實標準,但儘管 Git 相當普及,對代碼倉庫的深入分析的工作難度卻沒有因此而下降;而 SQL 在大型代碼庫的查詢方面則已經是一種久經考驗的語言,因此諸如 Spark 和 BigQuery 這樣的項目都採用了它。

所以,source{d} 很順理成章地將這兩種技術結合起來,就產生了 gitbase(LCTT 譯註:source{d} 是一家開源公司,本文作者是該公司開發者關係副總裁)。gitbase 是一個 代碼即數據 code-as-data 的解決方案,可以使用 SQL 對 git 倉庫進行大規模分析。

gitbase 是一個完全開源的項目。它站在了很多巨人的肩上,因此得到了足夠的發展競爭力。下面就來介紹一下其中的一些「巨人」。

gitbase playground 為 gitbase 提供了一個可視化的操作環境。

用 Vitess 解析 SQL

gitbase 通過 SQL 與用戶進行交互,因此需要能夠遵循 MySQL 協議來對通過網路傳入的 SQL 請求作出解析和理解,萬幸由 YouTube 建立的 Vitess 項目已經在這一方面給出了解決方案。Vitess 是一個橫向擴展的 MySQL 資料庫集群系統。

我們只是使用了這個項目中的部分重要代碼,並將其轉化為一個可以讓任何人在數分鐘以內編寫出一個 MySQL 伺服器的開源程序,就像我在 justforfunc 視頻系列中展示的 CSVQL 一樣,它可以使用 SQL 操作 CSV 文件。

用 go-git 讀取 git 倉庫

在成功解析 SQL 請求之後,還需要對數據集中的 git 倉庫進行查詢才能返回結果。因此,我們還結合使用了 source{d} 最成功的 go-git 倉庫。go-git 是使用純 go 語言編寫的具有高度可擴展性的 git 實現。

藉此我們就可以很方便地將存儲在磁碟上的代碼倉庫保存為 siva 文件格式(這同樣是 source{d} 的一個開源項目),也可以通過 git clone 來對代碼倉庫進行複製。

使用 enry 檢測語言、使用 babelfish 解析文件

gitbase 集成了我們開源的語言檢測項目 enry 以及代碼解析項目 babelfish,因此在分析 git 倉庫歷史代碼的能力也相當強大。babelfish 是一個自託管服務,普適於各種源代碼解析,並將代碼文件轉換為 通用抽象語法樹 Universal Abstract Syntax Tree (UAST)。

這兩個功能在 gitbase 中可以被用戶以函數 LANGUAGEUAST 調用,諸如「查找上個月最常被修改的函數的名稱」這樣的請求就需要通過這兩個功能實現。

提高性能

gitbase 可以對非常大的數據集進行分析,例如來自 GitHub 高達 3 TB 源代碼的 Public Git Archive(公告)。面臨的工作量如此巨大,因此每一點性能都必須運用到極致。於是,我們也使用到了 Rubex 和 Pilosa 這兩個項目。

使用 Rubex 和 Oniguruma 優化正則表達式速度

Rubex 是 go 的正則表達式標準庫包的一個準替代品。之所以說它是准替代品,是因為它沒有在 regexp.Regexp 類中實現 LiteralPrefix 方法,直到現在都還沒有。

Rubex 的高性能是由於使用 cgo 調用了 Oniguruma,它是一個高度優化的 C 代碼庫。

使用 Pilosa 索引優化查詢速度

索引幾乎是每個關係型資料庫都擁有的特性,但 Vitess 由於不需要用到索引,因此並沒有進行實現。

於是我們引入了 Pilosa 這個開源項目。Pilosa 是一個使用 go 實現的分散式點陣圖索引,可以顯著提升跨多個大型數據集的查詢的速度。通過 Pilosa,gitbase 才得以在巨大的數據集中進行查詢。

總結

我想用這一篇文章來對開源社區表達我衷心的感謝,讓我們能夠不負眾望的在短時間內完成 gitbase 的開發。我們 source{d} 的每一位成員都是開源的擁護者,github.com/src-d 下的每一行代碼都是見證。

你想使用 gitbase 嗎?最簡單快捷的方式是從 sourced.tech/engine 下載 source{d} 引擎,就可以通過單個命令運行 gitbase 了。

想要了解更多,可以聽聽我在 Go SF 大會上的演講錄音。

本文在 Medium 首發,並經許可在此發布。

via: https://opensource.com/article/18/11/gitbase

作者:Francesc Campoy 選題:lujun9972 譯者:HankChow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...