首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >esProc SPL 和 Mongodb 简直是个绝配

esProc SPL 和 Mongodb 简直是个绝配

原创
作者头像
朱迪
发布于 2025-05-21 08:09:34
发布于 2025-05-21 08:09:34
8200
代码可运行
举报
文章被收录于专栏:数据计算数据计算
运行总次数:0
代码可运行

MongoDB 作为主流 NoSQL 数据库,灵活自由的文档结构让它成为处理非结构化数据的利器。但用过的都懂——这玩意儿的计算能力实在不太行。

NoSQL 的代价,就是放弃了 SQL 的简单。举个例子,统计订单金额 Top 10 的客户,SQL 一句 SELECT TOP 10… 就能轻松搞定。但换成 MongoDB 得搬出 $group+$sort+$limit 三件套,跨集合关联更是要拼命地用 $lookup “搭积木”。 更扎心的是像窗口函数这种高阶操作,MongoDB 原生语法根本写不出来!

显然也不合适把数据搬到 MySQL 里再算,否则何苦要用 MongoDB。如果在上层用 Java 硬算,那也是会让人“秃头”,划不来。

用 esProc SPL 就简单多了,SPL 可以直接对 MongoDB 的数据进行 SQL-style 的计算!比如,对于一个多层嵌套的订单结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{  "_id": ObjectId("..."),  
  "order_id": "12345",      
  "customer": "C001",    
  "order_date": ISODate("2025-02-12T00:00:00Z"),   
  "order_details": [        
    {
      "product_id": "P001",    
      "product_name": "Laptop", 
      "quantity": 2,           
      "price": 150.00,         
      "total": 300.00          
    },
	...
  ]}

要查询前 10 的大客户和订单金额,用 SPL 来做:

核心只需 A3 这一句,和 SQL 一样简洁。

esProc SPL 甚至允许直接用 SQL 语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select TOP 10 Customer, SUM(Amount) AS TotalAmount from {mongo_shell@d(mongo_open("mongodb://127.0.0.1:27017/mongo"),"orders.find()")}
group by Customer
$select TOP 10 Customer, SUM(Amount) AS TotalAmount from {mongo_shell@d(mongo_open("mongodb://127.0.0.1:27017/mongo"),"orders.find()")}
group by Customer

SPL 对 JSON 嵌套数据还有天然亲和力。MongoDB 里动不动就三层嵌套的文档,用 SPL 的 dot 运算符 A.B.C 直接穿透到底,处理数组时还能用 conj()展开、groups() 分组统计。这种 "你负责存得爽,我负责算得快" 的默契,才叫灵魂伴侣。

对 Java 党来说更是福音。原本操作 MongoDB 要 new 一堆 BasicDBObject,现在引入几个 jar 包,就能执行 SPL 语句(以及上面说的 SQL 语句),扔个脚本文件也能当存储过程用。这相当于把 MongoDB 的接口搞成和关系数据库一样了,,代码直接瘦身 90%——从臃肿的管道操作变成 Class.forName(…).execute(…) 的清爽画风。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Class.forName("com.esproc.jdbc.InternalDriver");
Connection con= DriverManager.getConnection("jdbc:esproc:local://");
Statement st = con.prepareCall("call SPL_Mongo_Example()");
st.execute();
ResultSet rs = st.getResultSet();

这里 SPL_Mongo_Example 就是 SPL 脚本名称(SPL_Mongo_Example.splx),像调用存储过程一样,代码里不再涉及数据处理,简单明了。

美中不足的是,esProc SPL 是 Java 开发的,Python/C++ 等其他语言调用得使用 HTTP 接口,不像 Java 应用那样可以无缝集成。但就冲它让 MongoDB 原地解锁 SQL 计算能力的本事,这点小瑕疵完全可以原谅。毕竟在这个数据为王的时代,能让你少写 200 行聚合代码的工具,值得一句 "真香"。

esProcSPL是开源免费的~~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
查询 MongoDB--SPL 轻量级多源混算实践 4
除了以上常见数据源,还有 NoSQL、MQ 等数据源,其中以 MongoDB 最为常用。我们用 SPL 连接 MongoDB 做计算。
朱迪
2025/08/07
780
SQL 移植--SPL 轻量级多源混算实践 7
应用程序可能要基于不同数据库工作,各种数据库的 SQL 语法大体一致,但仍有些差别,结果就要改造这些 SQL,而这事通常只能手工调整,工作量大还容易出错。
朱迪
2025/08/20
610
有了 SPL,看来用不着 ORM 了
ORM 技术确实简化了基础 CRUD 操作,但面对复杂计算时也有很多局限性。Hibernate 的 HQL 能力明显不足,难以实现动态列运算和多层关联;JOOQ 通过 DSL 提升了灵活性,但分组计算需要多层嵌套,代码量远超原生 SQL。
朱迪
2025/05/16
1080
SQLite 的挑战者
很多小微型应用程序也需要一些数据处理和计算能力,如果集成一个数据库就显得太沉重了,小巧轻量的 SQLite 是个不错的选择,因而被广泛应用。
HelloGitHub
2023/12/14
2030
SQLite 的挑战者
在 RDB 上跑 SQL----SPL 轻量级多源混算实践 1
RDB 是 SPL 的 Native 数据源,SPL 通过 JDBC 与数据库交互,可以动态生成 / 拼接 SQL,也可以为 SQL 传递参数,原来在 Java 等语言与 SQL 结合的场景都可以使用 SPL 来完成。
朱迪
2025/07/17
940
一个比 SQLite 还好用的数据库,诞生了!
众所周知,很多小微型应用程序都需要一些数据处理和计算能力,但如果集成一个数据库就显得太沉重了,正因如此,小巧轻量的 SQLite 才会被广泛应用。
崔庆才
2023/12/13
8520
一个比 SQLite 还好用的数据库,诞生了!
一个比 SQLite 还好用的数据库,诞生了!
众所周知,很多小微型应用程序都需要一些数据处理和计算能力,但如果集成一个数据库就显得太沉重了,正因如此,小巧轻量的 SQLite 才会被广泛应用。
Python编程与实战
2023/12/06
6520
一个比 SQLite 还好用的数据库,诞生了!
开源SPL强化MangoDB计算
MongoDB是NoSQL数据库的典型代表,支持文档结构的存储方式数据存储和使用更为便捷,数据存取效率也很高,但计算能力较弱,实际使用中涉及MongoDB的计算尤其是复杂计算会很麻烦,这就需要具备强计算能力的数据处理引擎与其配合。
石臻臻的杂货铺[同名公众号]
2022/09/09
1.3K0
倍增 Java 程序员的开发效率
Java 是当前应用开发最常用的语言,但是 Java 写数据处理的代码并不简单,比如针对两个字段的分组汇总要写成这样:
朱迪
2024/11/06
1550
从 ES Kafka Mongodb Restful ... 取到 json 之后
json 是个好东西,它可以使用公共的文本形式承载了丰富的结构化数据的信息。现代很多技术都在喜欢使用 json 作为数据传输格式,比如 Elastic Search,Restful,Kafka 等,Mongodb 这类对性能较在意的技术则使用了二进制化的 json。
朱迪
2024/11/21
1480
从 ES Kafka Mongodb Restful ... 取到 json 之后
Java 结构化数据处理开源库 SPL
现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性、可扩展性以及可移植性,比如火热的微服务就是一种典型。这种架构通常要求业务逻辑要在Java程序中实现,而不是像传统应用架构中放在数据库中。
看、未来
2022/05/17
5750
开源 SPL 消灭数以万计的数据库中间表
中间表是数据库中专门存放中间计算结果的数据表,往往是为了前端查询统计更快或更方便而在数据库中建立的汇总表,由于是由原始数据加工而成的中间结果,因此被称为中间表。在某些大型机构中,多年积累出来中间表的数量居然高达数万张,给系统和使用造成了很多麻烦。
朱迪
2025/03/27
1130
开源 SPL 消灭数以万计的数据库中间表
SPL 处理多层 JSON 数据比 DuckDB 方便多了
esProc SPL 处理多层 JSON 数据要比 DuckDB 方便很多,尤其需要保留 JSON 层次以及进行复杂计算时。
朱迪
2025/05/12
1220
面向 Java 程序员的 SQLite 替代品
很多小微型应用程序也需要一些数据处理和计算能力,如果集成一个数据库就显得太沉重了,小巧轻量的 SQLite 是个不错的选择,因而被广泛应用。 不过,SQLite 也有些不方便的地方。SQLite 对外部数据文件及其它数据源的支持力度比较弱又很繁琐;它本身没有存储过程,需要用主程序配合来实现流程,这会导致经常和主程序交换数据(流程走向依赖于数据),效率低且代码麻烦;复杂些的运算用 SQL 也很难写,开发效率较低。
朱迪
2024/11/18
1560
怎样做多数据源的混合计算
早期应用通常只会连接一个数据库,计算也都由数据库完成,基本不存在多数据源混合计算的问题。而现代应用的数据源变得很丰富,同一个应用也可能访问多种数据源,各种 SQL 和 NoSQL 数据库、文本 /XLS、WebService/Restful、Kafka、Hadoop、…。多数据源上的混合计算就是个摆在桌面需要解决的问题了。
朱迪
2023/12/21
2880
怎样用 esProc 计算来自 Restful 的多层 json 数据
接收 Restful 的 json 数据后经常还要计算,用 Java 处理会比较麻烦。用 esProc 会简单很多,不仅能对接 Restful 接口,擅长处理多层数据,还能嵌入 Java 应用使用,可以作为应用内计算引擎使用。
朱迪
2025/04/17
1520
Java 开源 SPL 横空出世!
现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性、可扩展性以及可移植性,比如火热的微服务就是一种典型。这种架构通常要求业务逻辑要在Java程序中实现,而不是像传统应用架构中放在数据库中。
Java技术栈
2021/12/29
8270
这可能是最轻量级的列存技术了
列式存储是提高数据分析计算性能的重要手段。如果数据表的总列数很多而计算涉及的列很少,采用列存就只读取需要的列即可,能够减少硬盘访问量,提高性能。而且,同一列数据往往是同一类型的,甚至有些情况取值都很接近,这样的一批数据连续存储,通常可以实施更高效的数据压缩。
朱迪
2025/03/04
1180
没有RDB也敢揽SQL活的开源金刚钻SPL
SQL语法接近自然语言,上手学习门槛低,再加上先发优势的加成,很快就在数据库厂商和用户间流行开来。经过多年的发展,SQL已经成为应用最广、用户最多、最成熟的结构化数据计算语言。
IT咸鱼
2025/05/20
1260
没有RDB也敢揽SQL活的开源金刚钻SPL
SQL后计算的利器SPL
现代应用开发中,通常只用SQL实现简单的数据存取动作,而主要的计算过程和业务逻辑直接在应用程序中实现,主要原因在于:
灰小猿
2022/09/02
1.3K0
相关推荐
查询 MongoDB--SPL 轻量级多源混算实践 4
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验