你在这里


在Drupal中直接导入、使用数据库

James Qi 2016年9月27日 - 15:15 发布

  我们这边从一开始使用Drupal就是利用的其本身的数据库结构,page, node, taxonomy, term等等都是使用Drupal本身的概念,很少直接操作数据,需要大量已有数据(一般是csv格式文件)导入网站的时候,就用第三方模块node_import (Drupal 6)或者feeds (Drupal 7)来设置和进行导入,形成页面以及分类,再辅助设置Views进行需要的列表。

  以上的办法相对来说简单易行,特别是在使用Drupal初期,我们对PHP程序和MySQL数据库不很熟悉的情况下。但在一些需要实现复杂一些功能的时候,这样的办法就有局限性,不方便实现数据库关联(虽然views也有关联功能,但内容类型、分类等牵扯起来搞得很复杂)、不利于用户浏览性能提升(数据量可能增大了很多倍,访问效率低下),数据量庞大的时候,更新也不便(曾经为更新一个系列网站重新导入花几个月)。

  后来也曾经在部分网站中直接添加数据库表,然后编写PHP程序对表进行查询,这样可以实现比较灵活的设置,但对数据库技术的要求高一些,修改起来比较麻烦。

  最近在开发一个新的系列网站时经过综合考虑,采取了完全使用Drupal数据结构和独立建表、编程之间的折中方案:安装Data模块用于管理Drupal系统以外的数据表,基本步骤时这样的:

  1. 先(用命令行或者图形界面)在数据库中直接建表,根据需要设置表名、字段、索引等;
  2. 在Structure -> Data tables中Adopt tables将前面已经建好的表纳入Data模块的管理(也可以用Create new table直接建表,但字段类型设置、索引设置等不方便);
  3. 可以用命令行或者图形界面将已有得数据导入数据库表中,也可以采用Feeds Database等工具导入数据;
  4. 纳入Data模块管理的表就可以用Views来形成各种需要的列表,这个过程比人工用SQL语句编程查询数据库就简单高效得多,Views PHP等模块也可以和以前一样使用来实现复杂的功能;
  5. 需要做成内页时,无需建立内容类型,直接在自定义模块中添加menu项来设置路径,调用的函数中可以嵌入views或者SQL语句来获取数据表中的内容,然后用PHP程序修改、呈现出来。

  现在都有些后悔当初没有使用这样的办法来搭建网站,以前导入成node的方式对服务器资源也是很大的浪费而且工作效率、访问性能下降,不过如果有需要的话,可以在以前的基础上再安装Data模块、建表、导入数据、生成新的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;

 

自由标签:

评论

-- 发自IP地址: 113.44.61.211 (位置 | 谁是)

同遇到这个问题,D7的feeds导入数据库几十MB很容易卡住。这个操作数据的方法值得一试。因为我这里还有采集后导入,如果能直接入库就更好了。不知道有思路没

-- 发自IP地址: 58.48.155.125 (位置 | 谁是)

我前年参加过北京亚艾元公司的一次讲大数据的培训,其中讲了用drupal模块来进行采集、直接入库、直接展示的办法,具体办法我记得不是太情况,反正就是用了好几个drupal第三方模块及子模块,然后也结合了他们自己开发的模块来实现的,你可以看看他们自己的Drupal网页采集模块介绍,或者找他们咨询看看。

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符