我正在开发一个 MVC spring web 应用程序,我想将用户的操作(他们点击的内容等)存储在数据库中以进行离线分析。假设一个动作是一个元组(长 userId、长 actionId、日期时间戳)。我对用户的行为并不特别感兴趣,但我以此为例。
我期望很多(不同的)用户按分钟(秒)执行很多操作。因此,处理时间至关重要。
在我当前的实现中,我定义了一个带有连接池的数据源来将操作存储在数据库中。我从控制器的请求方法调用服务,该服务调用将操作保存到数据库中的 DAO。
这种实现效率不高,因为它等待来自控制器的调用一直到数据库完成以将响应返回给用户。因此,我正在考虑将这种“动作保存”包装到一个线程中,以便对用户的响应更快。线程不需要完成即可获得响应。
我在这些大规模、并发和时间关键的应用程序方面没有经验。因此,任何反馈/评论都会非常有帮助。
现在我的问题是:
你会如何设计这样的系统?你会实现一个服务,然后将它包装到一个在每个动作中调用的线程中吗?
我应该使用什么?我检查了 spring Batch 和这个 JobLauncher,但我不确定它是否适合我。
当控制器、服务、DAO 和数据源级别存在并发访问时会发生什么?
更一般地说,设计此类应用程序的最佳实践是什么?
感谢您的帮助!