在统一应用程序状态下通过SQL 声明性Ajax Web应用程序外文翻译资料

 2022-12-19 18:05:39

Declarative Ajax Web Applications through SQL on a Unified Application State[1]

Yupeng Fu

UCSD

y4fu@cs.ucsd.edu

Kian Win Ong

UCSD kianwin@cs.ucsd.edu

Yannis Papakonstantinou

UCSD

yannis@cs.ucsd.edu

Abstract

Implementing even a conceptually simple web application requires an inordinate amount of time. FORWARD addresses three problems that reduce developer productivity: (a) Impedance mismatch across the multiple languages used at different tiers of the application architecture. (b) Distributed data access across the multiple data sources of the application (user input of the browser page, session data in the application server, SQL database etc). (c) Asynchronous, incremental modification of the pages, as performed by Ajax actions.

FORWARD belongs to a novel family of web application frameworks that attack impedance mismatch by offering a single unifying language. FORWARDrsquo;s language is SQL , which is SQL with necessary extensions for semi-structured data. FORWARDrsquo;s architecture is based on two novel cornerstones: (a) A Unified Application State (UAS), which is a virtual database over the multiple data sources. The UAS is accessed via distributed SQL queries, therefore resolving the distributed data access problem. (b) Declarative page specifications, which treat the data displayed by pages as rendered SQL page queries. The resulting pages are automatically incrementally modified by FORWARD. User input on the page becomes part of the UAS.

We show that SQL is suited for the semi-structured nature of web pages and captures the key data model aspects of two important data sources of the UAS: SQL databases and JavaScript components. We show that simple markup is sufficient for creating Ajax displays and for modeling user input on the page as UAS data sources. Finally, we discuss the page specification syntax and semantics that are needed in order to avoid race conditions and conflicts between the user input and the automated Ajax page modifications.

FORWARD has been used in the development of eight commercial and academic applications. An alpha-release web-based IDE (itself built in FORWARD) enables development in the cloud.

Categories and Subject Descriptors H.3.3 [Programming Languages]: Language Constructs and Features - Frameworks; H.2.8 [Information Systems]: Database Management - Applications

General Terms Languages

Keywords Declarative, AJAX, Web Application, Web Application Framework, SQL, FORWARD

1. Introduction

Implementing web applications requires an inordinate amount of time even for an experienced developer. This is because web applications have a three-tier application architecture, each tier potentially running on a separate machine: (a) the visual tier in the browser, (b) the application logic tier in the application server, and (c) the data tier in the database. Multiple mundane low-level tasks need to be performed in a coordinated fashion across all three tiers. The resulting problems (as follows) reduce developer productivity:

  1. Impedance mismatch arises because each tier uses different languages (and data models) [5, 21]. The visual tier uses DOM (XHTML) / JavaScript (JSON); the application logic tier uses an application programming language, such as Java, Python or PHP (objects); the data tier uses SQL (tables). To display a page, mundane and error-prone code is needed to translate SQL tables into Java objects, and then into HTML / JavaScript objects. To implement an action invocation, more code is needed to translate in the opposite direction.
  2. The developer engages in ad-hoc distributed data access across the multiple data sources and machines that the application state is distributed over [3, 22]. For example, suppose a user selects a location in a browser-side street map, and an action needs to compare if the selection is equal to some location stored in the database. The developer has to programatically retrieve the location from the browser-side component, marshall it across the network, unmarshall it on the server, and parameterize a query to send to the database. This ad-hoc distributed data access is primarily due to the application state being distributed across multiple machines: such complexities still occur even if the database has the same data model as the browser (as is the case for JSON databases such as MongoDB).
  3. In order to improve latency and user experience when refreshing complex pages, the developer handcodes Ajax optimizations that imperatively perform asynchronous, incremental modification from the old page to the new page [7]. Instead of re-computing the page from scratch, an action issues a “delta” SQL query retrieving the subset of data needed for refresh, performs incremental computation on the server, sends diffs to the browser, and finally uses the incremental rendering methods of the DOM and JavaScript components. Such event-driven programming to perform incremental computations is well-known to be error-prone and laborious, as it requires the developer to correctly assess the data flow dependencies on the page, and implement for each action on the page additional custom code that correctly transitions the application from one consistent state to another. This is further compounded by asynchronicity: since incremental modifications of the page execute in non-deterministic order, the developer has to reason about how each action interacts with other potentially concurrent actions.

To mitigate the productivity sink from these mundane low-level tasks, practitioners have relied primarily on web application frameworks, such as Ruby-on-Rails, Django

剩余内容已隐藏,支付完成后下载完整资料


在统一应用程序状态下通过SQL 声明性Ajax Web应用程序

摘要

即使是实现概念上简单的Web应用程序也需要很多的时间。FORWARD解决了降低开发人员工作效率的三个问题:(a)跨应用程序架构的不同层所使用的多种语言之间的不匹配。(b)跨应用程序的多个数据源的分布式数据访问(浏览器页面的用户输入,应用程序服务器中的会话数据,SQL数据库等)。(c)由Ajax操作执行的页面的异步,增量修改。

FORWARD属于一个新颖的Web应用程序框架系列,它通过提供单一的统一语言来攻击阻抗不匹配。 FORWARD的语言是SQL ,它是具有半结构化数据必要扩展的SQL。 FORWARD的架构基于两个新的基石:(a)统一应用状态(UAS),它是多个数据源上的虚拟数据库。 通过分布式SQL 查询访问UAS,从而解决分布式数据访问问题。 (b)声明性页面规范,将页面显示的数据视为呈现的SQL 页面查询。 FORWARD会自动逐步修改生成的页面。 页面上的用户输入将成为UAS的一部分。

我们证明SQL 适用于网页的半结构化特性,并捕获UAS的两个重要数据源的关键数据模型方面:SQL数据库和JavaScript组件。 我们展示了简单的标记足以创建Ajax显示和用于在页面上将用户输入建模为UAS数据源。 最后,我们讨论了为避免用户输入和自动Ajax页面修改之间的竞争条件和冲突所需的页面规范语法和语义。

FORWARD已被用于开发八种商业和学术应用。 基于alpha版本的基于Web的IDE(本身内置于FORWARD)支持在云中进行开发。

关键词:明式,AJAX,Web应用程序,Web应用程序框架,SQL,FORWARD

介绍

即使对于有经验的开发人员来说,实现Web应用程序也需要过多的时间。 这是因为Web应用程序具有三层应用程序体系结构,每个层可能在单独的机器上运行:(a)浏览器中的可视层,(b)应用程序服务器中的应用程序逻辑层,以及(c)数据 数据库中的层。 需要在所有三层中以协调的方式执行多个普通的低级任务。 由此产生的问题(如下所示)降低了开发人员的工作效率:

1.阻抗不匹配的产生是因为每个层使用不同的语言(和数据模型)[5,21]。 可视层使用DOM(XHTML)/ JavaScript(JSON); 应用程序逻辑层使用应用程序编程语言,例如Java,Python或PHP(对象); 数据层使用SQL(表)。 要显示页面,需要平凡且容易出错的代码将SQL表转换为Java对象,然后转换为HTML / JavaScript对象。 要实现动作调用,需要更多代码来反向转换。

2.开发人员在应用程序状态分布的多个数据源和机器上进行临时分布式数据访问[3,22]。 例如,假设用户选择浏览器侧街道地图中的位置,并且操作需要比较选择是否等于存储在数据库中的某个位置。 开发人员必须以编程方式从浏览器端组件检索位置,通过网络对其进行编组,在服务器上解组,并参数化查询以发送到数据库。 这种临时分布式数据访问主要是由于应用程序状态分布在多台机器上:即使数据库与浏览器具有相同的数据模型(如MongoDB等JSON数据库的情况),仍会出现这种复杂性。

3.为了在刷新复杂页面时改善延迟和用户体验,开发人员手动编写了Ajax优化,强制执行从旧页面到新页面的异步,增量修改[7]。操作不是从头开始重新计算页面,而是发出“delta”SQL查询,检索刷新所需的数据子集,在服务器上执行增量计算,将差异发送到浏览器,最后使用增量渲染方法。 DOM和JavaScript组件。众所周知,执行增量计算的事件驱动编程容易出错且费力,因为它要求开发人员正确评估页面上的数据流依赖性,并为页面上的每个操作实现正确的附加自定义代码将应用程序从一个一致状态转换为另一个状态异步性进一步加剧了这一点:由于页面的增量修改以非确定性顺序执行,因此开发人员必须推断每个动作如何与其他可能并发的动作交互。

为了降低这些平凡的低级任务的生产力,从业者主要依赖于Web应用程序框架,例如Ruby-on-Rails,Django和Microsoft ASP.NET。每个框架都建立在应用程序逻辑层的主流编程语言之上(维基百科列出了10种主流编程语言中的110个Web应用程序框架[20]),并侧重于提供桥接应用程序逻辑层与其他层之间成对间隙的库。两层。例如,对象关系映射器(ORM)库减轻了编程语言和SQL数据库之间的阻抗不匹配,序列化库简化了通过网络发送JSON,JavaScript实用程序库(例如JQuery)便于导航和更新DOM以进行增量因为库专注于在特定系统边界处缓解点问题而不是跨多个层和数据源整体处理问题,所以开发人员可以协调这些单独的库。此外,在验证是否在三层上端到端地正确处理边缘情况时,开发人员不能依赖于库之间的一致语义。最终,开发人员在构建Ajax Web应用程序时仍需要了解底层语言和数据模型之间的差异。

认识到库不足以为Ajax Web应用程序编程提供概念上简洁的抽象,数据库和编程语言社区已经提出了新的框架,如Links [5]和Hilda [21],每个框架都基于跨越所有的单一语言 三层。 本着同样的精神,我们提出FORWARD [7,8],这是一个Ajax Web应用程序框架,它通过单一语言SQL 提供整体抽象,这是一种SQL,具有必要的半结构化扩展,以支持页面通常展示的嵌套和异构性。 FORWARD进一步改进了Links和Hilda在其架构中的两个新基石:统一应用程序状态(UAS)封装多个数据源,以及通过呈现查询的声明性页面。 FORWARD申请包括:

1.统一应用程序状态(UAS)规范,它指定包含嵌套异构表的虚拟数据库,这些表集成来自不同数据模型的多个数据源的数据,包括SQL数据库,会话,URL参数,HTML DOM和JavaScript组件。

2.页面规范(例如图2,3,4),它使用通过UAS执行的SQL 查询以声明方式指定页面的数据。 还使用模板标记以声明方式指定数据呈现,模板标记超出HTML以支持具有丰富行为和功能的JavaScript组件,例如地图,日历和条形图。 由于页面规范是声明性的,因此页面的增量修改由FORWARD的优化自动处理。

3.动作规范(例如图5),它们在PL / SQL 中实现,这是SQL数据库的过程语言的类似扩展版本。 因此,使用UAS上的基本控制流构造(例如条件,循环和函数)以及INSERT,UPDATE和DELETE语句来操纵应用程序状态。

FORWARD编译器对上述规范执行静态分析并执行自动优化。

由于SQL 提供单一语言和数据模型,因此没有阻抗不匹配。 UAS允许开发人员以透明的方式编写SQL 查询和更新,而不是ad-hoc分布式数据访问:FORWARD的分布式查询处理器将SQL 查询编译成对各个数据源的单独,高效的查询[9]。 作为声明性页面的结果,指定页面的内容而不考虑它们将如何异步地进行增量修改。 当页面的基础数据依赖性发生更改时,FORWARD的优化将通过增量视图维护和增量呈现自动提供页面的增量修改[7]。 因此,FORWARD同时为开发人员提供了易用性,并通过自动优化提供了高效的性能。

在设计框架的单一语言以满足UAS和页面渲染查询基石的需求时,我们选择将其基于SQL,因为SQL:

bull;熟悉开发人员:由于Web应用程序的主要持久性数据存储是SQL数据库,因此Web开发人员已经熟悉使用SQL查询和更新应用程序状态。

bull;声明性:虽然呈现的查询提供易于理解的页面语义,但FORWARD还可以有效地评估页面,以便性能与开发人员手动提供的增量计算相当(或更好)。 作为一种声明性语言,SQL为页面评估期间的自动性能优化提供了机会,包括:使用增量视图维护[7]对查询进行增量评估,将一次一元的查询重写为更有效的规范化集查询[9], 和分布式查询处理的边界通信成本[9]。

bull;表达性:我们观察到页面数据通常是(a)不同数据源之间的关联,这些关联由分布式查询中的连接处理(b)源数据的分析和聚合,由GROUP BY和聚合函数处理。此外,操作通常包括创建,读取,更新和删除(CRUD)数据操作,这些操作由INSERT,UPDATE和DELETE语句处理。 SQL的表达性使常见案例变得简单,并通过用户定义的函数(UDF)为更复杂的操作提供可扩展性点。作为我们系统实现的数据点,生产中部署的最复杂的FORWARD应用程序有18个页面,207个操作和80个UDF。 72个UDF用于模块化/可重用性目的,并在几行SQL 中实现;剩下的8个需要Java。 Java UDF仅占所有操作/ UDF的3%这一事实表明SQL 和PL / SQL 非常适合常见情况。我们在Future Work部分中评论Java UDF的原因以及我们如何进一步增加SQL 提供的覆盖范围。

bull;与JavaScript组件的数据模型的互操作性:在可视层中,大多数JavaScript组件使用JSON值交换数据。 对于UAS的统一数据模型,我们观察到SQL的数据模型接近于JSON,因为两者都区分集合(表与数组)和元组(行与对象文字,即名称 - 值对的集合)。 相比之下,XML没有做出这样的区分,因为它只识别元素集合,这使得它不太适合统一数据模型。

在本文中,我们提供FORWARD的系统概述,通过示例说明其语言,并讨论如何捕获现代Ajax Web应用程序的特征。 特别是,我们强调了以下对语言设计的新贡献,即对早期原型的改进/扩展:

1.捕获JSON组件状态的SQL 数据模型:为了弥合UAS的两个重要数据源的数据模型之间的差距,即SQL数据库表和JavaScript组件的JSON,我们为SQL 设计了一个统一的数据模型。我们描述了SQL 值如何与a同构JSON值,从而表明可以将FORWARD数据模型视为SQL 或JSON。 特别是,我们扩展SQL表以捕获特定于JSON的嵌套,排序和异构性。 反之亦然,我们考虑使用扩展的JSON来捕获更丰富的标量类型。另外,值观HTML DOM作为特殊情况处理。

2.页面的HTML和JavaScript组件的声明性模板语言:页面以声明方式指定为呈现的查询,以便使用SQL 查询指定数据,并使用HTML / JSON模板标记指定呈现。 特别是,可以通过JSON模板标记轻松指定JavaScript组件,即使组件本身仅提供编程接口也是如此。 这是通过使用SQL 值对页面实例建模来实现的。FORWARD自动将更改从页面实例传播到JavaScript组件,反之亦然,并通过使用JavaScript组件的高效增量呈现方法自动进行优化。

3.为异步操作建模用户输入与可视化:页面在概念上可以被认为是两个不同部分的连接:用户输入的有状态部分,以及显示给用户但不通过直接修改的可视化的无状态部分 用户活动。 为了保证异步操作不会导致页面刷新与用户输入冲突,FORWARD对页面进行建模,使得在页面实例中每个值都是(a)存储在UAS中的可变值或(b)不可变值,即通过UAS呈现查询的结果。 尽管可变值可以由用户和多个异步动作同时写入,但是不可变值总是与最新的UAS一致。

4.系统实现:为了验证我们的语言设计,我们实现了FORWARD并使用它来构建多个应用程序,包括商业应用程序。 一个着名的FORWARD应用程序是一个alpha版本的IDE,允许开发人员在云中创建其他托管的FORWARD应用程序,可在http://forward.ucsd.edu/上找到。 此外,FORWARD目前部署在商业应用中,其中一个特征是BioHeatMap(http:// www.bioheatmap.com),这是两家制药公司目前使用的分析应用程序。

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[19787],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版