RocksDB, 大数据量的去重实践记录
创始人
2025-05-30 15:44:23
0

背景

数据量级

  • 数据数量:十亿级

  • 空间大小:百G级

场景

非实时性去重计算,如果每操作一条数据都要作重复性判断,目前可能以redis等内存数据库解决更佳,但是数据量过大带来直接问题就是,内存占用开销也是相当大的。成本太高,只能寻找非redis等内存数据库的解决方案。

RocksDB

文档

  • 官网:https://rocksdb.org/

  • github: https://github.com/facebook/rocksdb/

简介

RocksDB是 Facebook 开源的一个高性能、持久化、 KV 存储。数据存储采用的是一种叫做LSM-Tree(The Log-Structured Merge-Tree)的数据结果。

LSM是一种分层、有序且面向磁盘的实现,包含了 WAL(Write Ahead Log)、跳表(SkipList)和一个分层的有序表(SSTable,Sorted String Table):

图片来源:https://ranger.uta.edu/~sjiang/pubs/papers/wang14-LSM-SDF.pdf

使用的时候,它的具体文件结构可能如下:

性能

更新动作都是追加的方式,所以性能相对来说非常高。

我目前使用过程中,通过日常性能的观测,一般配置的云盘,顺序读的qps大于50万;

删除的话,删除操作的数据量在亿级的情况下个人感觉并没有那么理想;

随机读的qps,在一些资料中看到能达到20万。

Java代码示例

RocksDB是采用C++编写的,官方提供了Java JNI接口。在实际使用中,提供的有现成的maven依赖。

        org.rocksdbrocksdbjni7.9.2

一个基本使用示例如下:

public class RocksDBDemo {public static void main(String[] args) throws RocksDBException {Options options = new Options();options.setCreateIfMissing(true);// 创建rocksdb 客户端RocksDB rocksDB = RocksDB.open(options, System.getProperty("user.dir") + File.separator + "data");String key = "name";String value = "test";// 放入一条数据rocksDB.put(key.getBytes(), value.getBytes());// 查询数据byte[] bytes = rocksDB.get(key.getBytes());System.out.println(value.equals(new String(bytes)));// 删除数据rocksDB.delete(key.getBytes());rocksDB.close();}
}

rocksdb看着简单,深度使用,个人感觉门槛还是挺高的。仅仅是它的各项属性了解到心中有数,都是需要花费不少时间成本的。

关于rocksdb的的更多内容,建议查看官方文档。

kafka

kafka是一款高性能的消息中间件,分布式流处理平台。

中文文档:https://kafka.apachecn.org/documentation.html

kafka相对rocksdb,了解或者直接使用的人更多,所以不再具体说明了。

生产实践

服务部署模型

实现说明

总体流程中,针对rockesdb处理是数据管理服务部分。将指定数据源的数据加载到rocksdb数据库中来实现去重的目的。

对于去重后的数据,在数据量特别大且要求吞吐量高的场景,需要基于调度的方式,将数据加载到kafka的topic中。让消费端来主动拉取处理,kafka这个场景下的吞吐量根据消息体的不同大小,TPS在数十万到上百万不等.

注意,因为要保证数据在kafka上去重要求。所以每次从rocksdb加载数据到kafka的时候,目标topic应该是一个新的,这样保证数据的隔离。

弊端

上面的解决方案适用场景非常狭窄,主要是针对离线计算的场景下,而且对于kafka消费端的业务场景要求也有很大的局限性。

因此,这个方案仅供参考,若是真有相同需求的朋友,希望有所帮助。另外,可以考虑了解下rocksdb,在某个场景中可以作为一个高性能的嵌入式数据库使用。

相关内容

热门资讯

红黄交响:吕文扬与西红柿炒鸡蛋... 在公司的员工食堂里,吕文扬望着餐盘里色泽黯淡的西红柿炒鸡蛋,筷子迟迟没有落下。作为专注民间美食文化研...
将东方饮食美学带到万米高空 航... 封面新闻记者 张越熙 近几年,航空餐食成为全球旅客接触异国文化“第一触点”成为共识,各大航空公司纷纷...
原来我们都错了,梅菜扣肉竟不是... "什么?梅菜扣肉居然不是湖南菜?!"上周在饭局上听到这句话时,我的筷子都惊掉在了梅菜扣肉碗里。作为吃...
第四届河南早餐大会启幕:胡辣汤... 河南日报社三农全媒体中心记者 李晓辉 2025年5月31日,郑州金水区信万广场人头攒动,香气四溢。第...
千年荔香沁端阳!贵妃荔枝冰淇淋... 端午安康 端午佳节至,荔乡果飘香。当传统粽香弥漫街头巷尾,一款承载着茂名千年荔枝文化基因的创新产品...
粽叶裹深情,五彩绘别离!湖南文... 湖南日报5月31日讯(通讯员 李慧怡 曹依婷 全媒体记者 杨斯涵)“粽叶要卷成漏斗状,米粒才不会漏出...
在家也可以做烤鸡,外焦里嫩实现... 一、深夜放毒:那只让我失眠的烤鸡 上周半夜刷朋友圈,突然看到邻居老王晒了一只金黄油亮的烤鸡,脆皮上还...
四川九寨沟峨眉山旅游报团6日游... 探索四川之美:一次难忘的旅行体验 四川旅游推荐!当地导游-乐乐:185 8335 5758(加他微信...
四川九寨沟峨眉山旅游旅游团5天... 我的四川之旅:九寨沟与峨眉山五天四晚亲测体验 四川旅游推荐!当地导游-乐乐:185 8335 575...
【BBuf的CUDA笔记】九,... 0x0. 背景 随着年纪越来越大,读代码越来越困难,如果你发现看不懂同事...
宋韵文脉与潮流文化结合 这个端... 齐鲁网·闪电新闻5月31日讯 端午假期,各大景区活动多多。在济南清照泉城明水古城,旱地龙舟竞技游戏、...
《Spring Boot 趣味... 斗转星移,无人能及——Spring MVC Spring MVC 简介 MVC 模式是...
熟悉常用的 Linux 操作和... 文章目录前言一、常用命令集合1、cd命令:切换目录1、切换到目录/usr/local2...
文旅盛宴引客来!“中国李乡”信... 盛夏来袭,茂名信宜市三华李大批量成熟上市。5月30日,信宜文旅品牌“530享李季”盛大开启,系列活动...
爱上海|帕梅拉上海过端午 传统... 著名健身博主帕梅拉在上海黄浦过端午。她与上海脱口秀演员Norah一起逛了豫园、和平饭店等地标性景点。...