V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  CandyMuj  ›  全部回复第 2 页 / 共 2 页
回复总数  25
1  2  
说一下和另一个同行进行讨论后的一个大致可行方案吧,使用最笨的办法,单独使用一张表记录用户观看过的视频(就类似一个观看记录的功能);建立好索引,即使数据量很大速度也不会太慢;
主要问题就是在用户看完所有视频后需要清除之前已看的数据重新记录,在删除的时候需要重建索引,为了不影响用户正常使用,可以使用队列或者 redis 发布订阅来进行异步的删除,这样数据就存在延迟,就可能出现我一边在插入一边在删除的情况,查询也存在问题(本应该从头开始查,但此时还没有删除之前的观看记录,因此实际查询的时候还会剔除之前已观看的)。
解决这个的办法就是在往队列插入删除任务的时候同时记录需要删除的历史观看记录的最大 id,在删除的时候就通过 userid=? and historyId <= ?,如果数据量大可以进一步优化,进行分批删除。
还有个问题就是管理员如果修改了精选视频的排序,是否需要用户实时展示最新的排列顺序,即是否也要清空观看记录的问题或者其他的处理方式(例如,只清除所有用户历史记录中管理员新设置精选的视频 id,让这些视频可以被用户再次查询,此时就不考虑重复问题,因为设置精选就是为了增加曝光量)。如果不考虑这一点的话就不用管了
@awanganddong 数据全都加载到 redis,如果只是记录 id 的话,那么在用 Sql 进行查询的时候可能不太方便的,而且数据还会存在频繁的增删操作,应该还是得以 mysql 为核心的。
@MoYi123 是挺类似的,学习了
@MoYi123 谢谢
@renmu123 多谢,也是挺有用的一个办法,所有类似的事都可以这么处理的,做可以,出了问题我不负责,而且我之前也明确说过会出问题。遇到这种事是需要保存一些证据,尽量让自己少担责。如果遇到通情达理或者懂点技术的上级可能没问题。
如果遇到不懂技术或者也不通情的上级,然后产品或上级给你来一句:“这不就是你该做的事吗?做不了两全其美,那就是你技术有问题。” 这就把我整蒙了啊。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1016 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 20:42 · PVG 04:42 · LAX 12:42 · JFK 15:42
Developed with CodeLauncher
♥ Do have faith in what you're doing.