自动处理服务器场中的数据库缓存的系统可提高

作者: 计算机资讯  发布:2019-08-16

  今天,在大型网站上加载网页通常涉及数据库查询 - 检索您参与的讨论的最新贡献,与您正在阅读的相关的新闻报道列表,定位到您的地理位置的链接等。

  但是数据库查询非常耗时,因此许多网站存储 - 或“缓存” - Web服务器上的常见查询结果,以便更快地交付。

  但是,如果站点用户更改了数据库中的值,则还需要更新缓存。分析网站代码以确定哪些操作需要更新哪些缓存值通常属于Web程序员的复杂任务。缺少一个这样的操作可能导致无法使用的站点。

  本周,在计算机协会计划语言原理研讨会上,来自麻省理工学院计算机科学和人工智能实验室的研究人员提出了一个新系统,该系统自动处理用网络编程语言Ur / Web编写的Web应用程序的数据库查询缓存。

  虽然网站可能并行地发送许多请求 - 向不同的用户发送不同的缓存数据,甚至是在不同服务器上缓存的数据 - 但系统保证,对于用户来说,每个事务看起来都与请求按顺序处理时完全一样。因此,例如,用户不会点击显示活动门票可用的链接,只是发现他们在付款时被抢走了。

  在涉及使用Ur / Web构建的两个网站的实验中,新系统的自动缓存提供了两倍和30倍的加速。

  “由数据库支持的大多数非常受欢迎的网站实际上并没有对每个请求反复询问数据库,”麻省理工学院电子工程和计算机科学副教授,会议论文的高级作者Adam Chlipala说。“他们注意到,哦,我最近似乎已经问过这个问题了,我保存了结果,所以我只是把它拉出记忆。”

  “但这里棘手的部分是你必须意识到,当你对数据库进行更改时,你保存的一些答案不再是正确的,你必须做所谓的使它们无效。在实现这一点的主流方式中,程序员需要手动添加失效逻辑。对于改变数据库的每一行代码,程序员必须坐下来思考,好吧,对于读取数据库的每一行代码并将结果保存在缓存中,其中一些代码将被破坏我刚刚做出的改变?“

  Chlipala加入了卡内基梅隆大学计算机科学研究生Ziv Scully的论文,他在Chlipala实验室担任麻省理工学院本科生。

  Chlipala发明的Ur / Web允许Web开发人员使用一种编程语言完全指定其站点的功能。然后,Ur / Web编译器会自动生成为网站提供支持所需的所有不同类型的代码 - HTML,JavaScript,SQL数据库查询和级联样式表 - 同时提供某些性能和安全保证。Chlipala和Scully的新系统是对编译器的修改,因此Ur / Web用户可以简单地重新编译他们现有的代码,以获得数据库缓存的所有好处。语言本身保持不变。

  新编译器首先分析Ur / Web代码并确定要缓存的数据以及如何组织它。例如,如果某些类型的查询几乎总是相互结合执行,则Ur / Web会将关联数据缓存在单个表中。编译器还决定是否缓存原始数据,HTML代码,或者,如果程序结构允许,还要缓存整个网页。

  然后编译器遍历代码并将更新数据库中的值的每个操作与查询数据库的每个操作进行比较,以确定哪些缓存值需​​要在何时失效,并在适当的位置添加适当的缓存失效命令。

  与许多编程语言一样,Ur / Web具有关联的“运行时”,这是一个在后台运行的小程序,用于管理用该语言编写的应用程序的执行。Chlipala和Scully还更新了Ur / Web运行时,以监控重用缓存数据库查询的频率。任何证明多余的都被删除,这提高了系统的效率。

  除了在两个完整的网站上测试系统之外,Chlipala和Scully还在一些较小的程序上进行了测试,这些程序也是用Ur / Web编写的,这些程序是用于比较不同Web开发框架的一组标准基准测试的一部分。在这些方面,新系统提供了两倍到五倍的加速。

  但是,他们没有将使用他们的系统开发的网站与使用手工编码缓存的网站进行比较,因为正如Chlipala所解释的那样,“Ur / Web比其他所有网站都快得多”。

  “即使事实证明有人可以投入额外的工作并获得三倍的吞吐量,我们的论点是,在没有额外工作的情况下,将吞吐量增加一倍是非常好的,”他补充道。

  “使用数据库的许多网站和其他程序都使用缓存来提高性能,”康奈尔大学计算机科学教授安德鲁迈尔斯说。“但是,正确执行此操作非常棘手,因为数据库查询的结果可能会变得无效。因此,以这种方式加速应用程序的尝试会导致查找非常具有挑战性的错误。[MIT研究人员]系统不是要求程序员识别需要丢弃的结果,而是通过分析应用程序对数据库的不同请求来自动执行此操作。

本文由金沙登录平台于2019-08-16日发布