我们这边从一开始使用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网页采集模块介绍,或者找他们咨询看看。