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

AI跟人类一样,都是需要“睡觉”的

发布时间:2021-02-02 15:24:49 所属栏目:传媒 来源:互联网
导读:然而代码分析往往需要耗费大量的时间和资源,当用户请求某个语法服务(如查看定义),后端需要克隆代码,下载依赖包,解析语法,构建索引(类比一下IntelliJ Idea初始化工程的场景),编辑器场景用户已经习惯于这样的方式,等待几分钟或许问题不大。但CR场景或者

然而代码分析往往需要耗费大量的时间和资源,当用户请求某个语法服务(如查看定义),后端需要克隆代码,下载依赖包,解析语法,构建索引(类比一下IntelliJ Idea初始化工程的场景),编辑器场景用户已经习惯于这样的方式,等待几分钟或许问题不大。但CR场景或者轻量级的代码浏览场景,这种方式就显得时效性比较低了,几分钟后或许用户已经完成了代码浏览,而且缺少持久化的存储会导致资源过度消耗。于是,LSIF就在这样的背景下应运而生,秉承用空间换时间的思想,提前计算好语法分析结果以特定的索引格式存储在云上,从而快速响应不同用户的多次请求。

援引官方示例来简单介绍下LSIF,如下方代码:

// this is a sample classpublic class Sample {}

假定只有一种交互,当鼠标移动到Sample的类名上,就会出现“this is a sample class”的注释信息。用LSIF的图就可以如下描述。
 

在人工代码评审(Code Review,CR)中,对于纯文本形式的代码浏览不可避免地将耗费大量的时间,影响CR的效率。那么有没有更智能的方法?阿里云云效代码智能语法服务基于云端备份的快速代码导航服务,无须本地克隆即可在页面体验熟悉的定义引用快速查看跳转功能,可大幅提升代码评审的效率和质量。本文分享相关的技术原理与实现方法。

一 前言

代码文本不是简单的二维平面结构,看懂一段代码需要反复地通过定义与引用的跳转,才能将代码深层次的逻辑和片段影响范围理解透彻。纯文本形式的代码浏览是网页端代码评审的最大痛点之一,朱熹老先生常说“心不在此,则眼不看仔细,心眼既不专一,却只漫浪诵读,决不能记,记亦不能久也。”代码文本扁平式地漫浪诵读只能达到眼到、口到的境界,如果你是一个认真负责的代码评审者,阿里云云效代码智能语法服务一定是帮助你充分理解代码变更,超越眼口,到达“心到”境界的功能。心既到矣,眼口岂不到乎?

那么什么是代码智能语法服务呢?语法服务提供了基于云端备份的快速代码导航服务,无须本地克隆即可在页面体验熟悉的定义引用快速查看跳转功能,大幅提升代码评审的效率和质量。

二 技术基础

阿里云云效代码智能语法服务的底层技术是LSIF(Language Server Index Format),它是一种持久化语言的索引的图存储格式,通过图的格式,表示了“代码文档”-> “语法智能结果”之间的事件关系。

在LSIF之前,LSP(Language Server Protocol)定义了编码语言与各类终端代码编辑器之前的交互协议。原先开发者需要为每一款编辑器都定义适配一种语法分析服务应用,那么M个语言要在M个代码编辑器中使用的话需要MxN个应用。而有了LSP的出现,开发者在解析代码语法时只需要遵循LSP协议格式,实现代码补全、定义展示、代码诊断等接口,就只需要开发M+N个应用。
 

3. 自适应hash索引

在InnoDB中默认支持的索引结构为 B+ 树,B+ 树索引可以使用到范围查找,同时是按照顺序的方式 对数据进行存储,因此很容易对数据进行排序操作,在联合索引中也可以利用部分索引键进行查询 。而对于Hash索引则只能满足 =,<>,in查询,不能使用范围查询, 而且数据的存储是没有顺序的。

MySQL 默认使用 B+ 树作为索引,因为 B+ 树有着 Hash 索引没有的优点,那么为什么还需要自 适应 Hash 索引呢?

这是因为B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般为3-4层,故需要3-4 次查询。而 Hash 索引在进行数据检索的时候效率非常高,通常只需要 O(1) 的复杂度,也就是一 次就可以完成数据的检索。虽然 Hash 索引的使用场景有很多限制,但是优点也很明显。InnoDB存储 引擎会监控对表上各索引页的查询,如果观察到hash索引可以提升速度,则建立hash索引,称之为自 适应hash索引(Adaptive Hash Index,AHI)。

注意,这里的自适应指的是不需要人工来指定,系统会根据情况自动完成。

什么情况下才会使用自适应 Hash 索引呢?如果某个数据经常被访问,当满足一定条件的时候,就会 将这个数据页的地址存放到 Hash 表中。这样下次查询的时候,就可以直接找到这个页面的所在位 置。值得注意的是,hash索引只能用于= ,in的查询,对于其他的查询类型,如范围匹配等是不能使 用hash索引的。而且自适应 Hash 索引只保存热数据(经常被使用到的数据),并非全表数据。因此 数据量并不会很大,因此自适应 Hash 也是存放到缓冲池中,这样也进一步提升了查找效率。

(编辑:新余站长网)

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

    热点阅读