• 作者:老汪软件技巧
  • 发表时间:2023-12-31 07:00
  • 浏览量:

与相比,SPL支持更多的数据类型,包括复杂的结构化数据。这使得开发人员能够更灵活地存储和检索数据,而不受限于传统的表格结构。

2.3 强大的查询功能

SPL引入了更强大的查询语言,使得开发人员能够执行更复杂的查询操作。这包括联接、聚合和过滤数据,以满足各种数据分析需求。

3. 未来展望

Java数据嵌入引擎的进化还在继续。未来,我们可以期待更多的创新,包括更强大的分布式数据管理和更多云集成选项。SPL将继续演变,以满足不断变化的应用需求。

在总结上述内容时,Java数据嵌入引擎已经从进化到SPL,为开发人员提供了更强大、更灵活的数据管理工具。这一进化反映了技术的不断演进,以满足现代应用程序的需求。开发人员可以期待在未来看到更多创新,从而更好地处理和管理数据。

适应常规基本应用场景

架构简单,其核心虽然是 C 语言开发的,但封装得比较好,对外呈现为一个小巧的 Jar 包,能方便地集成在 Java 应用中。 提供了 JDBC 接口,可以被 Java 调用:

= .("jdbc::::"); st = .();st.(" from d:/ex1"); rs = st.(" * FROM ");

提供了标准的 SQL 语法,常规的数据处理和计算都没有问题。特别地, 已经能支持窗口函数,可以方便地实现很多组内运算,计算能力比其他内嵌数据库更强。

x, y, ()OVER (ORDER BY y) AS FROM t0 ORDER BY x;

a, b, (b, '.') OVER (ORDER BY a ROWS 1 AND 1 ) AS FROM t1;

面对复杂场景尚有不足

的优点亮眼,但对于复杂应用场景时还是有些缺点。

Java 应用可能处理的数据源多种多样,比如 csv 文件、RDB、Excel、,但 只处理了简单情况,即对 csv 等文本文件提供了直接可用的命令行加载程序:

. --csv --skip 1 -- temp /Users//.csv tab1

对于其他大部分数据源, 都没有提供方便的接口,只能硬写代码加载数据,需要多次调用命令行,整个过程很繁琐,时效性也差。

以加载 RDB 数据源为例,一般的做法是先用 Java 执行命令行,把 RDB 库表转为 csv;再用 JDBC 访问 ,创建表结构;之后用 Java 执行命令行,将 csv 文件导入 ;最后为新表建索引,以提高性能。这个方法比较死板,如果想灵活定义表结构和表名,或通过计算确定加载的数据,代码就更难写了。

类似地,对于其他数据源, 也不能直接加载,同样要通过繁琐地转换过程才可以。

SQL 接近自然语言,学习门槛低,容易实现简单的计算,但不擅长复杂的计算,比如复杂的集合计算、有序计算、关联计算、多步骤计算。 采用 SQL 语句做计算,SQL 优点和缺点都会继承下来,勉强实现这些复杂计算的话,代码会显得繁琐难懂。

比如,某只股票最长的上涨天数,SQL 要这样写:

max()-1from ( count(*) ( sum() over(order by ) ( ,case when price>lag(price) over(order by ) then 0 else 1 end from AAPL) )group by )

这也不单是 的难题,事实上,由于集合化不彻底、缺乏序号、缺乏对象引用等原因,其他 SQL 数据库也不擅长这些运算。

业务逻辑由结构化数据计算和流程控制组成, 支持 SQL,具有结构化数据计算能力,但 没有提供存储过程,不具备独立的流程控制能力,也就不能实现一般的业务逻辑,通常要利用 Java 主程序的判断和循环语句。由于 Java 没有专业的结构化数据对象来承载 数据表和记录,转换过程麻烦,处理过程不畅,开发效率不高。

前面提过, 内核是 C 程序,虽然可以被集成到 Java 应用中,但并不能和 Java 无缝集成,和 Java 主程序交换数据时要经过耗时的转换才能完成,在涉及数据量较大或交互频繁时性能就会明显不足。同样因为内核是 C 程序, 会在一定程度上破坏 Java 架构的一致性和健壮性。

对于 Java 应用来讲,原生在 JVM 上的 SPL 是更好的选择。

SPL全面支持各种数据源

SPL 是 JVM 下开源的嵌入数据引擎,架构简单,可直接加载数据源,可以通过 JDBC 接口被 Java 集成调用,并方便地进行后续计算。

SPL 架构简单,无须独立服务,只要引入 SPL 的 Jar 包,就可以部署在 Java 环境中。

直接加载数据源,代码简短,过程简单,时效性强。比如加载 :

=("orcl")

=A1.query@x(" ,,,, from order by ")

>env(,A2)

对于 擅长加载的 csv 文件,SPL 也可以直接加载,使用内置函数而不是外部命令行,稳定且效率高,代码更简短:

=T("/Users//.csv")

多种外部数据源。除了 RDB 和 csv,SPL 还直接支持 txt\xls 等文件,、、redis、、Kafka、 等 NoSQL,以及 XML、 Json 等多层数据。比如,将 HDSF 里的文件加载到内存:

=(;"hdfs://192.168.0.8:9000")

=(A1,"/user/.csv":"GBK")

=A2.@t()

=(A1)

>env(,A4)

JDBC 接口可以方便地集成。加载的数据量一般比较大,通常在应用的初始阶段运行一次,只须将上面的加载过程存为 SPL 脚本文件,在 Java 中以存储过程的形式引用脚本文件名:

Class.("com..jdbc."); conn =.("jdbc::local://"); = conn.("{call init()}");.(); SPL的计算能力更强大

SPL 提供了丰富的计算函数,可以轻松实现日常计算。SPL 支持多种高级语法,大量的日期函数和字符串函数,很多用 SQL 难以表达的计算,用 SPL 都可以轻松实现,包括复杂的有序计算、集合计算、分步计算、关联计算,以及带流程控制的业务逻辑。

丰富的计算函数。SPL 可以轻松实现各类日常计算:

=.find()

// 多键值查找

=.(>1000 && like(,\"*S*\"))

// 模糊查询

= .sort(,-)

// 排序

= .id()

// 去重

=join(:O,; :E,EId)

.new(O., O.,O.,E.Name,E.,E.Dept)

// 关联

标准 SQL 语法。SPL 也提供了 SQL-92 标准的语法,比如分组汇总:

$ year() y,month() m, sum() s,count(1) c

from {}

Where >=? and