如何將大量資料(very big data)匯入到Drupal呢?

Posted by on | |

一開始用Feeds匯入資料,資料量少時,發現Feeds還蠻好用的,
但資料量越來越大時,就發現Feeds不夠用了,
約2000筆資料的匯人,就會出現ajax 500之類的訊息,
應該是等太久,導致網頁timeout沒回應之類的。



於是開始找其它方案,又發現了migrate這個模組,
它是只要您,能開發實作migration這個calss,
然後,就可在它的架構下完成資料的匯入,
一開始也是出現ajax 500之類的訊息,

後來發現drush中有整合migrate的指令,興高采烈的試了好幾下,
發現不論insert或update,時間都一樣久遠,1分鐘約100~200筆左右,
我要匯入10萬筆商品,那就要10個小時,天啊~~~~~~~~
那我毎天都要更新這些商品的價格,不就.....

天將降大任於斯人也~

在東查西查的情況下,原來可以用drush來執行自己的php script
語法:drush scr script.php

ok,趕緊來試試更新資料的速度,

$node = node_load($nid,NULL,TRUE);  //載入系統中的node
$node->field='更新的資料';
node_save($node); //存回系統中

結果............
和migrate模組的時間差不多,殘念 XP ~~~

真的在逼我,用暴力破解:我自己塞進drupal的資料庫,

不過在這之前,
得先來了解drupal資料庫 table關係,
還有node_save到底在做什麼?

先看看底下連結:
d7 database schema
node_save 

看完之後,也才了解,還得真的用暴力了。
因為,
若一個商品,有20個資料欄位,
那毎新增一筆,就會産生40 次以上的存取動作。

毎新增一個欄位,drupal就會開一個table來存,
所以20個資料欄位=20個table + 20個 版本控制的 table,
存取20個欄位 = 20[個欄位] x 2[資料+版本] + 1[cache] + 其它動作...
那10萬筆的資料,就會有 400萬次以上的存取了。

下一篇:暴力匯入大量資料到drupal系統

0 意見: