当前位置: 首页 > 网络应用技术

Java遇到SPL:建筑优势和开发效率,一个人没有放手

时间:2023-03-05 21:28:44 网络应用技术

  本文分享了华为云社区的“ Java结构SPL”,作者:Shi Zhenzhen的杂货店。

  现代Java应用程序体系结构越来越强调数据存储和处理的分离,以获得更好的维护,可扩展性和可移植性。例如,热微服务是典型的。此体系结构通常需要在Java程序中实现业务逻辑,而不是将其放置在传统应用程序体系结构之类的数据库中。

  应用程序中的业务逻辑涉及结构数据处理。数据库(SQL)对此类任务具有丰富的支持,这可能相对容易实现业务逻辑。但是,Java始终缺乏这样的基本支持,导致使用Java来实现实现Java结果,尽管结构具有各种优势,但发展效率急剧下降。

  如果我们还提供Java中的一组结构化数据处理和计算类库,那么可以解决此问题:也就是说,享受架构的优势,不会引起开发效率。

  Java下理想数据处理库的特征是什么?我们可以从SQL总结:

  结构数据通常以批处理(以设置的形式出现)出现。为了轻松计算这种类型的数据,有必要提供足够的设置能力。

  如果没有计算库的集合,则只有数组的基本数据类型(相当于集合)(相当于集合),我们需要简单地搜索集合成员,还需要编写四个-five- 将周期语句列入完成。数百行代码。

  SQL提供了丰富的设置操作,例如SUM/COUNT和其他汇总操作。在哪里用于过滤,分组组,还支持基本操作,例如集中,并行和差异。以这种方式编写的代码将要短得多。

  拥有集合计算能力足以吗?如果我们为Java开发了一批集合计算库,我们可以实现SQL的效果吗?

  不那么简单!

  以过滤操作为例。过滤器通常需要一种条件来保留满足条件的成员。在SQL中,此条件出现在表达式中。例如,在写x> 0的写作时,这意味着保留x> 0计算结果为真实成员。此表达式x> 0在执行此语句之前未计算,而是为每个成员集合计算。,该表达式本质上是一个函数,是当前集合成员作为参数的函数。在涉及操作的情况下,它等于使用由表达式定义的函数作为were的参数。

  这种写作方式的术语称为lambda语法或功能语言。

  如果没有lambda语法,我们通常必须暂时定义函数。该代码将非常麻烦,容易命名冲突。

  lambda语法在SQL中使用,该语法不在过滤和分组操作中。它也可以在不必要的方案中使用,例如计算列,这大大简化了代码。

  结构数据不是一个简单的单个值,而是字段记录。

  我们发现,当在SQL表达参数中引用字段时,在大多数情况下,可以直接使用字段名称,而不是该字段属于字段的记录。只有在同一名称的多个部分中,我们才能被命名(或别名)来区分。

  尽管新版本的Java也已经开始支持lambda语法,但它只能将当前记录作为参数传递到由lambda语法定义的此函数中,然后在编写计算公式时编写此记录。例如,计算金额时单位价格的数量,如果使用当前成员的参数,则以“x。单价x。号”的形式编写。在SQL中,您可以更直观地以“单位价格”而写入。

  SQL还可以很好地支持动态数据结构。

  在结构化数据的计算中,返回值通常是结构数据,数据结构和操作的结果是相关的。在代码编写之前无法准备。因此,您需要支持动态数据结构功能。

  SQL中的任何选择语句都将生成新的数据结构。您可以将删除字段添加到代码中,而无需提前定义结构(类)。Java语言不好。在代码汇编阶段,应当定义使用的结构(类)。原则上,在执行过程中不能动态生成新的结构。

  从以前的分析中,我们可以得出结论:Java本身不适合语言处理语言。它的Lambda机制不支持功能3,并且作为汇编语言,它无法实现功能4。

  实际上,前面提到的lambda语法不适合使用编译语言。编译器无法确定该参数位置的表达式是否应在现场计算表达式的值,然后将整个表达式编译为功能传输。您需要设计更多符号符号来区分。解释语言没有这个问题。首先计算参数的表达,或者遍历聚会成员。它可以由函数本身确定。

  SQL确实是一种解释语言。

  流是Java8作为官方启动的结构化数据处理类库,但不符合上述要求。它没有专业的结构数据类型,缺乏许多重要的结构数据计算功能,不是一种解释语言,不支持动态数据类型,Lambda语法的接口很复杂。

  Kotlin是Java生态系统的一部分。它在流的基础上略有改进,还提供结构数据计算类型。但是,由于结构化数据计算函数不足,因此不是一种解释语言。接口很复杂,并且仍然不是理想的结构化数据计算类库。

  Scala提供了丰富的结构数据计算功能,但是编译语言的特征也使其无法成为理想的结构化数据计算库。

  那么,Java生态学还可以使用什么?

  Collectioner Spl。

  SPL通过Java对程序语言的解释来解释。它具有丰富的结构数据计算类库,简单的lambda语法以及方便且易于使用的动态数据结构。这是Java下理想的结构化处理库。

  SPL提供了专业的结构数据类型,即订购表。例如SQL的数据表,前言表是批处理记录的集合。它具有结构化数据类型的一般功能。该示例如下所述。

  分析源数据并生成前言:

  根据列表从原始序列表生成新的顺序表:

  计算列:

  重命名的现场:

  根据序列号使用字段:

  订单表被重命名(左图)

  序言支持所有结构化计算函数,计算结果也是前言表,而不是诸如MAP之类的数据类型。例如,组摘要的结果继续进行结构化数据处理:

  根据顺序表,SPL提供了丰富的结构数据计算功能,例如过滤,分类,分组,DE -RE剥夺,计算列表,关联,子问题,收集计算,有序计算等。这些功能具有这些功能强大的计算功能。它可以独立计算而无需进行硬编码的帮助:

  组合查询:

  种类:

  概括:

  内部连接:

  SPL支持简单的lambda语法。它不需要定义函数名称和函数主体。它可以用作函数参数作为函数,例如过滤:

  修改业务逻辑时,您无需重建功能。只需修改表达式:

  SPL是一种解释语言。使用参数表达式时,不需要明确定义参数类型,使lambda接口更加容易。例如,计算正方形和谐,您可以在总和过程中计算正方形,您可以直观地写入:

  与SQL类似,在计算单个表时,SPL语法还直接支持字段名称:

  SPL是一种可解释的语言。自然支持动态数据结构,并且可以根据计算结果结构动态生成新的序列表。它特别适合计算,例如计算列,组摘要和关联。

  或直接计算相关计算的结果:

  更复杂的计算通常分为多个步骤,每个中间结果的数据结构几乎是不同的。SPL支持动态数据结构,而不必首先定义这些中间结果的结构。例如,根据客户还款形式,一年,计算前10名客户的每月::

  SQL解释器也在SPL中实现,可以直接从SQL执行。从基本的位置,加入或什至可以支持的小组可以支持:

  作为一种专业的结构化数据处理语言,SPL不仅涵盖了SQL的所有计算能力,而且在语言方面也具有更大的优势:

  重建是SQL的基本特征,即支持数据以设置的形式参与操作。但是,SQL的离散性非常差。所有收集成员都必须参与整个操作,并且不能免于收藏。诸如Java之类的先进语言支持良好的离散性,并且数组成员可以单独运行。

  但是,更彻底的集成需要离散性来支持它。收集成员可以免于该集合,并与其他数据一起形成新的操作集合。

  SPL具有SQL的集成和Java的离散性,可以实现更彻底的集成。

  例如,很容易表达SPL中的“集合”,该集合适用于分组后的计算。

  1 = t(“ Score.CSV”)。组(主题)2 = A2。(?。rank(score).pselect@a(?<= 10))3 = a1。(?(a3(#))。(名称))。isect()spl序言的字段可以存储记录或记录集,以便对象引用可以直观地表达关系关系,即使有更多的关系,也可以直观地表达它。例如,在下面找到男性员工员工观看:

  订单计算是离散和集成的典型组合产品。成员的顺序仅在集合中有意义。这需要集成。计算有序计算时,必须将每个成员与相邻成员区分开。EssencesPL既集成又离散,并且自然支持以有序的方式计算。

  具体而言,SPL可以根据绝对位置参考成员。例如,订单3订单可以写为订单(3),并且记录1、3和5记录可以写为订单([1,3,5])。

  SPL还可以根据相对位置参考成员。例如,计算上一个记录中每个记录金额的每个记录的数量:orders.derive(数量/金额[-1] -1)

  SPL还可以使用#表示当前记录的序列号。

  大量强大的结构数据计算函数最初是一件好事,但这使得与类似功能的功能难以区分。它改善了学习难度。

  SPL提供了唯一的功能选项语法。相似的功能可以共享一个函数名称,并且仅使用函数选项来区分差异。例如,选择功能的基本功能是过滤。如果仅过滤合格的记录,则仅将选项@1:

  当数据量大时,请使用并行计算来提高性能。它只需要更改为option @m:

  对于排序数据,请使用双点方法快速过滤。您可以使用@B:

  函数选项也可以组合,例如:

  结构化计算函数的参数通常非常复杂。例如,SQL需要使用各种关键字将语句参数分为多个组,但这将使用许多关键字,这也使语句结构统一。

  SPL支持层次参数。通过分割,逗号和殖民地将参数分为三层。

  普通的lambda语法不仅必须指示表达式(即以函数形式的参数),而且还完全定义了表达式本身的参数,否则它在数学形式中不够紧,这会使lambda语法变得麻烦。使用圆形功能选择过滤集合A,只有仅保留夫妻数量的成员。一般形式是:

  这里的表达式为x%2 == 0,表达式的参数为x中的x。X代表集合A的成员,即循环变量。

  SPL使用固定符号?表示循环变量。当参数是一个循环变量时,无需定义参数。在spl中,可以简介上面的lambda语法:a.Select(?%2 == 0)

  普通的lambda语法必须定义表达式中使用的每个参数。除了循环变量外,常用参数还具有循环计数。如果lambda也定义了周期计数,则代码更加麻烦。

  SPL使用固定符号#表示循环计数变量。例如,使用函数SELCT过滤集合A,仅保留序列号的成员。SPL可以写:A.选择(#%2 == 0)

  相对位置通常出现在困难的计算中,并且很难计算相对位置本身。当使用相对位置时,参数的写入将非常麻烦。

  SPL使用固定形式[序列号]来表示相对位置:

  1 = t(“ orders.txt”) /订单序言表2 = a1.groups(日期(日期):y,月(日期):m; sum; sum(金额):AMT) /年度年度每月3 = =a2.derive(amt /amt [-1]:lrr,amt [-1:1] .avg():ma) /计算上一个时期的平均值和移动性作为Java解释的脚本语言。Java应用程序。

  简单的句子可以直接执行像SQL:

  复杂的计算可以存储到脚本文件中以存储过程

  将脚本放在Java程序之外。一方面,可以减少代码耦合。另一方面,解释的特征也可以支持热开关。当业务逻辑更改时,可以立即将脚本生效。整个应用程序。此机制特别适合在微服务体系结构中编写业务处理逻辑。

  单击以关注,并首次了解华为云新技术?

  原始:https://juejin.cn/post/7096680045657194532