当前位置: 首页 > 面试题库 >

MySQL使用Java从文件插入大数据集

谈禄
2023-03-14
问题内容

我需要将CSV文件中的约180万行插入MySQL数据库。(只有一张桌子)

当前使用Java解析文件并插入每一行。

可以想象,这需要花费几个小时才能运行。(粗略地10)

我之所以没有将其从文件直接传送到db中,是因为在将数据添加到数据库之前必须对其进行操作。

此过程需要由那里的IT经理来运行。因此,我将其设置为一个不错的批处理文件,以便他们在将新的csv文件放入正确的位置后运行。因此,我需要通过将文件拖放到某个位置并运行批处理文件来使其工作正常。(Windows环境)

我的问题是,什么方法是插入这么多数据的最快方法?是从临时分析的文件中一次插入还是一次插入一个大插入?还有其他想法吗?

第二个问题是,如何优化我的MySQL安装以允许快速插入。(有时还会需要选择所有数据中的一个)

注意:该表最终将被删除,整个过程将在以后再次运行。

澄清一下:当前使用… opencsv.CSVReader解析文件,然后在每一行上进行插入。我在总结一些专栏,而忽略其他专栏。

更多说明:本地数据库MyISAM表


问题答案:

快速插入的提示:

  • 使用LOAD DATA INFILE语法让MySQL解析并插入它,即使您必须操纵它并在操作后将其送入。
  • 使用以下插入语法:

将值(val1,val2),(val3,val4),…插入表(col1,col2)

  • 插入之前,请删除所有键/索引。

  • 在您拥有的最快计算机上执行此操作(主要是在IO方面,但是RAM和CPU也很重要)。无论是数据库服务器,还是插入客户端,请记住,您将付出两倍的IO价格(一次读取,第二次插入)



 类似资料:
  • 问题内容: 我有一些要导入mySQL的CSV数据文件。我想在shell脚本中进行插入,以便可以将其自动化。但是,我对在脚本中使用明文形式输入用户名和密码感到有些厌倦 我有以下问题: 我对脚本中明文中的uname / pwd的想法感到不满意(反正还是这样,还是我太偏执)?也许我可以为插入表设置仅具有INSERT特权的用户? 数据库表(导入原始数据的数据库表)具有基于表列的唯一键。我尝试导入的数据中也

  • 问题内容: 我想将最大大小为10MB的大文件上传到我的MySQL数据库。使用我将PHP自己的文件上传限制更改为“ 10485760” = 10MB。我最多可以上传10MB的文件。 但是,如果文件大小超过1 MB,则无法将其插入数据库中。 我正在读取所有文件数据,并将其作为要插入LONGBLOB字段中的字符串传递给insert查询。 但是,大于1 MB的文件不会添加到数据库中,尽管我可以用来确保文件

  • 问题内容: 我正在尝试使用Java将数据插入mysql数据库。我正在使用以下代码从数据库中获取数据,并且工作正常。 为了插入数据,我尝试了上面的代码,仅替换了 与 但是它显示出一些错误。您能告诉我代码中的问题在哪里吗? 谢谢 :) 问题答案: 如果您的主键是自动递增,则可以尝试此操作;

  • 问题内容: 我有包含以下格式的数字的文本文件: 现在,我需要读取该数据并将其分配给变量(前两个数字),并将其余所有数据( 1 000 000个 数字)分配给数组。 这不是一项艰巨的任务,但是-这太慢了。 我的第一次尝试是: 它按例外方式工作,但执行大约需要 7500毫秒 。我需要在几百毫秒内获取该数据。 然后我尝试了: 使用和我大约在 1700毫秒内 得到了相同的结果,但是仍然太多了。 如何在不到

  • 主要内容:基本语法,向表中的全部字段添加值,向表中指定字段添加值,使用 INSERT INTO…FROM 语句复制表数据数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 基本语法 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1) INSERT…VALUES语句 INSERT VALUES 的语法格式为: INSERT INTO <表名> [

  • 我正在尝试使用Java jdbc连接在mysql数据库中插入一行。。。。 这是我的密码, } 当我尝试运行代码时,我得到类强制转换异常。。。非常感谢您的帮助。这是我的学生。java类 } 当我运行代码时,我得到以下错误:线程“main”java中出现异常。lang.ClassCastException:类java。util。日期不能转换为java类。sql。jdbcsample中的日期(java.