2013-08-28 34 views
1

我通過水壺從mongodb源加載mysql表。 Mongodb表有超過400萬條記錄,當我運行水壺作業時,需要17個小時才能完成第一次加載。 即使對於增量加載也需要一個多小時。我嘗試增加提交大小,併爲作業提供更多內存,但仍然無法改善性能。我認爲JSON輸入步驟需要很長時間才能解析數據,因此速度很慢。 我在改造這些步驟JSON輸入的性能問題

  1. MongoDB的輸入步驟
  2. 的Json輸入
  3. 弦切
  4. 如果字段值爲null
  5. 的毗連領域
  6. 選擇值
  7. 表輸出。

從postgre提取的記錄相同的4百萬記錄比mongodb快得多。 有沒有一種方法可以提高性能? 請幫幫我。

謝謝, Deepthi

+1

您可以在水壺中配置性能監控,並確定哪個步驟花費的時間最長。只要通過觀察運行的步驟指標,您也應該能夠獲得一個好主意。我懷疑你是對的,但不幸的是,我根本不知道蒙戈。我可能會盡我所能將提取物壓入Mongo而不是Kettle。 –

+0

嗨,布賴恩,謝謝..是的,通過觀察指標瞭解到JSON輸入需要很長時間,因爲它將每一行解析爲每個事務的字符串。在生產環境中不能改變我的轉換,所以如果有人知道如何提高JSON性能,那麼它會很棒,因爲將來我們會把所有東西都轉移到mongo上,這可能很關鍵。 – Deepthi

+0

我懷疑有什麼可以直接執行到'JSON Input'步驟。我想你必須嘗試減少你從Mongodb Input Step中選擇的行數,也許通過改變你的查詢表達式。或者,您可能會丟失集合中的索引。不確定你的意思是不能改變你的轉換,因爲它在生產中。那不就是說你不能改變任何東西,包括你的JSON Input步驟? –

回答

0

執行步驟的多個副本。這聽起來像你有mongo輸入,然後json輸入步驟來解析json結果吧?因此,使用4或8個JSON輸入步驟(或更多,取決於CPU的)的副本,它會加快速度。

或者你真的需要解析完整的json,也許你可以通過正則表達式或其他東西來提取數據。

+0

嗨,謝謝,我做到了這一點..但仍然解析很慢 – Deepthi

+0

我聽說過幾個地方,如果你在解析JSON的javascript步驟中使用Javascript函數,它會顯着改善。 JQuery的功能等你試過嗎? – Codek