我编写了一个Java程序来添加和检索MS Access中的数据。目前,它在3分钟内依次遍历~200 K的insert查询,我认为这是缓慢的。我计划用3-4个线程来重写它,处理成千上万条记录的不同部分。我有一个复合问题:
发布于 2008-09-23 13:13:23
首先,不要使用访问。将数据移动到其他任何地方-- SQL/Server -- MySQL --任何东西。DB引擎在access中(称为Jet)速度慢得可怜。这不是一个真正的数据库,而是用于涉及少量数据的个人项目。它一点也不缩放。
第二,线程很少起作用。
JDBC到数据库连接是一个进程范围的资源.所有线程共享一个连接。
“但是等等,”您说,“我将在每个线程中创建一个唯一的连接对象。”
高贵,但有时注定要失败。为什么?JVM和数据库之间的操作系统处理可能涉及一个套接字,该套接字是一个进程范围的资源,由所有线程共享。
如果您有一个跨所有线程共享的OS级I/O资源,那么您将不会看到多大的改进。在这种情况下,ODBC连接是一个瓶颈。另一种是。
发布于 2008-09-23 04:39:46
发布于 2008-09-23 04:43:00
使用MSAccess作为后端数据库,如果从MSAccess内部导入,可能会获得更好的插入性能。另一个选项(因为您正在使用Java)是使用像杰克丝这样的库直接操作MDB文件(如果您是从头开始创建它,并且没有其他并发用户-- MS Access处理得不太好)。
如果这些都不是适合您的解决方案,那么我建议在Java应用程序上使用分析器,看看它是否在等待数据库的大部分时间(在这种情况下,添加线程可能不会有多大帮助),或者它正在进行处理和并行化会有帮助。
https://stackoverflow.com/questions/119157
复制相似问题