【发布时间】:2013-03-15 14:40:38
【问题描述】:
我正在开发一个 MVC spring web 应用程序,我想将我的用户的操作(他们点击的内容等)存储在数据库中以供离线分析。假设一个动作是一个元组(长 userId、长 actionId、日期时间戳)。我对用户的行为并不特别感兴趣,但我以此为例。
我希望很多(不同的)用户按分钟(秒)执行很多操作。因此,处理时间至关重要。
在我当前的实现中,我定义了一个带有连接池的数据源,用于将操作存储在数据库中。我从控制器的请求方法中调用了一个服务,该服务调用了一个 DAO,它将操作保存到数据库中。
这种实现效率不高,因为它等待来自控制器的调用完成并一直到数据库,然后将响应返回给用户。因此,我正在考虑将这种“动作保存”包装到一个线程中,以便对用户的响应更快。线程无需完成即可获得响应。
我对这些大规模、并发和时间关键的应用程序没有经验。因此,任何反馈/cmets 都会非常有帮助。
现在我的问题是:
您将如何设计这样的系统? 你会实现一个服务,然后将它包装到一个线程中,每次操作都会调用它吗?
我应该使用什么? 我检查了 spring Batch 和这个 JobLauncher,但我不确定它是否适合我。
在控制器、服务、DAO 和数据源级别存在并发访问时会发生什么?
更笼统地说,设计此类应用程序的最佳做法是什么?
感谢您的帮助!
【问题讨论】:
-
检查一下,i-develop.be/blog/2010/10/01/…,它异步发送电子邮件,所以你创建任务执行器和服务,并添加所有操作历史
-
记录用户操作以供分析对于当前事务来说并不重要,因此异步存储它是有意义的。触发并忘记进入 jms 队列会有所帮助。
标签: java multithreading spring