我們這邊從一開始使用Drupal就是利用的其本身的數據庫結構,page, node, taxonomy, term等等都是使用Drupal本身的概念,很少直接操作數據,需要大量已有數據(一般是csv格式文件)導入網站的時候,就用第三方模塊node_import (Drupal 6)或者feeds (Drupal 7)來設置和進行導入,形成頁面以及分類,再輔助設置Views進行需要的列表。
以上的辦法相對來說簡單易行,特别是在使用Drupal初期,我們對PHP程序和MySQL數據庫不很熟悉的情況下。但在一些需要實現複雜一些功能的時候,這樣的辦法就有局限性,不方便實現數據庫關聯(雖然views也有關聯功能,但内容類型、分類等牽扯起來搞得很複雜)、不利于用戶浏覽性能提升(數據量可能增大了很多倍,訪問效率低下),數據量龐大的時候,更新也不便(曾經為更新一個系列網站重新導入花幾個月)。
後來也曾經在部分網站中直接添加數據庫表,然後編寫PHP程序對表進行查詢,這樣可以實現比較靈活的設置,但對數據庫技術的要求高一些,修改起來比較麻煩。
最近在開發一個新的系列網站時經過綜合考慮,采取了完全使用Drupal數據結構和獨立建表、編程之間的折中方案:安裝Data模塊用于管理Drupal系統以外的數據表,基本步驟時這樣的:
- 先(用命令行或者圖形界面)在數據庫中直接建表,根據需要設置表名、字段、索引等;
- 在Structure -> Data tables中Adopt tables将前面已經建好的表納入Data模塊的管理(也可以用Create new table直接建表,但字段類型設置、索引設置等不方便);
- 可以用命令行或者圖形界面将已有得數據導入數據庫表中
,也可以采用Feeds Database等工具導入數據; - 納入Data模塊管理的表就可以用Views來形成各種需要的列表,這個過程比人工用SQL語句編程查詢數據庫就簡單高效得多,Views PHP等模塊也可以和以前一樣使用來實現複雜的功能;
- 需要做成内頁時,無需建立内容類型,直接在自定義模塊中添加menu項來設置路徑,調用的函數中可以嵌入views或者SQL語句來獲取數據表中的内容,然後用PHP程序修改、呈現出來。
現在都有些後悔當初沒有使用這樣的辦法來搭建網站,以前導入成node的方式對服務器資源也是很大的浪費而且工作效率、訪問性能下降,不過如果有需要的話,可以在以前的基礎上再安裝Data模塊、建表、導入數據(或用SQL語句複制遷移)、生成新的views和頁面來對以前進行補充或者替代。
2016年10月12日補充創建MySQL數據庫中的表命令行例子:
CREATE DATABASE database_name; USE database_name; CREATE TABLE `table_name`( `ip_from` INT(10) UNSIGNED, `ip_to` INT(10) UNSIGNED, `country_code` CHAR(2), `country_name` VARCHAR(64), `region_name` VARCHAR(128), `city_name` VARCHAR(128), `latitude` DOUBLE, `longitude` DOUBLE, `zip_code` VARCHAR(30), `time_zone` VARCHAR(8), `isp` VARCHAR(256), `domain` VARCHAR(128), `net_speed` VARCHAR(8), `idd_code` VARCHAR(5), `area_code` VARCHAR(30), `weather_station_code` VARCHAR(10), `weather_station_name` VARCHAR(128), `mcc` VARCHAR(256), `mnc` VARCHAR(256), `mobile_brand` VARCHAR(128), PRIMARY KEY (`ip_to`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
導入數據例子:
LOAD DATA LOCAL INFILE 'IMPORT.CSV' INTO TABLE `table_name` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
评论2
感謝分享
同遇到這個問題,D7的feeds導入數據庫幾十MB很容易卡住。這個操作數據的方法值得一試。因為我這裡還有采集後導入,如果能直接入庫就更好了。不知道有思路沒采集直接入庫也是可以的
我前年參加過北京亞艾元公司的一次講大數據的培訓,其中講了用drupal模塊來進行采集、直接入庫、直接展示的辦法,具體辦法我記得不是太情況,反正就是用了好幾個drupal第三方模塊及子模塊,然後也結合了他們自己開發的模塊來實現的,你可以看看他們自己的Drupal網頁采集模塊介紹,或者找他們咨詢看看。