如何更好的解决批次更新?
如某一个功能需要添加N个参与人,当用户频繁更新参与人的时候如(增加或删除参与人),如何处理最高效?
我目前的解决办法是先全部删除,然后有新增一遍。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如某一个功能需要添加N个参与人,当用户频繁更新参与人的时候如(增加或删除参与人),如何处理最高效?
我目前的解决办法是先全部删除,然后有新增一遍。。。。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
简单处理的话还是先做diff然后决定删除和新增的部分。此类方法可以封装起来,做业务时还是比较常遇到的。 全删再插入的话部分无改动的操作时间会变动,有些场景下是不想要的。
你好,我来回答一下这个问题哈。
首先,你的先删除再新增的办法肯定是不行的,如果直接把
Mysql
数据库中的某条数据做直接删除,由于数据库是基于逻辑上的空间分配的,这样的操作久了后,数据库会产生大量的不可用区域造成区域浪费,这种直接删除的方法是不推荐的。怎么做比较好呢?
一般会采用软删除的办法,比如添加一个字段命名为
is_valid
,用该字段的取值判断该条数据是否有效。当用户删除该条记录时将该条记录设置为无效即可(做
update
操作)。当用户新增时,首先查询一下目前是否有新增的这一条数据(无论是否有效)。若没有查到,则直接新增(做
insert
操作),反之则证明存在一条这样的数据但是状态是无效的,那么就将该条信息置为有效(做update
操作)。这样子就可以达到你想要的效果了,并且性能并不会很低(对数据库的操作不要放在循环中去做)。
并且还有一种方法可以达到你的需求,可以参考下面的链接:https://juejin.cn/post/698086...
这个要看你数据如何组织使用,说穿了就是该类数据在数据存储、读取等过程中的策略。
这里还涉及到数据量的问题,比如虽然你说数据比较多,更新频繁,但这个频繁估计也是有量级的,是按天、按小时、按分钟、按秒,不同的需求,相应的优化策略其实是不一样的。
比如一个很大的(起码几十M字节起的)数据要按秒频繁更新,这个就是比较重的负载,但如果变成几K,负载就轻很多,所以要根据数据特性来选择策略。
对于类似你这样的情况,最终其实用户是希望高效获取最后情况,这样其实安全高效的方法是不停的写入需要的数据,用一个指针类型来指向最新有效数据,这样的好处是比较高效,不容易掉数据,还可以追溯变化历史,不过比较占空间。
大致的过程是:读取数据到内存,在内存中更新,写到数据库新的点,把新的记录点作为有效点,这样的好处是少了删除过程,会快很多。