儲存到資料庫太慢(每分鐘 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 開發的重點是將資料輸入到產品中。我們投入了大量時間來讓“塊”獲取機制適用於“打開表”,但我們沒有類似的“保存表”機制。我們已公開要求這樣做,但無法承諾具體的實施日期。
布萊恩·科科倫
回覆:儲存到資料庫太慢(每分鐘 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批量插入功能。有點麻煩,但應該要快得多。