第一句子大全,网罗天下好句子,好文章尽在本站!

gitbase:使用SQL语句查询git的repo

时间:2023-12-13

另一方面,SQL是一种经过实战考验的语言,用于查询大型代码库,因为它被采用在Spark和BigQuery等项目

友情提示:本文共有 1937 个字,阅读大概需要 4 分钟。

Git已经成为代码版本控制的事实标准,但它的普及并没有消除对源代码库的历史和内容进行深入分析的复杂性。

另一方面,SQL是一种经过实战考验的语言,用于查询大型代码库,因为它被采用在Spark和BigQuery等项目。

因此,在 source{d}我们选择这两种技术来创建gitbase是合乎逻辑的:Code as Data解决方案,用于使用SQL对git存储库进行大规模分析。

Gitbase是一个完全开源的项目(github.com/src-d/gitbase),它站在一系列巨头的肩膀上,使其开发成为可能,这篇博文旨在指出主要的。

gitbase playground(github.com/src-d/gitbase-web)提供了使用gitbase的可视方式。

用vitess解析SQL

Gitbase的用户界面是SQL:这意味着我们需要能够解析和理解遵循MySQL协议通过网络到达的SQL请求。对我们来说幸运的是,这已经由我们在YouTube的朋友和他们的vitess(https://github.com/vitessio/vitess)项目实施。

我们只是抓住了对我们很重要的代码片段,并将它变成了一个开源项目github.com/src-d/go-mysql-server,允许任何人在几分钟内编写一个MySQL服务器(正如我在justforfunc(http://justforfunc.com/)剧集中所展示的那样CSVQL - 使用SQL提供CSV(https://youtu.be/bcRDXAraprk))。

Vitess是一个用于MySQL水平扩展的数据库集群系统。

用go-git读取git存储库

一旦我们解析了请求,我们仍然需要通过阅读数据集中的git存储库来找到如何回答它。为此,我们集成了source{d}最成功的存储库go-git(https://github.com/src-d/go-git)。

这使我们能够轻松地将存储在磁盘上的存储库分析为siva文件(同样是source{d}的开源项目),或者只是使用git clone克隆。

纯Go中的高度可扩展的Git实现。

使用enry检测语言并使用babelfish解析文件

Gitbase并没有停止其在git历史上的分析能力。通过将语言检测与我们(显然)的开源项目enry(https://github.com/src-d/enry)集成,并使用babelfish(https://github.com/bblfsh/bblfshd)进行程序解析。

当用户使用LANGUAGE和UAST时,这两个功能在gitbase中公开。他们一起提出诸如“查找上个月经常修改的功能名称”的请求。

babelfish是一个自托管服务器,用于通用源代码解析,将代码文件转换为通用抽象语法树(UAST)

让它加速

Gitbase分析非常大的数据集 - 例如 Public Git Archive,带有来自GitHub的3TB源代码(公告),并且每个CPU周期都是如此。

这就是我们将另外两个项目整合到一起的原因:Rubex和Pilosa。

加速Rubex和Oniguruma的正则表达式

Rubex moovweb/rubex(https://github.com/moovweb/rubex)是Go的regexp标准库包的标准替代品。我说quasi是因为他们没有在regexp.Regexp类型上实现LiteralPrefix方法,但是直到现在我也没有听说过这种方法。

Rubex从高度优化的C库Oniguruma(https://github.com/kkos/oniguruma)获得其性能,它使用cgo调用。

使用Pilosa索引加快查询速度

索引是基本上每个关系数据库的一个众所周知的特性,但Vitess并没有实现它们,因为它并不真正需要。

但是再次开源使用Pilosa(https://github.com/pilosa/pilosa)进行救援,这是一个在Go中实现的分布式位图索引,它使gitbase可用于大量数据集。

Pilosa是一个开源的分布式位图索引,可以显着加速跨多个海量数据集的查询。

结论

我想利用这篇博文来亲自感谢开源社区,它使我们能够在如此短的时间内创建gitbase,这是任何人都期望的。在source{d},我们坚信开源,github.com/src-d(包括我们的OKR和投资委员会)下的每一行代码都证明了这一点。

你想尝试一下gitbase吗?最简单快捷的方法是使用source{d}引擎。从sourced.tech/engine下载并使用单个命令运行gitbase!

https://sourced.tech/engine

本文如果对你有帮助,请点赞收藏《gitbase:使用SQL语句查询git的repo》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(2)
  1. &平淡  亦是真&2024-01-04 13:14&平淡 亦是真&[上海市网友]202.93.133.183
    听起来很有趣!希望能够轻松地在git库中进行更高级的查询和筛选,这对开发效率会有很大的帮助。
    顶1踩0
  2. Dro.霄2023-12-24 08:11Dro.霄[广东省网友]103.251.242.38
    太棒了!这简直是开发者的福音,能够用熟悉的SQL语句来查询git的repo,简化了很多操作。
    顶1踩0
相关阅读
怎么写一个超棒的README文档

怎么写一个超棒的README文档

...ME-template.md横幅的最佳尺寸是1280x650px。你还可以将其用于repo的社交预览。我个人使用Canva网站创建横幅图像。所有基本内容都是免费的(在大多数情况下,你不需要专业版)。标题下那些华丽的东西是什么?看起来不错吧?这些...

2007-05-20 #经典句子

Effective MySQL之SQL语句最优化

Effective MySQL之SQL语句最优化

...和数据库性能,你找到了一个数据库中运行缓慢的SQL查询语句。但如果你不知道怎么在MYSQL中对这个SQL语句进行调优,那又该怎么办呢?小编给大家了几个调优的方法:1.尽量避免非操作符的使用在索引使用NOT ,,会导致索引失效,...

2023-05-22 #经典句子

怎样用SQL语句在SQL Server中进行创建表 修改 删除表的数据

怎样用SQL语句在SQL Server中进行创建表 修改 删除表的数据

用SQL语句在SQL Server中进行各种操作是非常常见的操作,今天整理了一下用SQL语句在SQL Server中进行创建表、修改表、删除表,向表中添加数据,修改数据及删除数据。SQL语句创建表创建一个餐桌表--主键--餐桌的编号--餐桌的描述...

2023-05-09 #经典句子

MySQL中SQL查询语句的执行顺序 你知道吗?

MySQL中SQL查询语句的执行顺序 你知道吗?

在写SQL查询语句的时候,通常要考虑SQL语句的查询效率,了解SQL查询语句的执行顺序,可以让我们写出更好的SQL语句,今天就介绍下在MySQL中SQL查询语句的执行顺序。一、SQL语句的执行顺序。一条SQL查询语句由SELECT 、DISTINCT (selec...

2023-02-03 #经典句子

3分钟短文|Laravel 获取模型查询生成的SQL语句

3分钟短文|Laravel 获取模型查询生成的SQL语句

...也包含有Query选项,列出了程序加载流程中所有调用的SQL语句,这非常方便。如果在没有debug,或者没有 blade 模板渲染的页面,如何获取 ORM 组装出来的SQL语句呢?学习时间比如有一个原始的查询:DB::table("users")->get();它生成的SQL...

2023-05-13 #经典句子

mysql基础之sql语句分类及实际中的用途

mysql基础之sql语句分类及实际中的用途

...升一下逼格。上节课中老韩说“select * from student”这是sql语句,sql语句是什么呢?sql语句:结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关...

2023-10-07 #经典句子

SQL数据库及SQL语言是什么?

SQL数据库及SQL语言是什么?

...沟通我们可以称之为数据传输的过程,而在数据库中,SQL语句处于一种关键性地位。SQL语句是结构化查询语言(Structure Query Language)的缩写,是关系模型的程序设计以及数据库查询语言,专门用于数据的存储、更新、查询以及对...

2023-05-08 #经典句子

SQL拦截器修改执行的sql语句

SQL拦截器修改执行的sql语句

...结果集BoundSql获取执行的SQLExecutor顶层接口query 是执行sql语句将心得SQL语句放到query参数中 可实现sql执行的修改Invocation获取参数的值【0】:代表MappedStatement【1】:代表代表sql传进来的参数【2】:代表RowBounds官网的拦截配置MyBatis...

2023-06-09 #经典句子