【发布时间】:2014-03-17 09:14:02
【问题描述】:
我有一个 MySQL 数据库,其中有大约 8.000.000 条记录。因为我需要处理它们,所以我使用 BlockingQueue 作为 Producer 从数据库中读取数据并将 1000 条记录放入队列中。 Consumer 是从队列中获取记录的处理器。
我正在用 Java 编写此代码,但是我一直想弄清楚如何(以一种干净、优雅的方式)从我的数据库中读取数据,并在 BlockingQueue 已满时“暂停”读取。在此之后,控制权将交给消费者,直到 BlockingQueue 中再次有可用的空闲点。从这里开始,生产者应该继续从数据库中读取记录。
保持我的数据库连接打开以使其持续读取是否干净/优雅/高效?或者,一旦控制权从生产者转移到消费者,关闭连接,存储到目前为止读取的记录的 id,然后打开连接并从该 id 开始读取?后者在我看来不是很好,因为我的数据库将不得不打开/关闭很多!但是,我认为前者也没有那么优雅?
【问题讨论】:
-
在读出记录时,我发现我的记忆力迅速下降!为了阻止这种情况,我需要在我的计算机关闭之前关闭 SQL Server。我已经阅读了一些与此问题类似的帖子(例如,link),但这不起作用。我设置了 FetchSize 但不起作用。
标签: java mysql database-connection blockingqueue