保存到数据库太慢(每分钟 10k 条记录)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一个包含 270,000 条记录和 72 列的 JMP 表。
我试图通过 ODBC 将其保存到数据库,但过程非常缓慢:每分钟大约 10,000 条记录(是的,每分钟,这不是拼写错误)。
我尝试导出到 Microsoft SQL Server 2014 和 PostgreSQL 9.3 服务器:两种情况下的速度(或缺乏速度...)是相同的。 此外,两台服务器与我运行 JMP 的工作站位于同一栋大楼内。 我是唯一有权访问这两台服务器的用户,所以我知道他们不忙于其他事情。
我认为速度慢可能是由于 JMP 试图计算文本字段的长度,因此我删除了所有文本列,只留下数字字段,但速度是相同的。
如果我通过 ODBC 从任一数据库检索类似大小的表,则需要不到 20 秒的时间。
通过 ODBC 或 JDBC 写入两个数据库的 ETL 工具要快得多。
关于如何更快地写入数据库有什么想法吗? 到目前为止,该功能非常慢,几乎无法使用。
谢谢。
回复:保存到数据库太慢(每分钟 10k 条记录)JMP 13 在数据库交互方面进行了相当多的改进。其中之一是数据库>保存表选项。
在 JMP 13 中,现在可以为支持它的数据库(其中大多数)插入多行(批量插入)。JMP 13 数据库交互改进还包括保留列名称和大小写(如果可能)以及保留 TIMESTAMP 信息。
回复:保存到数据库太慢(每分钟 10k 条记录)我从未使用过“数据库”>“保存表”选项。实际上,直到读到这篇文章我才知道它的存在,所以我写了一堆我自己的常见任务函数。虽然我觉得它们很慢,但它们至少可以夸耀比本线程中的任何东西都快的速度。
这是我的 BulkInsert 函数:
//将表插入数据库..Table --假设 ncols 匹配
批量插入=功能({ D b ,数据库表, dt } , {默认本地} ,
//db-数据库连接
//dbTable=数据库表
//dt - JMP 数据表
列数= NCols ( dt ) ;
行数= N行( dt ) ;
为了(我= 1 ,我<=行数,我++,
值列表= {} ;
为了( j = 1 , j <=列数, j ++,
如果(是日期(柱子( dt , j )) ,
插入(值列表,字符(格式(柱子( dt , j )[我] , “ddMonyyyy 小时:分:秒” )))
,
插入(值列表,柱子( dt , j )[我])
) ;
) ;
值文本=代替(字符(值列表) , “{” , “(” , “}” , “)” , “\!” , “'” ) ;
代入(值文本, “.,” , “无效的,” ) ;
SQL_字符串= “插入 ” ||数据库表|| “\!N” ||
「价值观」 ||值文本;
执行SQL ( D b , SQL_字符串) ;
) ;
) ;
您将需要我编写的 isDate 函数,您可以在这里找到它:有没有一种简单的方法可以知道列是否是日期/时间?
或者,如果您没有任何日期/时间列,则可以注释掉该部分代码。
回复:保存到数据库太慢(每分钟 10k 条记录)现在是 2016 年,还有几个版本。 我可以确认速度很慢,但就我而言,我每分钟获得 200 条记录。 有 16.064.704 条记录,需要 2 个月才能将它们提交到数据库。 取消按钮不起作用,唯一的出路是终止进程。
请对此做点什么——有这么多需要改进的地方,应该不会那么难!
回复:保存到数据库太慢(每分钟 10k 条记录)
BrianCorcoran wrote:
The emphasis in JMP development has been on getting data into the product. We have put considerable time into getting "block" fetching mechanisms working for Open Table, but we do not have a similar mechanism for Save Table. We have an open request to do this, but cannot commit to a specific implementation date.
Brian Corcoran
这实际上意味着“保存到数据库”选项对于超过几千条记录的表完全没有用。 如果这个昂贵软件的规格更清楚就好了……
回复:保存到数据库太慢(每分钟 10k 条记录)JMP 开发的重点是将数据输入到产品中。我们投入了大量时间来让“块”获取机制适用于 Open Table,但我们没有类似的 Save Table 机制。我们已公开请求这样做,但无法承诺具体的实施日期。
布赖恩·科科伦
回复:保存到数据库太慢(每分钟 10k 条记录)
PMroz wrote:
You could export the JMP dataset to a csv file, and then use the SQL Server bulk insert functionality. A bit of a kluge but it should be much faster.
谢谢。 事实上我也尝试过类似的事情。 但是,我真的很想知道是否有一种方法可以使“保存到数据库”更快,即可行,因为现在它太慢了,无法使用。
这是否与 ODBC 设置/驱动程序有关(但 JMP 从数据库检索数据的速度很快),或者 JMP 就是这样?
回复:保存到数据库太慢(每分钟 10k 条记录)您可以将 JMP 数据集导出到 csv 文件,然后使用 SQL Server批量插入功能。有点麻烦,但应该快得多。