请帮忙看看如下这样的业务场景MySQL+Java(MyBatis)如何去操作效率会最高?

有这样一个需求,有一个定时任务,会去从ElasticSearch中聚合出数据,假定数据只有一个name属性,此时会将这一批数据存到MySQL中,存到MySQL中的数据会额外添加几个字段,比如address等,用户通过前端页面可以更新address字段(name不允许更新)。

所以问题就是每次定时任务,ES中查出来一批数据,需要和现有的MySQL中的进行对比,如果某个name已经存在了,那么不更新,如果发现有新的name,那么插入MySQL,如何操作效率会最高呢?

最简单的一种,就是遍历ES查出来的所有数据,每一条用name去MySQL里查一下,如果select不出来,那么将这一条存到list中,最后遍历完成之后将整个list批量插入MySQL。

有其他方法吗?或者上述方法存在问题?(特别在大数据量情况下,OOM之类的)
使用的是MyBatis和MySQL。

阅读 1.5k
1 个回答

这个要看你的实时性要求有多高,我以前也弄过类似的,我用 redis 的 hash 结构,一分钟之内在 redis 内做更新,每隔一分钟会把数据更新进数据库,采用批量更新,批量插入,在每分钟 100 万的量可以承受住

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题