轻量级数据外置提速查询实践
传统交易(TP)数据库不擅长分析计算,而专业 OLAP 数据库又过于沉重,经常需要集群,不仅成本高昂,也会使系统架构变得更复杂。
把不再变化的历史数据存储成轻量级的 esProc SPL 列存文件,可以利用 SPL 语言的强大计算能力,跑出远超传统数据库的查询性能。esProc SPL 很轻,直接嵌入应用就可以运行,在实现数据外置提速的同时,也不会让整个系统架构变得很复杂:
这里准备了一套使用 SPL 外置数据提速查询的实践方法:
其中涉及的实例都是传统数据库很头疼的性能问题,比如 COUNT DISTINCT,外键 JOIN,大主子表关联(包括 EXISTS),枚举字段条件过滤(包括 IN)等,助您突破数据库查询性能瓶颈!
开始之前,需要做些准备工作。
【这里】有例子数据 csv 文件和建表 SQL,模拟某公司线下订单和电子商务的部分数据。需要在 MYSQL 数据库中建表,并导入 csv 数据。
例子表结构是这样的:
事件表 events,电商网站用户的操作事件,一千万行,包括字段:
字段名称 |
说明 |
类型 |
备注 |
event_id |
事件号 |
整数 |
主键 |
user_id |
用户号 |
整数 |
大约 100 万个 |
event_time |
时间 |
日期时间 |
2025 年内 |
event_type |
事件类型 |
整数 |
1 表示 login,2 表示 view,…,7 表示 confirm |
订单表 orders,存储线下订单数据,一千万行:
字段名称 |
说明 |
类型 |
备注 |
order_id |
订单号 |
整数 |
主键 |
customer_id |
客户号 |
整数 |
|
employee_id |
雇员号 |
整数 |
|
employee_name |
雇员名 |
字符串 |
|
order_date |
日期 |
日期 |
2024 年内 |
shipper_id |
运货商号 |
整数 |
|
shipping_fee |
运货费 |
数值 |
|
shipping_address |
运货地址 |
字符串 |
订单名细表 details,存储线下订单明细数据,三千万行:
字段名称 |
说明 |
类型 |
备注 |
order_id |
订单号 |
整数 |
主键 |
product_id |
产品号 |
整数 |
主键 |
quantity |
数量 |
整数 |
|
price |
单价 |
数值 |
客户表 customer,存储线下客户数据,数据量较小:
字段名称 |
说明 |
类型 |
备注 |
customer_id |
客户号 |
整数 |
主键 |
customer_name |
客户名 |
字符串 |
|
city_id |
城市号 |
整数 |
城市表 city,存储线下客户所在城市数据,数据量较小:
字段名称 |
说明 |
类型 |
备注 |
city_id |
城市号 |
整数 |
主键 |
city_name |
城市名 |
字符串 |
|
state_id |
州号 |
整数 |
州表 state,存储线下客户所在州数据,数据量较小:
字段名称 |
说明 |
类型 |
备注 |
state_id |
州号 |
整数 |
主键 |
state_name |
州名 |
字符串 |
运货商表 shipper,存储线下运货商数据,数据量较小:
字段名称 |
说明 |
类型 |
备注 |
shipper_id |
运货商号 |
整数 |
主键 |
shipper_name |
运货商名 |
字符串 |
下载 esProc https://www.esproc.com/download-esproc/,用标准版就可以了。
安装 esProc 后,试一下 IDE 是否可以正常访问数据库。我们以 MYSQL 数据库为例,先把 MYSQL 的 JDBC 放到目录 "[安装目录]\common\jdbc",这是 esProc 的类路径之一:
在 esProc 中建立 MYSQL 数据源,菜单栏选择 Tool-Connect to Data Source,配置 MySQL 标准 JDBC 连接,名字是 speed:
返回到数据源界面并连接刚才配置的数据源,如果数据源名变成粉色,说明配置成功。
在 IDE 中新建脚本,编写 SPL 语句,连接数据库,通过 SQL 加载 orders 表的数据。
SPL 代码 1:
A |
|
1 |
=connect("speed") |
2 |
=A1.query@x("select * from orders limit 100") |
按 ctrl-F9 或单击执行按钮后,点击 A2 格,在右边可以看到 100 条数据。
SPL 代码写在单元格中,可以直接用格名作为临时变量。
如果遇到问题可以查阅教程和函数参考:
教程地址:https://d.raqsoft.com.cn:6443/esproc/tutorial/
函数参考:https://d.raqsoft.com.cn:6443/esproc/func/
实践使用的测试环境是 VMWARE 虚拟机,8 核 CPU,8G 内存,SSD 硬盘,操作系统是 Win11,MYSQL 版本是 8.0,esProc SPL 是标准版。