![](/img/trans.png)
[英]Processing millions of records from mysql in java and store the result in another database
[英]Elegant/efficient way reading millions of records in MySQL Database, Java
我有一个带有〜8.000.000条记录的MySQL数据库。 由于我需要处理它们,因此我使用了BlockingQueue,生产者从数据库中读取该队列并将1000条记录放入队列中。 使用者是从队列中获取记录的处理器。
我正在用Java编写此代码,但是我仍然想弄清楚如何(以一种简洁,优雅的方式)从数据库中读取数据,并在BlockingQueue已满时“挂起”读取数据。 此后,将控制权移交给使用者,直到BlockingQueue中再次有可用的可用位。 从这里开始,生产者应继续从数据库中读取记录。
保持数据库连接开放以便连续读取是否干净/优雅/高效? 还是应该在控件从生产者转移到消费者后,关闭连接,存储到目前为止已读取记录的ID,然后打开连接并从该ID开始读取? 在我看来,后者似乎不太好,因为我的数据库将不得不大量打开/关闭! 但是,我认为前者也不是那么优雅吗?
与持久连接:
持久连接不会带来非持久连接可以做的任何事情。
那么,为什么要使用它们呢?
唯一可能的原因是Performance ,当创建指向MySQL Server的链接的开销很高时,可以使用它们。 这取决于许多因素,例如:
一个总是可以用非持久连接替换持久连接。 它可能会更改脚本的性能,但不会更改其行为!
商用RDBMS可能会根据并发打开的连接数获得许可,因此持久性连接可能会误用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.