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

时间:2014-11-19 20:03:34

标签: java database concurrency buffer java-8

我想从网站收集一些用户操作,该网站会在大多数页面访问时向跟踪服务器发送AJAX请求,然后提取相关数据结构并将其写入某些数据库表。 由于网站运行负载很重(特别是圣诞节前),因此有很多相关页面的视图,这会导致向跟踪服务器发出许多请求。

如果请求进来并且我立即将数据写入数据库,我肯定会遇到麻烦,例如。

  • 即使使用连接池,我也会很快耗尽未连接的连接,并且池中队列的等待时间将开始增加越来越多
  • 并发访问数据库可能会导致表锁定问题,因为所有数据都写入同一个表并且查询时间将开始增加

然而,优点是我不需要关心同步。

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

  • 只有一个连接
  • 数据库表级别没有并发性

问题是我现在需要正确地同步底层缓冲机制。由于跟踪服务器和数据库在同一台服务器上运行,因此这将大大提高整体性能。

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

你知道这样一个库我可以自己连接我的持久层还是只使用JDBC?

我最好的猜测是我可以使用它的味道 java.util.concurrent.BlockingQueue,例如LinkedBlockingQueue.drainTo(Collection, maxElements)与计时器结合使用,该计时器定期轮询队列的长度。有人有更好的建议吗?

0 个答案:

没有答案