我想开发一个程序,从数据库中读取数据并写入文件。 为了获得更好的性能,我想使用多线程。
我计划实施的解决方案基于以下假设:
这些假设能否成为一个好的解决方案? 这个问题是否需要基于多线程的解决方案?
答案 0 :(得分:2)
没有必要从数据库中读取多个线程,因为DBMS需要管理并发问题
确定。所以你想要一个从数据库中读取的线程。
这些假设能否成为一个好的解决方案?这个问题是否需要基于多线程的解决方案?
您的解决方案可行,但正如其他人所述,有关性能改进的问题(如果有的话)。线程程序的工作原理是因为您可以使用计算机上的多处理器(或核心)硬件。在您的情况下,如果线程被数据库阻止或被文件系统阻止,那么性能改进可能是最小的。如果你正在对数据进行大量处理,那么让多个线程处理任务就可以正常工作。
答案 1 :(得分:1)
这更像是一个评论:
首先假设:您应该在https://dba.stackexchange.com/上发布数据库部分。
返回一个简单的搜索: https://dba.stackexchange.com/questions/2918/about-single-threaded-versus-multithreaded-databases-performance - 因此您需要检查您的读取操作是否足够复杂,以及多线程是否满足您对数据库连接的需求。
此外,您的程序似乎是顺序读写。我不认为你甚至需要多线程,除非你想同时在同一个文件上多次写入。
答案 2 :(得分:1)
你应该看看Spring Batch,http://projects.spring.io/spring-batch/,它与JSR 352规范有关。
这个框架带有很好的模式来管理ETL相关的操作,包括多线程处理,数据分区等。