网易首页 > 网易号 > 正文 申请入驻

有没有Java版类似SQLite的开源库?

0
分享至

  能嵌入JAVA代码被调用,又能进行数据计算的开源库,数据库类的有HSQLDB/Derby/H2等。这几个和SQLite的毛病一样,入库过程非常繁琐,要检查表名是否重复、建表结构、读文件、解析字段、插入记录、建索引等,而且没法处理不规则的文本和特殊数据源;至于近年来计算库逐渐被重视的功能--JSON计算,虽然内嵌数据库也是赶鸭子上架,但这几个还不如内嵌数据库。DataFrame类的计算库有Tablesaw/ Joinery/ Morpheus等,在多层JSON(半结构化数据)的读取和计算上,它们比数据库要方便多了,但二维结构化数据的计算又远不如数据库。

  二维结构化数据和多层JSON的计算都足够强,又支持多种数据源,可处理不规则文本的嵌入式JAVA开源库,集算器SPL是个更好的选择。

  JAVA调用SPL只需JDBC接口,基本看一遍就会。比如把tab分隔的文本文件Orders.txt按Client列顺序排序,按Amount列逆序排序:

  
…Class.forName("com.esproc.jdbc.InternalDriver");Connection connection =DriverManager.getConnection("jdbc:esproc:local://");Statement statement = connection.createStatement();Stringstr="=T(\"D:/Orders.txt\").sort(Client,- Amount)";ResultSet result = statement.executeQuery(str);…

  一个T函数就相当于内嵌数据库入库那一整套过程,比那些内嵌的数据库方案要方便多了。

  为了数据库程序员的方便,SPL也支持SQL语句,比如上面的排序可改写为:

  
str="$select* fromd:/Orders.txt orderbyClient, Amount desc"

  再讲讲刚才的sort函数,这样的基本计算函数SPL有上百个,可以直接完成大多数常规计算。下面试举一些:

  
//条件查询str="=T(\"D:/Orders.txt\").select(Amount>1000 && Amount<=3000 && like(Client,\"*S*\"))";//分组汇总str ="=T(\"D:/Orders.txt\").groups(year(OrderDate);sum(Amount))";//关联str ="=join(T (\"D:/Orders.txt\"):O,SellerId; T(\"D:/data/Employees.txt\"):E,EId).new(O.OrderID,O.Client,O.SellerId,O.Amount,O.OrderDate, E.Name,E.Gender,E.Dept)";

  处理过的数据还可以持久化为btx集文件,不仅计算性能高,而且体积更小。比如将两个同构的文本文件写在一个btx里,并去掉两者重复的行:

  
A B 1 =[T("d:/orders1.csv"), T("d:/orders2.csv")].merge@u() /对记录做并集 2 file("d:/fast.btx").export@b(A1) /写入集文件

  之后就可以像普通文件那样使用:

  
str="=T(\"D:/fast.btx\").sort(Client,- Amount)"str="$select * from d:/fast.btx order by Client, Amount desc"

  btx还可以预先进行有序化处理,从而获得更高计算性能,比如进行二分查找,详情参考官网。

  为了降低耦合性,SPL算法可外置于JAVA代码。比如,找出销售额累计占到一半的前n个大客户,并按销售额从大到小排列。先将SPL脚本存为文件bigCustomer.dfx:

  
AB1 = T("D:/data/sales.csv").sort(amount:-1) 取数并逆序排序 2 =A1.cumulate(amount) 计算累计序列 3 =A2.m(-1)/2 最后的累计值即是总和 4 =A2.pselect(~>=A3) 超过一半的位置 5 =A1(to(A4)) 按位置取值

  再在JAVA代码中以存储过程的方式调用脚本文件:

  
…Class.forName("com.esproc.jdbc.InternalDriver");Connection connection =DriverManager.getConnection("jdbc:esproc:local://");Statement statement = connection.createStatement();ResultSet result = statement.executeQuery("call bigCustomer ()");...

  有些运算较复杂,比如涉及分组后计算、有序计算、集合计算,即使用存储过程也难以解决,更别说连存储过程都不支持的内嵌数据库了。 SPL提供了强大的语法和丰富的库函数,可以大幅简化复杂运算逻辑。 比如: 计算某支股票最长的连续上涨天数,SPL只需两行:

  
A B 1 =T("d:/AAPL.xlsx") 读Excel文件,首行为列名 2 =a=0,A1.max(a=if(price>price[-1],a+1,0)) 求最长连续上涨天数

  有些运算代码较长,或有分支和循环,SPL提供了专用的IDE,可以方便地跟踪调试,观察每一步的计算结果

  对于不规则的文本, SPL同样可以处理。简单的比如以双竖线||为分隔符,可用如下SPL语句读取:

  
= file("D:/Orders.txt").import@t(;,"||")

  复杂些的不规则的文本,参考 《未结构化文本的读写和解析处理》(底部原文中查看链接)

  SPL支持多种数据源,除了文本文件,还有Excel、数据库、各类NoSQL、webService、restful等。比如:restful返回多层JSON,用来描述多个员工和员工的多个订单,需要查询出所有价格在500-2000,且客户名包含bro字样的订单。SPL代码如下:

  
A 1 =json(httpfile("http://127.0.0.1:6868/api/getEmpOrders").read()) 2 =A1.conj(Orders) 3 =A2.select(Amount>500 && Amount<=2000 && like@c(Client,"*bro*"))

  集算器SPL是优秀的JAVA嵌入式开源计算库,在结构化计算方面比数据库更强,在多层数据的计算方面比Dataframe更方便,在多数据源支持方面更是全面超过两者。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
75岁郭台铭色心不死,被爆迎来第三春了,老三50岁会提供情绪价值

75岁郭台铭色心不死,被爆迎来第三春了,老三50岁会提供情绪价值

毒舌小红帽
2026-07-12 19:57:21
账号被黑后,微软反手把它永久烧成灰:25年游戏库、儿子照片全没,不补一分钱

账号被黑后,微软反手把它永久烧成灰:25年游戏库、儿子照片全没,不补一分钱

峡谷一级保护废物
2026-07-15 22:55:44
美伊战争性质已变,数万美军成活靶子,伊朗大批导弹已直扑巴林

美伊战争性质已变,数万美军成活靶子,伊朗大批导弹已直扑巴林

心灵得以滋养
2026-07-16 15:02:09
赵露思演出当众喊:我月经来了!大方态度被赞「拒经期羞耻」 秒登热搜

赵露思演出当众喊:我月经来了!大方态度被赞「拒经期羞耻」 秒登热搜

ETtoday星光云
2026-07-15 15:52:05
李嘉格恩师双双离世!一位66岁,一位63,知情者透露死因,太惋惜

李嘉格恩师双双离世!一位66岁,一位63,知情者透露死因,太惋惜

另子维爱读史
2026-07-16 20:15:38
房子降级为“大件消费品”,60万亿目标逼出你的新财路!

房子降级为“大件消费品”,60万亿目标逼出你的新财路!

爱看剧的阿峰
2026-07-16 09:31:06
当你接触的人多了,你会明白如果一个人还在穿5年前的衣服,只说明这几个问题

当你接触的人多了,你会明白如果一个人还在穿5年前的衣服,只说明这几个问题

LULU生活家
2026-05-29 19:07:23
英媒曾爆料:法航母在南海追中国潜艇,结果碰上中国40艘军舰懵了

英媒曾爆料:法航母在南海追中国潜艇,结果碰上中国40艘军舰懵了

流史岁月
2026-07-15 14:30:10
江苏发布任职前公示

江苏发布任职前公示

新浪财经
2026-07-16 17:25:12
30.11亿!《功夫女足》预测票房首降,周星驰的淡定反倒更见格局

30.11亿!《功夫女足》预测票房首降,周星驰的淡定反倒更见格局

星寒新影视
2026-07-16 22:25:15
国内将逐渐停止“肠镜检查”?做完对身体有无影响?医生告诉真相

国内将逐渐停止“肠镜检查”?做完对身体有无影响?医生告诉真相

周哥一影视
2026-07-15 11:18:46
订书机从没想到能在外卖行业发光发热,网友:四面八方都是前方!

订书机从没想到能在外卖行业发光发热,网友:四面八方都是前方!

另子维爱读史
2026-07-16 20:28:24
比亚迪“一家独大”被打破,国内第二大电池巨头跨界造车!

比亚迪“一家独大”被打破,国内第二大电池巨头跨界造车!

音乐时光的娱乐
2026-07-16 14:24:24
逍遥丸可治常见的多种病症,但你会正确服用吗?男女都要学会吃对

逍遥丸可治常见的多种病症,但你会正确服用吗?男女都要学会吃对

本草世界
2026-07-15 12:05:03
缘分!世界杯决赛上演师徒对决 9年前德拉富恩特为斯卡洛尼授课

缘分!世界杯决赛上演师徒对决 9年前德拉富恩特为斯卡洛尼授课

雪狼侃体育
2026-07-16 17:16:40
长沙彭副处长被停职仅2天,3大恶心情况发生,难怪央媒点名批评

长沙彭副处长被停职仅2天,3大恶心情况发生,难怪央媒点名批评

青梅侃史啊
2026-07-16 19:24:32
3千万!山东男篮交易王岚嵚内情曝光,乌戈有想法,辽篮索要550万

3千万!山东男篮交易王岚嵚内情曝光,乌戈有想法,辽篮索要550万

王大发不懂球
2026-07-16 22:07:12
英格兰众名宿“公审”主帅图赫尔,鲁尼:领先后“主动投降”,球队为退守付出代价

英格兰众名宿“公审”主帅图赫尔,鲁尼:领先后“主动投降”,球队为退守付出代价

红星新闻
2026-07-16 08:00:23
死伤335!换伊朗发起斩首,美使馆遭袭?万斯罕见“拆台”特朗普

死伤335!换伊朗发起斩首,美使馆遭袭?万斯罕见“拆台”特朗普

不似少年游
2026-07-17 07:10:03
“有钱人不长你这样!”女孩晒天价矿泉水被嘲,家长认清现实!

“有钱人不长你这样!”女孩晒天价矿泉水被嘲,家长认清现实!

世界圈
2026-07-11 08:39:11
2026-07-17 08:04:49
IT架构师联盟 incentive-icons
IT架构师联盟
IT架构实战分享
844文章数 7672关注度
往期回顾 全部

科技要闻

月之暗面发布Kimi K3,参数规模达2.8万亿

头条要闻

年轻小伙跳河轻生 71岁老奶奶下河救人:体力几乎透支

头条要闻

年轻小伙跳河轻生 71岁老奶奶下河救人:体力几乎透支

体育要闻

逆天6后卫神阵,图赫尔活活坑死英格兰

娱乐要闻

天下无不散宴席!白鹿官宣告别欢娱

财经要闻

韩国股市暴涨暴跌 借钱炒股的散户快疯了

汽车要闻

小鹏MONA L03上市为什么选在慕尼黑?

态度原创

房产
亲子
旅游
家居
公开课

房产要闻

洞察新局 | 2026年海珠置业红盘图鉴

亲子要闻

小儿被吓到了 小儿脏腑娇嫩,神气怯弱,突受惊恐,恐则气下,直伤肾中真阴

旅游要闻

圣吉米尼亚诺随想(旅人心语)

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版