我正在开发一个字典应用程序并使用许多外部源来收集数据。 这些数据仅在第一次从这些来源收集,然后我将其保存到我的数据库并从他们的数据库中获取。
我面临的问题是,像set,cut,put等词有100个含义和许多例子。将所有这些数据保存到mysql大约需要10秒钟。我正在使用mybatis来保存数据。正因为如此,响应时间越来越紧张。如果没有这个数据库,我可以在400-500ms内获得响应,如果我在从源文件中获取后直接显示数据。
我正在尝试找到一种在后台持久保存数据的方法。我正在使用MVC模式,因此dao层是独立的。
在dao层中使用线程作为解决方案是一个好主意吗?或者我应该使用像Kafka这样的消息传递工具来发送消息以在后台保留给定的单词?我还可以做些什么?
注意:我现在更喜欢MySQL作为数据库,稍后可能会使用redis进行缓存。
答案 0 :(得分:0)
我对问题的全球回答+进一步评论:
请勿使用Mybatis foreach 批量插入。相反,您应使用 ExecutorType Reuse
或Batch
(Read the documentation)在Java迭代中对要存储的对象列表执行语句。
对于事务,在主mybatis-config xml中,配置环境:
session = sessionFactory.openSession(); session.commit(); session.rollback();
此外,您可以让Web应用程序发送响应,而新线程会花时间存储数据。