OpenMLDB vs Redis 内存占用量测试报告

1. 背景

OpenMLDB 是一款开源的高性能全内存 SQL 数据库,在时序数据存储、实时特征计算等方面都有很多创新和优化。Redis 是业界最流行的内存存储数据库,广泛应用于缓存等高性能在线场景。虽然二者应用场景不尽相同,但作为都是使用内存作为存储介质的数据库,希望通过对相同数据行数下的内存占用量进行测试对比,让客户直观了解二者在内存资源上的消耗占比。

2. 测试环境

本次测试基于物理机部署(40C250G * 3),硬件信息如下。
CPU:Intel® Xeon® CPU E5-2630 v4 @ 2.20GHz
Processor:40 Cores
Memory:250 G
Storage:HDD 7.3T * 4

软件版本具体如下。

对比产品版本部署模式内存统计方式
OpenMLDB0.8.5集群模式(2 tablets)内置命令(show table status
Redis7.2.4单机模式内置命令(info

3. 测试方法

使用 Java 开发测试工具,使用OpenMLDB Java SDK 和 Jedis,分别向 OpenMLDB 和 Redis 插入相同的数据,对比两者的内存占用情况。因为两者支持的数据类型和数据存储方式的不同,实际数据插入方式有一定的差异。因为特征数据都是有时序的,为了尽可能贴近用户的实际使用情况,我们设计了两种测试方式。

3.1 方法一:随机生成数据数据集

设计每一个测试数据集都有 m 个 key作为主键,每个 key 可能有 n 个不同的 value(模拟时序性)。简单起见,这里 value 就只用 1 个字段表示,可以通过配置参数分别控制 key 和 value 字段长度。对应到 OpenMLDB,创建一个包含( key,value)两列数据的测试表,以每一个 key:value 作为一条数据,插入测试表中。对应到 Redis,以每个 key 作为键,以这个 key 对应的多个 value 组合为 zset,存储到 Redis 中。

3.1.1 举例

计划测试 100万(记为1M)个 key,每个 key 对应有 100 条时序数据。则实际存储时,OpenMLDB 中存储的实际数据量为 1M * 100 = 100M,即 1 亿条数据。而 Redis 中,则是存储 1M 个键,每个 key 对应的 value 为包含 100 个成员的 zset。

3.1.2 可配置参数

配置项说明默认值
KEY_LENGTHkey 的长度50
VALUE_LENGTH单个 value 的长度100
VALUE_PER_KEY每个 key 对应的 value 个数5
TOTAL_KEY_NUM想要测试的 key 数量。解析为列表,依次循环进行测试。1000,10000,100000,500000,1000000
REDIS_HOST_PORTredis 的连接参数127.0.0.1:6379
OPENMLDB_TABLE_NAMEOpenMLDB 的测试表名。test_db
ZK_CLUSTERzk 的连接参数127.0.0.1:2181
ZK_PATHzk path/openmldb

3.1.3 操作步骤(复现路径)

  1. 部署 OpenMLDB 和 Redis;
    部署可以使用容器化部署或者使用软件包在物理机上直接部署,经过对比,两者无明显差异。下边以容器化部署为例进行举例描述。
    i. OpenMLDB:

    • 镜像:docker pull 4pdosc/openmldb:0.8.5;
    • 文档:https://openmldb.ai/docs/zh/main/quickstart/openmldb_quickstart.html;
      ii. Redis:
    • 镜像:docker pull redis:7.2.4
    • 文档:https://hub.docker.com/_/redis
  2. 拉取测试代码;

  3. 修改配置

    • 配置文件:src/main/resources/memory.properties [link]

    • 配置说明:必须确认REDIS_HOST_PORT和ZK_CLUSTER配置与实际测试环境一致, 其它配置为测试数据量相关配置,请按需配置。注意:如果数据量过大,测试耗时会比较长。

  4. 运行测试:【github benchmark Readme 中相关路径】

  5. 查看输出结果;

3.2 方法二:使用开源数据集TalkingData

为了使结果更具说服力,覆盖更多的数据类型,也便于复现和对比结果,我们也设计使用开源数据集进行测试。数据集为OpenMLDB 典型案例 TalkingData(广告欺诈检测数据集)。这里使用 TalkingData 的 train 数据集,其获取方式如下:

  • 采样数据:OpenMLDB 中的典型案例使用的采样数据
  • 全量数据:kaggle

方法一略有不同,TalkingData 数据集包含多列数据,包含字符串、数字和时间类型。为了让存储和使用更符合实际应用场景,这里设计使用TalkingData的 ip 列作为 key 进行存储。对应到 OpenMLDB 中,即创建一个和 TalkingData数据集对应的数据表,为 ip 列创建索引(OpenMLDB 默认为第一列创建索引)。对应到 Redis,以 ip 为键,以其他列数据的 JSON 字符串组成 zset 进行存放(TalkingData作为时序数据,存在多行数据具有相同 ip 的情况)。

3.2.1 举例

ipappdeviceoschannelclick_timeis_attributed
925151132452017/11/7 16:140
925181191072017/11/8 2:300
925242131782017/11/8 10:330
925211261282017/11/7 5:500
024142414672017/11/8 15:090
9442163772017/11/8 2:350
944181134392017/11/8 22:210
944121194812017/11/7 23:170
960151194302017/11/8 4:320
973121131782017/11/9 2:350

3.2.2 可配置参数

配置项说明默认值
REDIS_HOST_PORTredis 的连接参数127.0.0.1:6379
ZK_CLUSTERzk 的连接参数127.0.0.1:2181
ZK_PATHzk path/openmldb

3.2.3 操作步骤(复现路径)

  1. 部署 OpenMLDB 和 Redis;
    同 3.1.3,这里不再重复。
  2. 拉取测试代码;
  3. 修改配置
    - 配置文件:src/main/resources/memory.properties [link]
    - 配置说明:
    • 确认REDIS_HOST_PORT和ZK_CLUSTER配置与实际测试环境一致;
    • 修改TALKING_DATASET_PATH(默认使用 resources/data/talking_data_sample.csv);
  4. 获取测试数据文件并放到resources/data目录下,和TALKING_DATASET_PATH配置路径一致;
  5. 运行测试:【github benchmark Readme 中相关路径】
  6. 查看输出结果;

4. 测试结果

4.1 随机数据集测试结果

Key 数据量Memory Size (bytes)Memory Size (bytes)Memory Size (bytes)
RedisOpenMLDBReduction percent*
1k2,769,2801,286,70453.54%
10k19,864,17612,873,42435.19%
100k190,316,568128,754,53632.35%
200k379,537,928257,521,19232.15%
500k944,725,616643,863,92031.85%
1m1,884,007,7361,287,708,72031.65%
2m3,753,713,0642,575,360,29631.39%

file

4.1.1 结论

在前述实验条件下,存储同样数量的数据,OpenMLDB(内存表模式)的内存使用量相对于 Redis 少 30% 以上。

4.2 TalkingData 数据集测试结果

4.2.1 结果

daaset数据量(条)RedisMem(bytes)OpenMLDBMem(bytes)Reduction percent
talking-data-train-sample10,0009,272,3282,339,69974.77%
talking-data-train-sample100,00048,501,28815,624,29074.77%
talking-data-train-sample1,000,000215,323,024105,722,44150.90%
talking-data-train-sample10,000,0001,897,343,9841,008,276,45846.86%
talking-data-train184,903,89034,071,049,86418,513,271,54045.66%

file

4.2.2 结论

得益于 OpenMLDB 对数据的压缩效果,在 TalkingData train数据集上, 截取小批量数据时,OpenMLDB 相对于 Redis的内存使用量,大幅降低 74.77%。随着测试用数据量的增加,因为TalkingData train 数据集本身的特点, 向 Redis 中存储时,存在大量的重复 key 的情况,OpenMLDB 相对于 Redis 的存储优势有所减小。直到将TalkingData train 数据集全部存入数据库,OpenMLDB 相对于 Redis,内存减少 45.66%。

5. 结论

在开源数据集 TalkingData 上,存储相同量级的数据,OpenMLDB 相对于 Redis,内存使用量减少45.66%。即便是 在纯字符串数据集上,OpenMLDB 相对于 Redis 也能减少 30% 以上的内存占用。
由于 OpenMLDB 采用了紧凑的行编码格式,各种数据类型在存储相同数据量时都得到了优化。这种优化不仅在全内存数据库中减少了内存占用,降低了服务成本,而且通过与主流内存数据库 Redis 进行存储测试比较,进一步展示了 OpenMLDB 项目在内存占用和服务总体成本(TCO)中拥有更优势的表现。

相关阅读

  • OpenMLDB 官网:https://openmldb.ai/OpenMLDB
  • OpenMLDB GitHub 主页 https://github.com/4paradigm/OpenMLDB
  • OpenMLDB 文档 https://openmldb.ai/docs/zh/
  • 微信交流群
    file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/789469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker容器之etcd安装

一、etcd介绍 1、etcd是什么 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。 2、etcd特点 简单的接口,通过标准的HTTP API进行调用,也可以使用官方提供的 etcdctl 操作存储的数据。…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…

MMU关闭时Cache的缓存策略是怎样的

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; 在学习MMU章节时&#xff0c;我们发现在页表的entry中&#xff0c;BIT[4:2]指向了MAIR寄存器&#xff0c;该寄存器描述了内存属性&#xff0c;其实就是cache的缓存策略属性&#…

高性价比的挂耳式耳机哪个好用?五大高口碑品牌深度测评严选!

入耳式耳机虽然普及度极高&#xff0c;但其缺点也不容忽视。首先&#xff0c;长时间佩戴可能导致耳朵不适&#xff0c;甚至影响听力健康。其次&#xff0c;入耳式耳机往往因为隔音效果过好&#xff0c;导致用户与周围环境脱节&#xff0c;失去了一定的生活便利性。相比之下&…

《书生·浦语大模型全链路开源开放体系》学习笔记

书生浦语大模型全链路开源开放体系-学习笔记 大模型成为发展通用人工智能的重要途径专用模型通用大模型 书生大模型开源历程InternLM2回归语言建模的本质主要亮点性能全方位提升强大的内生计算能力 从模型到应用典型流程全链条开源开放体系数据数据集获取预训练微调XTuner 评测…

Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即

Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS&#xff0c;Github 代码库更新到 ord 0.17.0 版本&#xff0c;Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙&#xff5c;聚焦「…

c++的学习之路:9、STL简介与string(1)

一、STL 1、什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 也就是说STL就是一个模板&#xff0c;这个模板就是整合了很多库让我们方…

Git常用语句

设置用户名 git config --global user.name "用户名" git config --global user.email "邮箱"查看git用户信息 cat ~/.gitconfig初始化本地库 git initclone指定分支的代码 git clone -b my_branch gitgitlabxxxxxxxxxxxxxxxxxxxxxx.gitpush三件套 gi…

Redis热点Key问题分析与解决

目录 一、问题现象描述 二、什么是热点Key 三、热点Key的危害 3.1 Redis节点负载过高 3.2 Redis集群负载不均 3.3 Redis集群性能下降 3.4 数据不一致 3.5 缓存击穿 四、热点Key产生的原因分析 4.1 热点数据 4.2 业务高峰期 4.3 代码逻辑问题 五、如何检测热点Key …

红队笔记11:pWnOS1.0打靶流程解法2-ssh免密登录-rsa私钥破解-shellshock提权(vulnhub)

目录 开头 1.webmin文件泄露漏洞利用-/etc/passwd/ 2.ssh免密登录-私钥伪随机数碰撞&#xff1a; ssh免密登录原理&#xff1a; prng伪随机数生成ssh rsa 私钥公钥密码库 openssl和openssh的关系&#xff1a; ssh登录报错-解决思路-vv 3.提权-内核提权-shellshock提权 内…

心灵鸡汤人生感悟,简短而有深意的句子

1、你的真心很珍贵&#xff0c;别再不值得的人身上卑微 &#xff0c;爱应该是让你笑的开怀&#xff0c;而不是哭的崩溃。爱必须是温情的依赖&#xff0c;而不是冷漠的伤害。想要找你的人走遍了全世界也能找到你&#xff0c;等到了年华老去也会等着你。 2、大冬天的时候给你送吃…

MySQL安装卸载-Linux

目录 1.概述 2.安装 2.1.上传 2.2.解压 ​​​​​​​2.3.安装 ​​​​​​​2.4.启动服务 ​​​​​​​2.5.查询临时密码 ​​​​​​​2.6.修改临时密码 ​​​​​​​2.7.创建用户 ​​​​​​​2.8.分配权限 ​​​​​​​2.9.重新链接 3.卸载 3.1.停…

【LeetCode热题100】79. 单词搜索(回溯)

一.题目要求 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突

手把手教你VsCode正确解决vue3EslintprettierVetur的配置冲突 VsCode正确解决vue3EslintprettierVetur的配置冲突Eslint文档查看和修改规则&#xff1a;step1&#xff1a;首先快速浏览下规则简要setp2: ctrlF 搜索你要配置规则的英文名&#xff0c;例如attributesetp3: 修改配置…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

LangSmith

文章目录 关于 LangSmith创建 API Key 基本代码使用查看控制台 关于 LangSmith 主页&#xff1a;https://www.langchain.com/langsmith文档&#xff1a;https://docs.smith.langchain.com/LangSmith Walkthrough &#xff1a; https://python.langchain.com/docs/langsmith/wa…

用于自动驾驶,无人驾驶领域的IMU六轴陀螺仪传感器:M-G370

用于自动驾驶,无人驾驶的IMU惯导模块六轴陀螺仪传感器:M-G370。自2020年&#xff0c;自动驾驶,无人驾驶已经迎来新突破&#xff0c;自动驾驶汽车作为道路交通体系的一员&#xff0c;要能做到的就是先判断周边是否有障碍物&#xff0c;自身的行驶是否会对其他交通参与成员产生危…

YOLOV5 改进:更换主干网络为Resnet

1、前言 之前实现了yolov5更换主干网络为MobileNet和vgg网络 本章将继续将yolov5代码进行更改,通过引用官方实现的resnet网络,替换原有的yolov5主干网络 替换的效果如下: 2、resnet 网络结构 测试的代码为官方的resnet34 通过summary 打印的resnet网络结构如下 =======…

京东商品信息采集API商品详情图主图价格抓取接口(测试入口如下)

京东商品信息采集API通常用于抓取京东平台上的商品信息&#xff0c;包括商品详情图、主图、价格等。这样的API通常由专业的数据服务提供商提供&#xff0c;并且需要遵循京东的开放平台政策和相关法规。 请求示例&#xff0c;API接口接入Anzexi58 关于你提到的“测试入口”&…

[蓝桥杯练习]蓝桥王国

单源最短路径问题-dj #include<bits/stdc.h> #define ll long long using namespace std; const int N3e55,M1e65; const ll INF0x7f7f7f7f7f7f7f;//7个7f没问题,INF < INFx struct edge{int to;ll w;edge(int end,ll cost){toend;wcost;} }; struct node{int id;l…