自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Gitbase:使用 SQL 探索 Git 倉庫

開源
Gitbase 是一個由 Go 驅(qū)動的開源項目,它使得我們可以在 Git 倉庫上運行 SQL 查詢。

Git 已經(jīng)成為了代碼版本控制的事實標(biāo)準(zhǔn)。雖然 Git 已經(jīng)很流行了,但想用它來對源代碼倉庫的歷史和內(nèi)容進(jìn)行深度分析,仍然是一件復(fù)雜的事情。

另一方面,SQL 則是一個經(jīng)過實際檢驗、適合查詢大型代碼庫的的語言,畢竟 Spark 和 BigQuery 等項目都采用了 SQL 作為查詢語言。

因此,在 sourcek6zqhab033oa 公司,我們順理成章地結(jié)合了這兩種技術(shù)來創(chuàng)建了 Gitbase:這是一個用 SQL 對 Git 倉庫進(jìn)行大規(guī)模分析的“代碼即數(shù)據(jù)”解決方案。

Gitbase 是一個完全開源的項目,它站在一系列巨人的肩膀上,是它們使 Gitbase 的發(fā)展成為可能。本文旨在指出其中的主要部分。

??Gitbase 試驗場??? 提供了一種使用 Gitbase 的可視化方式。

使用 Vitess 解析 SQL

Gitbase 將 SQL 作為用戶接口。這意味著我們需要解析基于 MySQL 協(xié)議傳輸?shù)?SQL 請求,并理解它們。幸運的是,我們在 YouTube 的朋友和他們的 ??Vitess?? 項目已經(jīng)實現(xiàn)了這一點。Vitess 是一個數(shù)據(jù)庫集群系統(tǒng),用于 MySQL 的水平擴(kuò)展。

我們直接截取一些重要的代碼片段,并把它做成了一個 ??開源項目??。這個項目允許任何人在幾分鐘內(nèi)編寫一個 MySQL 服務(wù)器(正如我在 ??justforfunc?? 的專題:??CSVQL - 用 SQL 處理 CSV?? 中所展示的那樣)。

用 go-git 讀取 Git 儲存庫

當(dāng)成功解析了一個請求,我們還需要讀取數(shù)據(jù)集里的 Git 倉庫,才能夠知道該如何回復(fù)它。為此,我們集成了 sourcek6zqhab033oa 最成功的倉庫 ??go-git??。go-git 是一個高度可擴(kuò)展的純 Go 語言的 Git 實現(xiàn)。

這使得我們能夠輕松地分析以 ??siva?? 文件格式存儲在磁盤上的源代碼倉庫(siva 也是一個 sourcek6zqhab033oa 的開源項目),或是直接使用 ??git clone?? 克隆的倉庫。

使用 Enry 檢測編程語言,使用 Babelfish 解析文件

Gitbase 并沒有將其分析能力局限于 Git 歷史記錄上。它還使用(顯然也是)我們的開源項目 ??Enry?? 集成了語言檢測功能,并使用 ??Babelfish?? 實現(xiàn)了程序解析的功能。Babelfish 是一個用于通用源代碼解析的自托管服務(wù)器,它可以將代碼文件轉(zhuǎn)化為通用抽象語法樹Universal Abstract Syntax Trees(UAST)。

這兩個功能在 Gitbase 中呈現(xiàn)為用戶函數(shù) ??LANGUAGE?? 和 ??UAST??。結(jié)合使用兩個函數(shù),許多查詢請求都成為了可能,比如“找到上個月修改次數(shù)最多的函數(shù)名稱”。

讓它快速運行

Gitbase 經(jīng)常要分析非常大的數(shù)據(jù)集,比如公共 Git 檔案,其中有來自 GitHub 的 3TB 源代碼(見 ??公告??)。為了做到這一點,每份 CPU 處理能力都很重要。

這就是為什么我們又集成了另外兩個項目:Rubex 和 Pilosa。

使用 Rubex 和 Oniguruma 加快正則表達(dá)式的速度

??Rubex?? 是 Go 的 ??regexp?? 標(biāo)準(zhǔn)庫包的一個準(zhǔn)替代品。之所以還不能完成替代,是因為他們沒有在 ??regexp.Regexp?? 類型上實現(xiàn) ??LiteralPrefix?? 方法,不過我也是直到現(xiàn)在才聽說這個方法。

Rubex 的高性能得歸功于高度優(yōu)化的 C 語言庫 ??Oniguruma??,它使用 ??cgo?? 來調(diào)用這個庫。

使用 Pilosa 索引加快查詢速度

索引基本上是每個關(guān)系型數(shù)據(jù)庫的眾所周知的特性,但 Vitess 卻沒有實現(xiàn)索引,因為它不是真正需要。

還好開源的 ??Pilosa?? 再一次拯救了我們,它是一個用 Go 實現(xiàn)的分布式位圖索引,使得 Gitbase 可以用于大規(guī)模的數(shù)據(jù)集。Pilosa 是開源的,它極大地加快了對多個海量數(shù)據(jù)集的查詢。

總結(jié)

我想通過這篇博文,親自感謝開源社區(qū),是他們讓我們在如此短的時間內(nèi)創(chuàng)建了 Gitbase,這是誰也沒想到的。在 sourcek6zqhab033oa 公司,我們是開源的堅定信仰者,??github.com/src-d?? 下的每一行代碼(包括我們的 OKR 和投資者委員會)都可以證明這一點。

你想嘗試一下 Gitbase 嗎?最快、最簡單的方法就是使用 sourcek6zqhab033oa 引擎。從 ??sourced.tech/engine?? 下載它,只需一個命令就能讓 Gitbase 運行起來。

想了解更多嗎?請查看我在 ??Go SF meetup?? 的演講錄音。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2011-08-09 10:20:55

GitLinux遠(yuǎn)程倉庫

2017-03-01 10:34:12

2020-12-11 22:16:34

Git遠(yuǎn)程倉庫Linux

2022-07-05 07:46:25

數(shù)據(jù)倉庫運維智能化

2017-03-13 13:21:34

Git處理大倉庫

2013-11-01 13:21:23

Dropbox

2014-03-19 10:01:16

Git項目遠(yuǎn)端倉庫

2023-11-02 07:39:14

Git.NET代碼

2020-04-03 15:22:49

Hadoop數(shù)據(jù)倉庫數(shù)據(jù)庫

2017-02-08 13:33:34

AndroidJavaPhp

2021-03-14 09:37:45

Git倉庫管理代碼

2020-07-07 16:58:21

開源技術(shù) 工具

2016-08-05 12:58:44

GitLinux開源

2023-04-04 08:38:27

命令Git倉庫

2010-07-21 15:01:09

SQL Server

2014-07-28 14:43:14

git開源

2015-08-06 10:28:24

git規(guī)范流程

2020-01-18 18:41:13

GitGit服務(wù)器開源

2022-07-10 21:17:01

GitTigLinux

2024-02-28 17:28:46

Git服務(wù)URL
點贊
收藏

51CTO技術(shù)棧公眾號