首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个线程更新同一个数据库会更快吗?

使用多个线程更新同一个数据库会更快吗?
EN

Stack Overflow用户
提问于 2008-09-23 04:36:43
回答 8查看 570关注 0票数 2

我编写了一个Java程序来添加和检索MS Access中的数据。目前,它在3分钟内依次遍历~200 K的insert查询,我认为这是缓慢的。我计划用3-4个线程来重写它,处理成千上万条记录的不同部分。我有一个复合问题:

  • 这将有助于加快程序的速度,因为工作负载被分割了,还是因为线程仍然必须按顺序访问数据库?
  • 你认为什么策略会加速这个过程(除了我已经做过的查询优化,除了使用preparedStatement之外)
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-23 13:13:23

首先,不要使用访问。将数据移动到其他任何地方-- SQL/Server -- MySQL --任何东西。DB引擎在access中(称为Jet)速度慢得可怜。这不是一个真正的数据库,而是用于涉及少量数据的个人项目。它一点也不缩放。

第二,线程很少起作用。

JDBC到数据库连接是一个进程范围的资源.所有线程共享一个连接。

“但是等等,”您说,“我将在每个线程中创建一个唯一的连接对象。”

高贵,但有时注定要失败。为什么?JVM和数据库之间的操作系统处理可能涉及一个套接字,该套接字是一个进程范围的资源,由所有线程共享。

如果您有一个跨所有线程共享的OS级I/O资源,那么您将不会看到多大的改进。在这种情况下,ODBC连接是一个瓶颈。另一种是。

票数 2
EN

Stack Overflow用户

发布于 2008-09-23 04:39:46

  1. 我也不知道。不知道更多的瓶颈是什么,我不能评论它是否会使它更快。如果数据库是限制器,那么有可能会有更多线程减慢它的速度。
  2. 我会将access数据库转储到一个平面文件中,然后批量加载该文件。大容量加载允许比运行多个insert查询要快得多的优化。
票数 3
EN

Stack Overflow用户

发布于 2008-09-23 04:43:00

使用MSAccess作为后端数据库,如果从MSAccess内部导入,可能会获得更好的插入性能。另一个选项(因为您正在使用Java)是使用像杰克丝这样的库直接操作MDB文件(如果您是从头开始创建它,并且没有其他并发用户-- MS Access处理得不太好)。

如果这些都不是适合您的解决方案,那么我建议在Java应用程序上使用分析器,看看它是否在等待数据库的大部分时间(在这种情况下,添加线程可能不会有多大帮助),或者它正在进行处理和并行化会有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/119157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档