如何將大量資料(very big data)匯入到Drupal呢?
一開始用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系統
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言