数据缓存,可以尝试RocksDB了

2024-05-13 09:20
文章标签 数据 尝试 缓存 rocksdb

本文主要是介绍数据缓存,可以尝试RocksDB了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
个人IP:shigen

shigen在最近的学习中,接触到了一款新的缓存数据库RocksDB,起因是在学习公司内部的一款产品DRM动态配置,其中的底层就用到了这一款RocksDB数据库。但是我当时想到的就是既然是缓存,为什么不去用redis或者guava呢?为此,借助周末,我研究一下了RocketsDB的相关使用。

首先学习的话,肯定是得借助于RocksDB官网了,官网对于它的解释是:

RocksDB是Facebook的一个实验项目,目的是希望能开发一套能能在服务器压力下,真正发挥高速存储硬件(特别是Flash存储)性能的高效数据库系统。这是一个C++库,允许存储任意长度二进制kv数据。支持原子读写操作。

RocksDB依靠大量灵活的配置,使之能针对不同的生产环境进行调优,包括直接使用内存,使用Flash,使用硬盘或者HDFS。支持使用不同的压缩算法,并且有一套完整的工具供生产和调试使用。

RocksDB大量复用了levedb的代码,并且还借鉴了许多HBase的设计理念。原始代码从leveldb 1.5 上fork出来。同时Rocksdb也借用了一些Facebook之前就有的理念和代码。

巴拉巴拉一大堆,概括起来就是:

  1. 高速存储的数据库
  2. 灵活的配置,可以保存在内存、闪存、Flash、HDFS
  3. 数据二进制压缩

对比起来Redis,顿时觉得这个高级在它的高速存储和灵活的配置了。手已经有点痒痒了,准备开始适用一下了。

参照rocksDB的使用文档,我写了如下的代码进行测试:

结合springboot实现单元测试出现了一点问题:

集合springboot出现的问题

目前还没有找到解决方案。代码如下:

配置:

@Configuration
public class RocksDBConfig {@Value("${rocksdb.path}")private String dbPath;@Bean(destroyMethod = "close")public RocksDB rocksDB() throws Exception {Options options = new Options().setCreateIfMissing(true);return RocksDB.open(options, dbPath);}
}

其中,我的配置如下:

rocksdb:
path: ~/rocksdb_data

Service层:

@Service
public class RocksDBService {@Resourceprivate RocksDB rocksDB;public void putData(String key, String value) throws RocksDBException {rocksDB.put(key.getBytes(), value.getBytes());}public String getData(String key) throws RocksDBException {byte[] valueBytes = rocksDB.get(key.getBytes());return valueBytes != null ? new String(valueBytes) : null;}public void updateData(String key, String value) throws RocksDBException {rocksDB.put(key.getBytes(), value.getBytes());}public void deleteData(String key) throws RocksDBException {rocksDB.delete(key.getBytes());}
}

很奇怪的操作,那就先来看下理论的知识吧。借助GPT,我总结了它和redisguava之间的区别:

特征RocksDBRedisGuava Cache
类型持久化键值存储引擎内存键值存储引擎内存缓存引擎
存储引擎LSM树哈希表内存哈希表
内存使用低(可配置)中等
持久性
事务支持
数据结构键值对键值对键值对
支持数据类型字符串、字节流、字节数组等字符串、哈希、列表、集合、有序集合等任何Java对象
缓存策略不适用(持久化存储)LRU、TTL等LRU、最大条目数、定时过期等
分布式支持可以通过RocksDB的其他工具实现是,通过集群和主从复制
优势适合大规模数据、高吞吐量、低延迟速度快、支持丰富的数据结构轻量级、易于集成、适合单机应用
劣势配置和维护复杂内存受限、不支持持久化不支持持久化、不适合大规模数据

其中,涉及到管理、LSM Tree的原理可以参看文章:RocksDB零基础学习

最后,还是借助工具对于RocksDB和redis进行了一波总结:

  • 如果你需要在本地文件系统中持久化存储大量数据,并且对数据的读写性能有较高的要求,那么可以选择RocksDB。
  • 如果你需要在内存中存储数据,并且对数据的实时性要求较高,或者需要支持复杂的数据结构和功能,那么可以选择Redis。

总结就是:读写性能——RocksDB,实时性——redis

与shigen一起,每天不一样!

这篇关于数据缓存,可以尝试RocksDB了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985305

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元