6

mongodb 数据全量加载到 redis,怎样提升速度?

 2 years ago
source link: https://www.v2ex.com/t/838648
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

mongodb 数据全量加载到 redis,怎样提升速度?

  leebs · 17 小时 20 分钟前 · 1047 次点击

假设 50w 数据,db 全量查询,再往 redis 里面塞,内存可能会爆。 db 分页查询,需要先 count ,是个耗时的操作,而且分批次插入,最终结果和数据库不一定一致(中间可能有其他删除修改的操作)。

比如布隆过滤器,一般是怎么导入亿级数据的?

17 条回复    2022-03-08 09:53:48 +08:00

hidemyself

hidemyself      17 小时 18 分钟前

cursor ? MySQL 和 PG 是可以的

wqhui

wqhui      16 小时 26 分钟前

分批弄数据进去,导数据过程中发生修改的数据记录一下,这部分数据再刷一下

git00ll

git00ll      13 小时 47 分钟前

你只能做到 redis 与 db 中的某个瞬间的数据是一致的,不可能保证恰好与导入完成时数据一致。考虑看业务上能否改。
另外 redis 写时,开 20-30 线程一起写会快很多。

wellsc

wellsc      13 小时 45 分钟前

为什么要全量导入啊,增量不行吗?你确定所有数据是热数据?

wellsc

wellsc      13 小时 45 分钟前

@git00ll 你是哪个版本的 redis 哦

hopingtop

hopingtop      13 小时 34 分钟前

不严谨回答:如果是 mongodb 全量数据,可以考虑采用 mongodb 的内存引擎 你可以了解一下

git00ll

git00ll      12 小时 41 分钟前

@wellsc 与哪个版本的 redis 没有关系,因为应用与 redis 网络交互 RTT 的存在,单线程写很难达到 1000 次 /s 。

wellsc

wellsc      12 小时 28 分钟前

@git00ll pipeline 用了吗

q1angch0u

q1angch0u      12 小时 1 分钟前

不一直问题可以用线上双写解决吧~

visitant

visitant      10 小时 49 分钟前

可以试试接 mongoDB 的 binlog ,然后写入 redis ,看你的业务能不能接受最终一致了

Mithril

Mithril      10 小时 36 分钟前

确定一个时间点,比如当前时间,然后把所有 update time 在这之前的数据全拉出来塞到 redis 里。可以想办法跳过序列化和反序列化,直接塞进去。
然后你去查在这时间点以后的 change stream ,按顺序拉到 redis 里。MongoDB 已经给你这功能了,就不要再用 binlog 了。
从此以后用 change stream 同步修改,就可以保证大部分时候都是一致的。

bthulu

bthulu      1 小时 55 分钟前

去掉 mongo, 全部采用 redis 就行了

leebs

leebs      49 分钟前

@bthulu 以前的数据怎么导入呢。

leebs

leebs      47 分钟前

@wqhui 按一千条分批查询,MongoDB 查询后面十几万数据很慢,每次读都需要三四秒的时间。

leebs

leebs      21 分钟前

@hidemyself 用 cursor 感觉很慢啊。

leebs

leebs      20 分钟前

@git00ll redis 不是单线程处理事件的嘛,开多少线程也是一个一个处理的吧。

leebs

leebs      19 分钟前

@wellsc 比如要校验数据是否存在,得先把数据全量导入 redis 。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK