这可能是最轻量级的列存技术了

简介: 列式存储通过减少硬盘访问量和高效压缩,显著提升数据分析性能。然而,传统列存技术如Hadoop、MPP数据库等架构复杂、成本高。esProc的ctx文件提供了一种轻量级列存解决方案,支持高效的数据压缩、分段并行计算及简单易用的SPL编程语言。ctx文件适用于大数据量存储,读取性能优于ORC和Parquet,且无需复杂环境配置,适合嵌入Java应用,特别适用于报表缓存场景。SPL已开源免费,欢迎了解。

列式存储是提高数据分析计算性能的重要手段。如果数据表的总列数很多而计算涉及的列很少,采用列存就只读取需要的列即可,能够减少硬盘访问量,提高性能。而且,同一列数据往往是同一类型的,甚至有些情况取值都很接近,这样的一批数据连续存储,通常可以实施更高效的数据压缩。

但是,在实际应用中搭建一个列式数据仓库太复杂了。常用的轻量级数据库,比如 Mysql 都不支持列存。列式存储大都存在于大型 MPP 数据库中。Hadoop 也提供了列存文件格式,比如 parquet、orc 等,但仍要借助复杂的环境(Hadoop 或 spark)才能工作,架构过于沉重,虽然软件本身是开源免费的,但整体应用成本还是很高。

那么,有没有不需要繁复架构的轻量级列存技术?

开源计算引擎 esProc 的 ctx 文件就是一种很轻的列存技术。esProc 提供了简捷的编程语言 SPL 用于操作 ctx 文件。

用 SPL 可以把来自各种数据源的数据转成 ctx 实现列存,也可以把 ctx 转成其他数据源。以常见的 csv 和数据库为例:
QQ_1741073686637.png

列存文件的使用相对行存文件要稍复杂些,需要事先确定数据结构并创建相应的索引区才能写入数据,但在 SPL 支持下,这些代码仍然非常简单。

列存通常用于存储较大数据量,所以这些示例代码都使用了游标,ctx 也可以很好地支持以游标方式流式读写数据。

SPL 还为 ctx 提供了强大的计算能力,支持分段并行:
QQ_1741073737171.png

cursor 函数加上 @m 选项,就表示对 ctx 分段进行多线程并行计算,非常简单易用。

代码中文件对象 file("orders.ctx") 可以定义一次反复使用。不过游标只能计算一次,每次计算都要定义新的游标。

分段是并行计算的前提。业界普遍采用的分块列存方案,只有在总数据量很大时才有性能上的意义,一般要达到单表十亿记录、空间约在百 G 左右。规模较小的数据量就不容易获得并行计算的性能提升。ctx 采用了自创的倍增分段方案,很小的数据量且在不断追加的过程中,都可以获得良好的分段效果,保证并行计算的性能提升。

除了倍增分段,ctx 还内置了很多高性能存储方案。比如列存很难实现索引,而 ctx 使用独有的序号机制克服了这个困难。再如 ctx 利用有序存储机制,让同一列的相同值连续存放,进一步提高了列存压缩效率。

经过对比测试,ctx 读取性能几乎比 ORC 快了一倍,更是远远超过了 Parquet:

详细的测试过程和结论参见乾学院:esProc 组表,ORC,Parquet 的对比。

esProc SPL 非常轻,集成开发环境 IDE 即装即用,无需像 Hadoop 那样配置各种环境,更不需要集群:

esProc 提供了标准 JDBC 驱动,使得 ctx 很容易嵌入应用,只要将 esProc 核心 jar 包和配置文件放到 Java 应用的类路径中,ctx 文件和编写好的 SPL 脚本(比如 compute.splx)放到配置好的目录就可以调用了:

…
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
st =con.prepareCall("call computeCtx()");
st.execute();
ResultSet set = st.getResultSet();

对于相同的计算逻辑,SPL 代码量会比 Java 少很多。可以用 SPL 脚本实现 ctx 相关的各种复杂计算,前端应用只要接收计算结果然后展现出来就可以了。

esProc 核心 jar 包非常小,只有不到 100MB。

在报表类应用中,非常适合用 ctx 来缓存报表数据,能够获得专业列存数仓的计算性能,也不必安装配置 MPP 或 Hadoop/spark 这种重量级的产品。
SPL已开源免费,欢迎前往开源社区乾学院了解更多!
源码地址

相关文章
|
监控 Linux 芯片
Watchdog是什么?为什么要在系统初始化时候关闭什么是 watchdog?
Watchdog是什么?为什么要在系统初始化时候关闭什么是 watchdog?
982 0
|
消息中间件 存储 监控
Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时
Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时
1005 0
Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时
|
程序员
程序员的自我修养—链接、装载与库--书签目录PDF
程序员的自我修养—链接、装载与库--书签目录PDF
1658 0
|
2月前
|
人工智能 编解码 自然语言处理
2025年数字人平台如何选?这份排名与推荐指南帮你精准定位
在2025年数字人爆发之际,必火AI凭借全链路智能创作平台脱颖而出。其以极速克隆、AI文案、智能剪辑三大引擎,实现从素材到成片的一站式生成,支持4K超清、40语种、情感化音色,大幅降低制作门槛与成本。评测显示,该平台在效率、质量与易用性上全面领先,广泛适用于短视频营销、个人IP、企业培训及跨境出海等场景,成为企业与创作者数字化转型的优选工具。
408 4
|
人工智能 NoSQL C语言
程序又崩了?一招精准定位段错误!
在C/C++开发中,程序崩溃(如段错误)是常见问题,但快速定位崩溃原因却颇具挑战。本文介绍了一种精准定位崩溃问题的方法:通过捕获异常信号(如SIGSEGV),结合`backtrace()`和`abi::__cxa_demangle()`打印堆栈信息,从而快速定位问题接口。相比增加日志或生成coredump文件,此方法更高效且无副作用。实现时需注意编译选项(如`-O0 -g -rdynamic`)以保留符号信息,并处理C++名称修饰问题。
457 0
|
11月前
|
JSON 监控 API
京东商品列表 API 接口系列(京东 API)
京东商品列表API接口为开发者提供获取店铺内商品详细信息的功能,包括名称、价格、库存、图片、ID、销量等。通过HTTP GET请求并包含必要参数(如店铺ID、API密钥),可获取JSON格式的商品列表数据,适用于展示、库存管理、价格监控等场景。示例代码展示了使用Python调用该接口的方法,返回的数据包含状态码、商品总数、分页信息及具体商品详情。
|
12月前
|
Linux 数据库 开发工具
从零到一,如何轻松上手 TDengine:一位计算机小白的学习笔记
对于许多初学者来说,面对虚拟机、Linux 系统和数据库集群时,总有一种“无从下手”的感觉。但事实上,任何技术的掌握都离不开勇于尝试和不断学习。本文作者刘艺博在这篇文章中分享了他从零开始学习 TDengine 的亲身经历,无论是从安装环境、操作系统的适应,到如何轻松应对海量时序数据,他都以自己独特的视角为我们提供了宝贵的经验。无论你是否有技术背景,都可以通过这篇文章,轻松跨越学习的障碍,开启属于自己的数据分析之旅。
379 1
|
11月前
|
传感器 安全 物联网
时序数据库TDengine + MQTT :车联网时序数据库如何高效接入
现代新能源汽车配备大量传感器,产生海量数据需上报至车联网平台。TDengine作为时序大数据平台,支持MQTT协议,可轻松实现车辆状态、位置及用户行为数据的实时采集与分析,提升驾驶体验和安全保障。通过简单的Web界面配置,无需编写代码,即可完成从MQTT到TDengine的数据接入。整个过程包括注册TDengine Cloud、创建数据库、安装代理插件、新增数据源、配置解析规则等步骤,快速实现数据同步。
393 2
|
存储 人工智能 安全
数据治理:强化数据安全与隐私保护的基石
在当今这个数字化时代,数据已成为推动社会进步和企业发展的核心驱动力。从个人消费习惯到企业运营策略,从政府决策支持到科研创新突破,数据无处不在,其价值不言而喻。然而,随着数据量的爆炸性增长和流通范围的扩大,数据安全与隐私保护问题也日益凸显,成为制约数据价值最大化利用的重要瓶颈。因此,构建完善的数据治理体系,特别是强化数据安全与隐私保护,成为了时代发展的必然要求。
1262 5
|
运维 监控 搜索推荐
Hologres的应用场景有哪些?
【8月更文挑战第24天】Hologres的应用场景有哪些?
322 2

热门文章

最新文章