妹纸求方案点评:分布式下的导入进度条获取,限制同一数据表同一时间只能导入一次

2019-06-28 18:05:15 +08:00
 Breadykid

将将将~ 最近领了个需求,如题

我的想法是: 每次导入用数据表生成唯一 tag,key=tag,value=导入进度,存入 redis,并开启导入线程进行 value=导入进度的更新,获取该导入操作的进度直接拿 key=tag 查找 redis 就行,导入完成后把 redis 里这条 key=tag 删掉。 其中,由于导入时间不可控,ttl 时间需要在更新 value=导入进度时同步更新。。。

蓝吼,领导否定了这个想法,建议用 mysql 建一张表替代 redis 的操作,说是可以解决并发和服务突然挂掉问题。。。 同事建议用 zookeeper 来解决。。。

我不晓得我的这个方案在微服务分布式下会产生神马问题哇?

btw:spring cloud,mysql,redis

2545 次点击
所在节点    程序员
25 条回复
Breadykid
2019-07-01 10:19:30 +08:00
@p2p lz 明明是妹纸本冷!
Breadykid
2019-07-01 10:51:22 +08:00
@luw2007 少年的建议很细致哇~
同事们目前对 redis 方案的疑问集中在,如果微服务挂掉,那这个进度的信息会在该 ttl 时间内一直存在,用户再次对这个数据表进行导入的话就没法导入(需求:同一数据表只能有一个导入任务)导致死锁,虽然 ttl 不设置-1 就总等得到 redis 内该信息删除的一天,但是这个死锁时间太长,用户体验很差。。。
个人是觉得是不是在 redis 的 value 里存储一些进度更新的时间值之类的数据,来解决这个问题。。。
chimagun
2019-07-01 10:58:38 +08:00
怕不是女装大佬 tx
brust
2019-07-01 13:49:11 +08:00
@Breadykid #17
有蓝朋友啊
这问题我不会
luw2007
2019-07-01 14:49:16 +08:00
@Breadykid 大叔一个。
看业务,按照你需要的业务时间设置超时时间, 比如抢锁多长时间,可以设置成具体需要的时间, 比如 1 分钟或者 5 分钟。
这只是记录进度,如果需要保存进度信息。还需要存储到 mysql 中。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/578392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX