Java嵌入数据引擎:从SQLite到SPL

SQLite批量插入效率 SQLite对于大批量插入数据时的效率提升方法 阅读详情

可以在 Java 应用中嵌入的数据引擎看起来比较丰富,但其实并不容易选择。Redis 计算能力很差,只适合简单查询的场景。Spark 架构复杂沉重,部署维护很是麻烦。H2\HSQLDB\Derby 等内嵌数据库倒是架构简单,但计算能力又不足,连基本的窗口函数都不支持。

相比之下,SQLite 在架构性和计算能力上取得了较好的平衡,是应用较广的 Java 嵌入数据引擎。

SQLite适应常规基本应用场景

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

Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:");
Statement st = connection.createStatement();
st.execute("restore from d:/ex1");
ResultSet rs = st.executeQuery("SELECT * FROM orders");

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

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

SELECT a, b, group_concat(b, '.') OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS group_concat FROM t1;

SQLite面对复杂场景尚有不足

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

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

.import --csv --skip 1 --schema temp /Users/scudata/somedata.csv tab1

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

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

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

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

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

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

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

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

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

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

SPL全面支持各种数据源

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

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

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

<
Java 嵌入数据引擎:从 SQLite 到 SPL_java sqlite 插入大量数据(4) 除了RDB和csv,SPL还直接支持txt\xls等文件,MongoDB、Hadoop、redis、ElasticSearch、Kafka、Cassandra等NoSQL,以及WebService XML、Restful Json等多层数据。。 阅读详情

相关推荐

并发案例:Java 操作 SQLite 数据库踩坑记

SQLite 数据库基础 SQLite 是一个 C 语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的 SQL 数据库引擎。SQLite 是什么呢? Sqlite 官网 是这样描述它的: SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full...

本博客纯属个人网络笔记,如对阁下有用,甚喜;否则,关掉即可,不喜勿喷。专心写代码,不做键盘侠! 2569

解决linux 2.5G网卡驱动问题

解决linux 2.5G网卡驱动问题 关键词:2.5G网卡驱动,ubuntu,安装,2.5G Ethernet LINUX driver,Realtek网卡驱动 由于2.5G网卡较新,各linux发行版的通用驱动已不适用,新装的系统会出现无法上网问题,由于国内网络环境去Realtek官网很难下载到驱动文件,故本文提供github上的2.5G Ethernet LINUX driver r8125 for kernel up to 5.6的版本驱动文件r8125-9.003.05.tar.bz2各位可以自

poorguy_aos的博客 1万+

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2566

别再死记硬背了!用‘瞬时极性法’5分钟搞定三极管反馈电路类型判断

本文介绍了使用‘瞬时极性法’快速判断三极管反馈电路类型的高效技巧。通过假设输入信号变化并追踪传递路径,该方法能准确区分正负反馈、电压电流反馈、串联并联反馈及交直流反馈,避免传统死记硬背的弊端,显著提升电路分析效率。

weixin_42524708的博客 186

手把手教你用支付宝密钥工具生成RSA2密钥对(含Windows/Mac操作截图)

本文详细介绍了如何使用支付宝密钥工具生成RSA2密钥对,包括Windows和Mac平台的操作步骤与截图。从工具下载、安装到密钥生成、配置支付宝平台,再到开发环境集成实战,手把手教你完成支付宝支付接口对接。特别强调密钥安全管理和最佳实践,帮助开发者避免常见安全隐患。

mongodb5scout的博客 260

ABAP Open SQL 数据拷贝导致 SAPSQL_DATA_LOSS:从报错机理到稳妥修复

数据类型与长度不合规。一旦在Open SQL的无损赋值检查里被发现,系统宁可中止也不会偷偷替你截断。把变量声明对齐到字典、在需要时明确表达转换/截断意图、写法上避免落入高危的操作数位置,再配合ATC的预防性检查,既能解决你这次的ST22Dump,也能把同类问题消灭在萌芽状态。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 432

MATLAB算法实战应用案例精讲-【数模应用】校准曲线(附MATLAB、python和R语言代码实现)

模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。

qq_36130719的博客 559

模拟一个基站和一个移动台之间的信号传播

同样使用时间序列和上述参数计算出反射径信号的信号强度。根据时间序列和上述参数,计算出直射径信号的信号强度。该信号被视为一个简单的正弦波信号,其频率是2Hz。:时间序列,从0.1秒开始,每隔0.0001秒采样一次,直到12秒。:设置坐标轴范围,横轴范围为0到12秒,纵轴范围为-0.5到0.5。:移动台移动的速度。:移动台距离基站的初始距离。:基站到反射墙的距离。假设基站到反射墙的距离为15米。:绘制直射径信号、反射径信号和合成信号的波形图。:添加标签,标注每条曲线对应的含义。表示反射径信号的颜色为绿色,

Fanjufei的博客 292

Python 爬虫进阶:淘宝热卖商品价格走势抓取、反爬与分析全流程

在大数据时代,数据是商业决策的重要依据。电商平台上的商品价格走势,对于商家调整经营策略、消费者选择购买时机都有着关键的参考价值。本篇文章将深入解析如何利用 Python 爬虫抓取淘宝热卖商品的价格走势数据,并应对其中的反爬机制,最后对数据进行分析,带领大家领略 Python 爬虫在电商领域的强大应用。

yansideyucsdn的博客 1060

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: Java:流式IO流和文件
下一篇: Java性能优化:Stream如何提高遍历集合效率?
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值