一个超越 SQLite 的数据库!

探索免安装的轻量级数据库:SQLite、SQL Server Compact 阅读详情

你好,我是 EarlGrey,喜欢翻译点东西,偶尔写写代码。

点击下方卡片关注我,一起向上进击,提升自我。后台回复关键词“电子书”,送你一份我收藏的电子书合集。

e2d8734256c7f425cf8b9a2f62091383.jpeg

众所周知,很多小微型应用程序都需要一些数据处理和计算能力,但如果集成一个数据库就显得太沉重了,正因如此,小巧轻量的 SQLite 才会被广泛应用。

不过,SQLite 也有些不方便的地方。SQLite 对外部数据文件及其它数据源的支持力度比较弱又很繁琐;它本身没有存储过程,需要用主程序配合来实现流程,这会导致经常和主程序交换数据(流程走向依赖于数据),效率低且代码麻烦;复杂些的运算用 SQL 也很难写,开发效率较低。

为了兼顾轻量易用、高效强大等功能,GitHub 上一款名为 esProc SPL 的国产开源数据库应运而生。

GitHub:https://github.com/SPLWare/esProc

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*\")

对于复杂些的运算需求,SPL 写起来要比 SQL 简单多了。

比如:找出销售额占到一半的前 n 个客户,并按销售额从大到小排序。SQL 写出来是这样的:

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

SQL 很难处理恰好要过线的那条记录,只能换个方法变相实现,即计算销售额从小到大的累计值,反过来找出累计值不在后一半的客户。而且 SQL 要把复杂逻辑写在一句中,即使用了 with 子句(充当中间变量)和窗口函数,仍然要嵌套,技巧性太强,也不好调试。

而 SPL 有更丰富的集合运算,也容易实现分步计算,按自然思维去写就行了:


AB
1=sales.sort(amount:-1)/ 销售额逆序排序
2=A1.cumulate(amount)/ 计算累计序列
3=A2.m(-1)/2/ 最后的累计即总额
4=A2.pselect(~>=A3)/ 超过一半的位置
5=A1(to(A4))/ 按位置取值

和大多数写成文本的程序语言不同,SPL 的代码是写在格子里的,这个帖子 写在格子里的程序语言 里有更多信息。

046bb11468dbbee025d80a25e50c80df.png

SPL 本身就有完善的流程控制语句,像 for 循环,if 分支都不在话下,还支持子程序调用。这相当于提供了存储过程的能力,只用 SPL 就能实现非常复杂的业务逻辑,几乎不再需要主程序来配合了,主程序只是简单调用它就行了,方法也和调用数据库存储过程一样:

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)

SPL 还提供了特有的二进制格式文件,可以获得更高的读写性能。

和 SQLIte 类似,esProc 非常轻量,核心 jar 包只有 15M,完整部署也就 1G 左右,它可以在安卓上流畅运行。不过,有点遗憾的是,esProc 目前只有 Java 版本,集成进非 Java 应用程序时相对麻烦,也不能在没有成熟 JVM 环境的 iOS 上工作。

因其简单易用的特性,自开源以来,esProc 的 GitHub Star 一直在持续上涨,截止目前,已在 GitHub 上累计增长 3600+ Star,成为广受开发者喜爱的又一国产数据库。

GitHub:https://github.com/SPLWare/esProc

本文来源:GithubDaily

***

- EOF -

推荐阅读  点击标题可跳转

1、3 天 5000 星标!支持永久保存微信聊天记录,生成年度报告

2、漂亮极了!分享我收藏的 16 款 VS Code 主题

3、超赞的 Python 编译器,单核提速100倍

4、8 个超赞的可视化工具!

5、Python 3.12 版本有什么变化?


                                           分享、在看、点赞,3连c58aac5544904709dc69f6db01f160c8.gif

使用 SQLite 数据库实现简单的数据管理系统 本项目的目的是利用 SQLite 数据库构建一个简单的数据管理系统。SQLite 是一种轻量级的嵌入式数据库,无需单独的服务器进程,非常适合小型应用程序。本数据管理系统将涵盖基本的数据操作,如数据的插入、查询、更新和删除,适用于需要对少量数据进行简单管理的场景,例如个人信息管理、小型业务数据记录等。本文将首先介绍 SQLite 的核心概念和相关联系,包括其架构和工作原理。接着详细讲解使用 Python 操作 SQLite 数据库的核心算法原理和具体步骤。 阅读详情

相关推荐

Android Studio 使用插件Database Navigation 连接 sqlite数据库

Database Navigation 是一款在 Android Studio 开发环境中非常实用的插件,它主要致力于帮助开发者更便捷、高效地管理和操作数据库,尤其是在 Android 项目涉及到数据库相关开发工作时,能够提升开发体验与效率。

梁辰兴的博客 2556

一个比SQLite还好用的数据库神器!

很多小微型应用程序也需要一些数据处理和计算能力,如果集成一个数据库就显得太沉重了,这种情况下 SQLite 是一个不错的选择,它架构简单,集成方便,可持久化存储数据,并提供 SQL 实现计算能力。但是,对于某些较复杂的场景,SQLite 仍有不足之处。SQLite面对复杂场景的不足数据源支持SQLite 像个数据库,可以对自有的库文件提供较好的支持,但应用程序有时还要处理其它形式的数据,比如文本文...

过往记忆大数据 1337

数据库sqlite3

中型数据库(分布式超大型) ———— mysql(百万级)轻型数据库(嵌入式设备) ———— sqlite(万级)。大型数据库(大型机) —————- Oracle(亿级).schema 查看表的结构。的、零配置的、事务性的 SQL 数据库引擎。

2201_75466937的博客 1387

轻量级数据库H2和SQLite比较

H2和SQLite都是轻量级的关系型数据库,它们都具有以下特点:无需安装,可以直接使用,非常轻便。支持多种操作系统。数据存储在单个文件中,便于备份和迁移。以下是H2和SQLite的比较:性能 SQLite的性能比H2更好,因为它采用了C语言编写的底层代码,而H2使用Java编写的底层代码。因此,在大量数据的情况下,SQLite的性能更高。数据库大小 H2的数据库文件比SQLite的文件稍大,因为H...

dotNET跨平台 3716

SQLite、MySQL、PostgreSQL3个关系数据库之间的对比

数据库是对信息或数据进行逻辑建模的集群。另一方面,数据库管理系统(DBMS)是与数据库交互的计算机程序。DBMS允许你控制对数据库的访问、写入数据、执行查询以及执行与数据库管理相关的任何其他任务。虽然数据库管理系统通常被称为“数据库”,但这两个术语是不可互换的。数据库可以是任何数据集合,而不仅仅是存储在计算机上的数据。相比之下,DBMS特指允许您与数据库交互的软件。所有数据库管理系统都有一个底层模型,该模型对数据的存储和访问方式进行结构化。关系数据库管理系统是一种采用关系数据模型的DBMS。

码觉客的博客 1万+

better.db:轻量级数据库,替代Sqlite3

Better.db 轻量级数据库,替代Sqlite3 安装: npm install better.db 或使用速记 npm i better.db 输入: 用节点require()导入 const better = require ( "better.db" ) ; 创建一个新的数据库 从记忆里 const db = new better . Database ( ":memory:" ) ; //or const db = new better . Database ( ) ; 从本地存储 const db = new better . Database ( "./path/to/database.db" ) ; 例子: let db = new better . Database ( "./users/premium.db" ) ; 保存价值 Data = {

一个比 SQLite 还好用的数据库,诞生了!

众所周知,很多小微型应用程序都需要一些数据处理和计算能力,但如果集成一个数据库就显得太沉重了,正因如此,小巧轻量的 SQLite 才会被广泛应用。不过,SQLite 也有些不方便的地方。SQLite 对外部数据文件及其它数据源的支持力度比较弱又很繁琐;它本身没有存储过程,需要用主程序配合来实现流程,这会导致经常和主程序交换数据(流程走向依赖于数据),效率低且代码麻烦;复杂些的运算用 SQL 也很难...

Python编程与实战的博客 690

针对SQLite的操作数据库的通用类

针对SQLite的操作数据库的封装好的通用类,可直接改后缀名就能使用

超越SQLite!一个颠覆性新数据库震撼登场!

其绝对惊人的功能,使其成为了当今时代业务需求的完美选择,为用户提供了稳定、高效的数据处理服务,满足用户多样化的需求,绝对让人眼前一亮!最重要的是MemFireDB所有功能都是免费的!MemFireDB的性能更加出色,能够为用户提供更稳定、高效的数据处理服务,能够更好地满足当前互联网时代的业务需求,最重要的是他提供的所有功能都是免费的!MemFireDB提供灵活的数据备份计划,支持手动备份、自动备份两种方式,将关键核心的数据备份到第三方存储,为用户的云上数据库提供强有力的保护,保证数据不丢失。

weixin_44957042的博客 960

从门禁到支付:Uniapp+NFC开发避坑指南(支持Mifare Classic)

本文详细介绍了Uniapp结合NFC技术开发门禁与支付系统的实战指南,特别针对Mifare Classic卡片进行深度优化。内容涵盖环境配置、设备兼容性处理、卡片安全机制解析以及高性能读写优化策略,帮助开发者快速实现跨平台的智能硬件交互解决方案。

t1u2v的博客 751

基于PWM的汽车仪表步进电机微步驱动优化实践

本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。

weixin_29169505的博客 512

database.db 文件详解:数据库文件在 SQLite 中的作用与使用

本文解析了Python项目中自动生成的database.db文件的作用和使用方法。该文件是SQLite数据库的默认存储文件,包含表结构、数据记录和索引等信息。文章详细介绍了SQLite的存储原理、查看和操作方法(命令行与可视化工具)、备份策略及常见问题解决方案,并强调数据库管理需严谨,避免数据丢失。掌握.db文件的特性能帮助开发者更高效地进行项目调试和数据库维护。

聚焦学生开发者需求,分享课设毕设项目实战经验、系统开发技巧、数据库设计规范及文档排版实用方法。 2400

MATLAB实战:蓝牙GFSK调制解调全流程解析(附误码率优化技巧)

本文深入解析了蓝牙GFSK调制解调在MATLAB中的全流程实现,包括高斯滤波器设计、调制解调技术及误码率优化技巧。通过实战案例和代码示例,帮助工程师提升蓝牙通信系统的性能表现,特别是在降低误码率方面的有效方法。

weixin_29046035的博客 277

轻型数据库SQLite结合PHP的开发

轻型数据库SQLite结合PHP的开发SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源

.NET博文收藏 549

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南

本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案

Despacito0o的博客 2630

从触觉到视觉:GelSight传感器的工作原理与实战应用指南

本文深入解析了GelSight光学触觉传感器的核心工作原理,它通过将物理接触转化为视觉图像,为机器人提供了高精度的触觉感知。文章详细介绍了其在工业微观缺陷检测、机器人灵巧操作等领域的实战应用,并提供了从系统搭建到算法开发的完整指南,帮助工程师将这一前沿技术落地于实际项目。

solidity8miner的博客 939

DB SQLITE

DB Browser 的整体布局相当灵活。视图菜单下可控制各个模块是否显示;默认的每个区域都可以通过拖拽,改变他们的位置及大小.对屏幕布局进行的更改将在会话中保留。要回到初始布局: View \ Windows Layout \ Reset Windows Layout [Alt + 0]下面按照初始的界面布局描述。如下图,划分为5个区域.

qq_36143377的博客 1万+

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

SQLite附加数据库(ATTACH DATABASE)

在开发过程中,经常需要多个表之间进行操作。对于同一个数据库来说,相互之间连接表,容易实现。但是对于不同的数据库,使用Sqlite该怎么实现呢? 针对这种需要不同数据库之间的表连接操作的情况,SQLite提供了一种将外部数据库附加到当前数据库连接的机制——ATTACH DATABASE。 这里我们有俩张测试表,company和userinfo ,其中表Company放在Study.db库中,表...

HobbyFull的博客 7847

生成模型实战 | StyleGAN详解与实现

StyleGAN 能够生成非常高分辨率人脸图像的关键在于,在增加分辨率的步骤中逐步增加生成网络和判别网络的复杂性,以便在每一步中,两个模型都可以很好地完成任务。我们学习了如何通过确保每个分辨率的特征由一个独立的输入(称为风格向量)来控制,从而操纵生成图像的风格,以及如何通过将图像之间的风格进行交换来操作不同图像的风格。

盼小辉丶的博客 7607

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1212

【Laravel】连接 sqlite 数据库 Database [xxx] not exist

.env 文件 DB_CONNECTION=sqlite VIRSH_SQLITE_DATABASE=database_path('database.sqlite') config/database.php 文件 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('VIRSH_SQLITE_DATABASE...

星辰大海 2831

数学建模模型总结

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

browser插入数据 db_SQLite Database Browser数据库查看器图文使用教程

这几天在写一个程序,需要用到SQLITE,但是对于SQLITE不熟悉,在网上找了一个SQLITE查看器这个查看器可以新建SQLITE文件数据库,可以建立表索引,写SQL语句,编辑表数据不过这个查看器支持的SQLITE数据库引擎版本低了一点,先介绍一下SQLite Database Browser 2.0是怎么用的?主界面将SQLITE的db文件拖进去软件就可以了,不用点击“打开”按钮新建数据库由于...

weixin_40001245的博客 1130

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用SQLite打开本地*.db文件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34082695的博客 3万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Django 5.0 来了!
下一篇: Gitpod:让编码更高效的理想工具
codingpy
博客等级 码龄11年 1870粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值