Java 内存中用于将对象写入数据库的批处理缓冲区

Java 内存中用于将对象写入数据库的批处理缓冲区,java,database,concurrency,buffer,java-8,Java,Database,Concurrency,Buffer,Java 8,我想从一个web站点收集一些用户操作,在大多数页面访问中,它会向跟踪服务器发送一个AJAX请求,然后跟踪服务器依次提取相关的数据结构并将其写入一些数据库表。 由于网站在重载下运行(尤其是在圣诞节之前),因此相关页面的视图很多,这导致对跟踪服务器的请求很多 如果有请求,我立即将数据写入数据库,我肯定会遇到麻烦,例如 即使使用连接池,我也会很快用完未分配的连接,并且池队列中的等待时间将开始越来越多 对数据库的并发访问可能会导致表锁定问题,因为所有数据都写入同一个表,并且查询时间将开始增加 然而,

我想从一个web站点收集一些用户操作,在大多数页面访问中,它会向跟踪服务器发送一个AJAX请求,然后跟踪服务器依次提取相关的数据结构并将其写入一些数据库表。 由于网站在重载下运行(尤其是在圣诞节之前),因此相关页面的视图很多,这导致对跟踪服务器的请求很多

如果有请求,我立即将数据写入数据库,我肯定会遇到麻烦,例如

  • 即使使用连接池,我也会很快用完未分配的连接,并且池队列中的等待时间将开始越来越多
  • 对数据库的并发访问可能会导致表锁定问题,因为所有数据都写入同一个表,并且查询时间将开始增加
然而,优点是我不需要关心同步

因此,我希望收集一批数据(例如100个对象),并将它们发送到数据库以减轻一些负载。这解决了上述问题,因为

  • 只有一个连接
  • 在数据库表级别没有并发性
问题是,我现在需要正确地同步底层缓冲区机制。由于跟踪服务器和数据库运行在同一台服务器上,这将大大提高总体性能

我正在寻找一些Java 8类或库,它可以以FIFO方式缓冲对象,并在达到某个最小大小时自动将它们写入数据库。 库应该能够尽可能快速地处理并发性,因为两个项目可能同时存储到缓存中

您知道这样一个库,我可以自己连接持久层,或者只使用JDBC

我最好的猜测是我需要一点
,例如,与定期轮询队列长度的计时器结合使用。有人有更好的建议吗?

如果队列中有东西,您还应该有一种定期刷新的机制,例如每5秒刷新一次。这对于测试/开发时间来说非常方便。当然:)它还可以防止数据在队列中堆积