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

李肖遥 2021-12-04 22:05


能嵌入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();String str="=T(\"D:/Orders.txt\").sort(Client,-   Amount)";  ResultSet result =   statement.executeQuery(str);


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


为了数据库程序员的方便,SPL也支持SQL语句,比如上面的排序可改写为: 
str="$select   * from d:/Orders.txt order by Client, 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里,并去掉两者重复的行:



AB
1=[T("d:/orders1.csv"),   T("d:/orders2.csv")].merge@u()/对记录做并集
2file("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:



AB
1= 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只需两行:


AB
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更方便,在多数据源支持方面更是全面超过两者。


重磅!开源SPL交流群成立了

简单好用的SPL开源啦!

为了给感兴趣的小伙伴们提供一个相互交流的平台,

特地开通了交流群(群完全免费,不广告不卖课)

需要进群的朋友,可长按扫描下方二维码

本文感兴趣的朋友,请转到阅读原文去收藏 ^_^


李肖遥 公众号“技术让梦想更伟大”,作者:李肖遥,专注嵌入式,只推荐适合你的博文,干货,技术心得,与君共勉。
评论
  • ​随着GNSS技术的不断进步,各类设备广泛采用该技术实现高精度定位,并推动了其在众多领域的广泛应用。对于关键行业如汽车制造和基础设施,设备的可用性和可靠性被视为基本准则,GNSS作为提供“绝对位置”信息的关键传感器,其稳定性和可靠性尤为关键。为此,中国已为汽车行业制定了详细的GNSS定位规范和行业标准。GNSS模拟器解决方案支持:BD 420005—2015 《北斗/全球卫星导航系统(GNSS)导航单元性能要求及测试方法》BD 420023—2019 《北斗/全球卫星导航系统(GNSS) RTK
    德思特测试测量 2025-02-13 15:35 210浏览
  • 我跟EET的相识,起源于一次国际电子工程会议,当时我是为了去听国际行业趋势和新技术产品,以公司海外英文名报名参加的,在非常不经意间,我在会场的群里发表了少许观点,没想到当场就有很多人加我微信,微信加得手软,有位VIP席位上的美国有排名的科学家(她当时在上海中科院任职)约了与我共进午餐,隔年这位美国科学家还带来了国际合作,我们公司与亚洲最大的技术顾问公司签了战略合作及一些实际合作项目。所以,我挺早就在EET面包板上了,只不过那些年我所在的公司的国际业务繁忙,还要忙着参加美国分公司的筹备,于是下班后
    牛言喵语 2025-02-14 02:15 206浏览
  • 今日,长虹官宣旗下AI TV正式接入DeepSeek,并支持在“深度思考(满血R1)”和“快速响应”两个版本间自由切换,这意味着行业首个能深度思考的AI TV智能体已全面上线。据长虹相关负责人表示,目前,长虹电视用户终端的升级工作已全部结束,所有搭载了沧海智能体的长虹AI TV均已正式接入DeepSeek。通过深度融合DeepSeek的模型能力,持续升级用户的智能交互体验,真正做到让用户一次购买,就能享受产品的持续进化,让电视始终处于不断发展、永无最终形态的进化进程中。据了解,用户无需复杂的操作
    华尔街科技眼 2025-02-13 12:00 524浏览
  • 文:杜杰编辑:孙聪颖如果说2024年是手机的AI元年,三星应该是第一个站出来表示同意的,毕竟在ChatGPT热热闹闹的同时,三星S24是第一批“吃螃蟹”的。在经过了一年的AI试水之后,今年开年三星就率先在海外发布了进一步重构AI的S25,而今天该系列的国行版正式发布,大家最感兴趣的就是这部搭载原生AI的S25在国内的表现到底如何。无感的AI与去年S24小打小闹不同,今年S25在AI方面堪称是全面化、本地化,而从软硬件整合方面来看,显然AI已经成为S25的灵魂。经过这两年各路AI应用的训练,大家或
    华尔街科技眼 2025-02-13 19:30 209浏览
  • 前言最近正好想要做一个定位器,正好可以用嘉立创的STM32F407的板子,还要淘晶驰的串口屏配合NEO-6M做一个GPS实时定位感觉设计到的知识点还是挺全面的,包括串口通信,还要定时器硬件NEO-6M采用串口通信,默认9600(可以通过软件改115200)搭配有源天线,在室外定位很好用淘晶驰很火的串口屏,通过自带的软件可以随便画界面,还是很方便的可通过 USART HMI 软件进行全界面可视化编辑、支持 “C 语言代码” 和 “0 代码” 双模式编程,广泛应用于工业控制、智能家居等领域的智能串口
    小恶魔owo 2025-02-13 23:05 172浏览
  • 文心一言免费对于创业来说是一个很大的机遇,加油!虽然是一个很大的挑战,但是好处还是很大的。文心一言的免费开放为创业者提供了一个低成本甚至零成本使用先进人工智能技术的机会。在以往,创业者若想在项目中融入AI技术,往往需要支付高昂的研发或授权费用。而现在,他们可以直接利用文心一言的强大功能,如语言理解、生成能力、深度搜索等,来构建自己的产品或服务,从而显著降低创业成本。文心一言的全面免费开放为创业者提供了广阔的创新空间。创业者可以基于文心一言开发出各种创新的应用和服务,满足市场的多样化需求。例如,利
    curton 2025-02-14 13:37 186浏览
  • 案例概况ABB能源自动化公司通过宏集Cogent DataHub软件将电厂设施的数据实时传输到公司办公室,实现了OPC隧道/镜像解决方案,在电厂和公司网络之间建立了一个安全、可靠的连接,确保数据传输的高度安全,减少入侵风险。(一)应用背景1.确保电厂与公司办公室之间的安全数据传输ABB能源自动化公司为发电厂提供软件和控制系统,确保发电厂设备在最佳速度和效率下运行。在近期的项目中,ABB发现若能直接在公司办公室监控电厂的运行情况,将大大提高工作效率。于是ABB项目工程师Michele开始寻找一种可
    宏集科技 2025-02-13 16:38 156浏览
  • 《哪吒2》票房破百亿背后的科技密码:解码中国动画产业的技术跃迁与制造底气2024年夏季,国产动画电影《哪吒2》以雷霆之势席卷全球院线,不仅成为中国影史第二部票房突破百亿的现象级作品,更以多项技术突破刷新行业纪录。这些成就背后,不仅是中国动画工业的崛起,更是中国科技创新与高端制造业协同突破的缩影。作为深耕PCB行业多年的捷多邦小编,今天带您从技术视角,解读这场银幕奇迹背后的制造密码。一、从“数字造神”到“算力革命”:动画技术背后的硬核突破《哪吒2》的视觉革命始于AI工业化管道的深度应用。影片中大量
    捷多邦 2025-02-15 17:57 195浏览
  • 文心一言准备免费,说实话,这个是好事情,但是他也会产生非常大的影响,总体来说,对技术的发展还是起到积极的作用。文心新苑为什么要免费呢?无非就是市场的原因,绝对不是文心一言不想利用这个AI赚钱。我分析下原因:1、市场竞争:在人工智能技术高速发展的背景下,各类AI产品层出不穷,市场竞争日益激烈。尤其是DEEPSEEK的出现,真是的非常重大的一个事件,作为同类产品,文心一言非常无奈的被迫的选择全面免费策略,旨在迅速提高用户量,争夺市场份额。通过免费使用,文心一言能够吸引更多用户,形成网络效应,进而提升
    curton 2025-02-14 10:30 276浏览
  • 前言基于 ESP32 设计开发的智能流动环境检测车,旨在克服传统固定监测方式的不足。该车能够在不同环境场景下灵活移动,深入到各个角落进行环境数据采集,大大拓展了环境监测的范围和灵活性。通过集成多种先进的传感器,如 BMP280 用于精确采集温湿度和气压数据,ESP32cam 摄像头能够捕捉直观的图像信息,再结合网络 API 获取的天气预报信息,实现了多源数据的综合采集与分析,为全面、准确地了解环境状况提供了丰富的数据支持。展示整车展示APP展示云端展示功能1.除草(12v割草机)2.环境检测3.
    小恶魔owo 2025-02-13 11:43 468浏览
  • 在电路板Layout设计时,有时候会遇到高速差分信号对间或者对内需要交叉走线的情况,这不仅会导致Layout困难,而且交叉走线导致的via增加和绕线也会影响高速信号的信号质量。鉴于这个问题,一些高速差分信号在标准中就定义了其可以对内或者对间交叉连接,而不影响数据对接。现根据标准定义,将各个高速差分信号是否支持对间或对内翻转列出来,供设计参考。注:1. 列出的高速差分信号不全,后续陆续补充;2. 具体使用时,还需要咨询芯片供应商是否支持。USB2.0不支持对间和对内翻转USB3.0支持对内极性翻转
    durid 2025-02-14 08:23 176浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦