很多小微型应用程序需要一些数据处理和计算能力,如果集成一个数据库就显得太沉重了,小巧轻量的 SQLite 是个不错的选择,因而被开发者广泛应用。
而现在,用 esProc SPL 可以解决这一切。
esProc 是纯 Java 开发,把 jar 包直接引入到 Java 应用程序中就可以使用了,完全无缝集成。
esProc 也提供了标准 JDBC 接口,就像访问数据库一样可以被 Java 主程序调用,只不过 esProc 使用的查询语言称为 SPL,而不是 SQL。
Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://");
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery("=T(\"Orders.csv\").select(Amount>1000 && like(Client,\"*s*\")
with A as (select client,amount,row_number() over (order by amount) ranknumber from sales)
select client,amount
from (select client,amount,sum(amount) over (order by ranknumber) acc from A)
where acc>(select sum(amount)/2 from sales)
order by amount des
A | B | |
1 | =sales.sort(amount:-1) | / 销售额逆序排序 |
2 | =A1.cumulate(amount) | / 计算累计序列 |
3 | =A2.m(-1)/2 | / 最后的累计即总额 |
4 | =A2.pselect(~>=A3) | / 超过一半的位置 |
5 | =A1(to(A4)) | / 按位置取值 |
Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://");
CallableStatement statement = conn.prepareCall("call queryOrders()");
statement.execute();
不同的是,SPL 脚本是解释执行的,在修改后就会立即生效,不像存储过程一样需要有个编译过程。特别地,这些脚本可以存放在主程序之外,改动时不需要主程序跟随重新编译部署,可以实现业务逻辑的实时热切换。如果是主程序配合数据库的 SQL 才能实现的逻辑就没有这个好处了。
SPL 支持的数据源就太丰富了。
包括各种格式的文本文件,Excel 文件, 关系数据库,NoSQL 数据库,HTTP,Kafka,…,以及 json/xml 格式的数据,反正你听说过和没听说过的数据源都被 esProc 做好了访问接口,只要简单的一两句代码就可以读写。
T("Orders.csv").select(Amount>2000 && Amount<=3000)
Orders=json(httpfile("http://127.0.0.1:6868/api/orders").read())
db=connect("mysql")
db.query("select * from salesR where SellerID=?",10)
...
访问这些外部数据时不需要事先创建表,直接读就行了,非常方便。而且,这些文件和数据源在 SPL 中都是可写的,所以可以用来做数据持久化,这样写出来的数据还可能被其它应用程序访问。
file("Orders.csv").export@t(A2)
file("Orders.xlsx").xlsexport@t(A2)
db.update(NewTable:OldTable)
GitHub:https://github.com/SPLWare/esProc
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。