Java 大型数据库插入

2024-04-24

我有一个数据库,需要在其中插入批量数据(一次大约 500k 条记录)。我正在使用 derby 进行测试,发现这么多记录的插入时间约为 10-15 分钟(我正在用 Java 进行批量插入)。

这次看起来是否很慢(在普通笔记本电脑上工作)?有没有办法加快速度?

thanks,

Jeff


这个时间看起来完全合理,并且与我观察到的时间一致。如果你想让它运行得更快,你需要使用批量插入选项并禁用安全功能:

  • 使用PreparedStatements和批量5,000到10,000条记录,除非它必须是一个事务
  • 使用 DBMS 中的批量加载选项
  • 暂时禁用插入的完整性检查
  • 暂时禁用索引或删除索引并在插入后重新创建它们
  • 禁用事务日志记录并随后重新启用。

编辑:数据库事务受到磁盘 I/O 的限制,在笔记本电脑和大多数硬盘上,重要的数字是磁盘的寻道时间。

笔记本电脑的磁盘速度往往相当慢,转速为 5400 rpm。在此速度下,寻道时间约为 5 毫秒。如果我们假设每条记录一次查找(在大多数情况下过高估计),则插入所有行将需要 40 分钟 (500000 * 5 毫秒)。现在,缓存机制和排序机制的使用在一定程度上减少了这种情况,但你可以看到问题来自哪里。

我(当然)把问题过于简单化了,但是你可以明白我的意思;期望数据库以与顺序批量 I/O 相同的速度执行是不合理的。您必须对记录应用某种索引,这需要时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 大型数据库插入 的相关文章

随机推荐

  • 如何使用 Express 在 NodeJS 中的 GET 请求中发出 GET 请求

    基本上 我试图在回调 GET 方法中从 Facebook 获取访问令牌 下面是我的代码 getAccessToken根本没有被调用 正确的实施方法是什么 app get fbcallback function req res var cod
  • React - setState 不更新值

    我正在尝试使用 DidMount 中的 localStorage 值更新状态 但它没有更新 type Props type State id evaluation string class Evaluation extends Compon
  • 在c#中查找编译类的源文件

    我正在寻找一组已编译的 net 程序集中特定类的关联源文件 e g MyAsm Namespace Foo gt C Source foo cs MyAsm Namespace Bar gt C Source Code MoreCode C
  • 如何使用 Google Apps 脚本限制文件的复制/下载/打印访问

    有没有人找到一种方法来限制使用谷歌应用程序脚本复制 下载 打印电子表格的访问权限 背景信息 我创建了一个使用 setShareableByEditors false 限制编辑者共享权限的脚本 唯一的问题是编辑者仍然可以轻松地复制电子表格 然
  • Rails 4 link_to 更大的静态图像

    我的文件存储在app assets images subdirectory image png and app assets images subdirectory image full png In my app views home h
  • lseek() 的复杂度是 O(1) 吗?

    我知道我的问题在这里有答案 QFile 寻道性能 https stackoverflow com questions 6171403 qfile seek performance 但我对这个答案并不完全满意 即使在查看了以下实现之后gene
  • 是否可以将jsp预编译到eclipse中?

    标题很简单 我想知道是否有可能直接在eclipse中看到编译好的jsp 生成的servlet 无需部署到任何服务器上 如果您使用 JSP 我建议购买我的Eclipse http www myeclipseide com 因为它可以编译 JS
  • 显示表格单元格不一致。

    嘿 我想知道为什么会发生这种情况 http jsfiddle net dSVGF http jsfiddle net dSVGF 按钮尚未填充容器 锚确实如此 有什么本质上的不同 两个标签之间的风格 div class table a hr
  • 如何在 SQL 中替换 PIVOT 中的 Null 值

    我有以下代码 我试图用零替换使用枢轴时出现的 Null 我执行了以下操作 但它说 ISNULL 附近的语法不正确 我不确定我做错了什么 有什么建议请 select from tempfinaltable pivot ISNULL sum T
  • 无法更新 android studio 3.1:配置冲突:同步项目期间“armeabi-v7a,x86”

    这是我的构建 gradle 应用程序 文件 apply plugin com android application apply plugin io fabric apply plugin checkstyle def versions a
  • Angular2 ngNoForm 还可以进行角度形式验证

    我有一个遗留后端服务器 它将表单数据作为请求参数进行处理 我们将 angular2 放在前端 我想提交 angular2 表单 以便所有字段都作为请求参数 这样就不必更改旧后端 为此 我有
  • 捆绑安装不起作用

    我正在 Windows 上开发 Ruby on Rails 我们的本地网络出现问题 无法访问https www rubygems org https www rubygems org 好像被屏蔽了什么的 但我可以通过访问它http www
  • Ruby on Rails 3:Devise::LdapAdapter.get_ldap_param 未定义方法错误

    我在跑步 红宝石 1 9 3p0 轨道 3 1 1 设计1 4 9 Devise ldap authenticatable 0 4 10 我正在使用 Devise 通过 LDAP 服务器验证我的 Rails 应用程序 我使用用户名而不是电子
  • Is Type 和 Is Type(object, object) 抛出 TypeException

    我试图断言方法调用返回的对象属于以下类型List
  • EC2 t2.medium 可爆发信用“储蓄”计算

    我正在使用 T2 medium 实例 一天的三分之一的时间我都在做密集的统计计算 并计算出剩下的 2 3 的时间我将以每小时 24 小时的速度 赚取 学分 但这并没有发生 这是我这两天的使用情况 这是我的信用账户 直到昨天下午 6 点我已经
  • 在 Ruby 中模拟 int64 溢出

    我是一名资深程序员 但对 Ruby 还很陌生 我正在尝试移植一种名为 CheckRevision 的算法 用于在登录 Battle net 的在线游戏服务之前检查游戏文件的完整性 该算法使用给定的公式对文件进行 哈希 没有无聊的细节 而是不
  • 从 apache Spark 读取/写入 dynamo 数据库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何 Java 库支持从 apache Spark Mesos 读取 写入 dynamo
  • 获取同一 FK 日期差异的前一条记录

    我需要在一小时内插入同一客户的前 1 条记录 如果记录在一小时后插入 则不需要该记录 请参见下表 这只是数千条记录的样本 我正在使用 SQL Server 2005 替代文本 http img651 imageshack us img651
  • 如何在node.js中关闭数据库连接?

    当我关闭数据库连接时node js我收到这个错误 Cannot enqueue Query after invoking quit 这是我的code socket on adminConnect function email connect
  • Java 大型数据库插入

    我有一个数据库 需要在其中插入批量数据 一次大约 500k 条记录 我正在使用 derby 进行测试 发现这么多记录的插入时间约为 10 15 分钟 我正在用 Java 进行批量插入 这次看起来是否很慢 在普通笔记本电脑上工作 有没有办法加