加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

智能机器人会抢走我们的工作和收入吗?

发布时间:2021-02-02 15:22:04 所属栏目:评论 来源:互联网
导读:1 索引构建 用户对代码的浏览场景主要集中在代码评审和主干分支的代码浏览,所以我们目前主要支持两种场景的语法服务。语法服务接收来自代码平台的事件消息,如代码推送事件,评审的创建、更新、合并、关闭、重新开启事件,来触发语法服务构建。 我们的构建

1 索引构建

用户对代码的浏览场景主要集中在代码评审和主干分支的代码浏览,所以我们目前主要支持两种场景的语法服务。语法服务接收来自代码平台的事件消息,如代码推送事件,评审的创建、更新、合并、关闭、重新开启事件,来触发语法服务构建。

我们的构建工作流调度主要基于阿里巴巴开源的分布式调度框架tbschedule,该系统会通过zookeeper维护一个任务集群,通过zookeeper做节点管理和任务分发,不重复不遗漏地快速处理调度任务。

针对不同语言,我们只需要实现一次从源代码到LSIF格式的转换,就能将其应用在多种场景。多种代码语言代码语言都会被解析成统一的LSIF格式文件。

针对阿里巴巴内部主要的Java语言,我们利用开源Java代码解析工具Spoon[2]将Java源代码分析为AST(抽象语法树),然后捕捉定义和引用、定义与注释之间的关联,将坐标信息、注释内容,文本类型,所属文件等信息聚合,输出为统一的LSIF的Json格式。

开发期间修复并适配了一些lsif-java的问题,如位置范围信息错乱,召回多种遗漏的高亮词类型,适配非Maven仓库的索引构建。同时还修复了Spoon关于无法正确解析注释中的部分注解的问题,PR已被Spoon社区接受合并[3]。

生成lsif.json文件后,由于这个Json文件较大,直接由前端加载并响应请求不太合理,后期增量生成与维护难度也很大,所以我们还需要一步:将lsif.json转化为结构化数据,从而按需响应用户查询请求。lsif的图存储格式让人自然地联想到用图数据结构存储,图查询的速度也比较快,然而由于索引变化迭代较快,频繁更换的ID导致图存储难以适配增量方案,不同代码库不同语言的索引数据很难在一张图中结构化,参考了社区的相关实践,考虑到成本和性能,因为ES天然地适合大规模的数据存储和索引,我们最后选择了用ES(Elasticsearch)做结构化数据存储。

我们将这种结构化的数据上传到ES,然后语法服务后端服务器会基于用户的语法请求,构造ES请求Query,查询定义、引用或注释信息,将其拼装返回。

对于分支,我们会持续更新和保留最新版本的索引数据;对于代码评审,我们会构建源分支的每次Push版本和源目标分支的merge-base版本的索引。

索引构建的另外一个难点是增量计算。如上文所述,语法服务索引构建对资源的要求非常高,而现实中代码库不可避免地会存在频繁提交的现象。如此引申出了两个优化点:

利用增量的方式减少存储内容的变更,加快索引构建速度。

利用分布式时序锁减少频繁请求带来的压力。

增量方案

每次分支索引构建成功,我们都会在数据库中记录分支对应的版本号,当该分支有了一次新的提交后,在生成lsif.json后,系统会比较两个分支的Diff,获取到变更文件和变更类型,通过变更文件来进一步提取索引受到影响的文件(引用或定义的坐标信息变更),分析出所有受影响的文件和对应的ES增删操作后,完成增量索引上传。这个增量的过程平均能减少45%的分支构建时间。
 

undo log 记录事务修改之前版本的数据信息,因此假如由于系统错误或者rollback操作而回滚的话 可以根据undo log的信息来进行回滚到没被修改前的状态。

三 存储引擎应用场景

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据 实际情况选择多种存储引擎进行组合。以下是几种常用的存储引擎的使用环境 。

  • InnoDB : 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键, 行锁。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。InnoDB存储引擎除了有效的降低由于删除和更新导致的锁定, 还可以确保事务的完整提交和回滚,对于电商系统中的商品(SPU、SKU、分类、品牌)、订单、用户等信息的存储,InnoDB是最合适的选择。
  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。对于电商系统中,系统的操作日志、用户评价、足迹等信息的存储,MyISAM是合适的选择。

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读