【问题标题】:Drupal node_save speed upDrupal node_save 加速
【发布时间】:2012-03-18 19:29:35
【问题描述】:

我必须以编程方式插入数百万个节点(从 xml 导入数据)。 Node 有很多 cck 字段,例如照片、投票、节点引用等。有没有一些技巧可以加快这个过程(节点通过drupal api node_save保存)?

为了清楚我要查找的内容,这里是一个示例:我们不需要在数据导入期间清除缓存,因此我们可以在 node_save 函数中注释最后一行。

还有其他有用的性能提示吗?

【问题讨论】:

  • 如果不破解大量核心模块,您将无法加速node_save()...如果速度是一个问题,您最好的选择是学习数据库结构并手动插入记录
  • 谢谢,看来只有一个选项。

标签: drupal drupal-6


【解决方案1】:

我不知道您需要以编程方式创建数百万个节点的目的是什么,但存在 Devel 的模块及其在 Document 上的文档。

我不确定使用此模块一次可以创建多少个节点。但值得在您的情况下进行测试。

检查生成内容可以:

"通过快速生成来加速您的站点或模块的开发 节点、cmets、术语、用户等。”

【讨论】:

  • 我需要从xml导入数据,而不是生成测试内容。
  • @breethe 您没有提到要从 xml 或 excel 生成节点。你编辑了你的问题,而我已经准备好给出我的答案。
【解决方案2】:

我有一个解决方案给你

首先:您必须将 .xml 文件解析为 .csv "comma delimiter" 。 你可以使用很多工具来做到这一点,你不必编写代码。 看看这个网站

1-http://codestips.com/php-xml-to-csv/.

2-http://www.w3schools.com/php/func_filesystem_fgetcsv.asp.

3-Convert large XML file to CSV in PHP.

二:安装drupal模块注意导入“http://drupal.org/project/node_import

在节点导入中,您将导入 csv 文件,在配置中,您将设置需要通过该文件创建的类型。您还必须定义对所选内容类型的 csv 字段引用。此模块将为每个 csv 记录生成节点。例如,如果它包含 100 行,则将创建 100 个节点。此链接是分步指南“http://drupal.org/node/827750

另一种解决方案:

1- 是创建名为 Import 的内容类型并添加文件字段上传(上传您的 xml 文件)然后只创建一个实例。

2- 然后挂钩 node_api “操作提交” 添加您的自定义代码以解析上传的 xml 并迭代文件中的元素数量

3- 最后,以编程方式创建节点并使用 xml 元素子值设置它的值。

创建程序注释的代码:

$node = new stdClass();
//Main Node Fields
$node->type = 'video'; //This can be any node type
$node->created = time();
$node->changed = $node->created;
$node->promote = 0; // Display on front page ? 1 : 0
$node->sticky = 0;  // Display top of page ? 1 : 0
$node->format = 2;  // 1:Filtered HTML, 2: Full HTML
$node->status = 1;  // Published ? 1 : 0
$node->language = 'en';

/* Custom Fields of Video */
$node->title = $node->name = "string";
$node->field_video_id[0]["value"] = "string";
$node->field_updated[0]['value'] = "string";
// this code must be placed to save the created node
if ($node = node_submit($node)) {
node_save($node);

drupal_set_message(t("Node " . $node->title . " added correctly"));
} else {
drupal_set_message(t("Node " . $node->title . " added incorrectly"), "error");
}

联系我以获取更多信息。

【讨论】:

  • 谢谢,但问题不是如何导入数据,而是如何加快进程。发现一个提示:我们不需要在每次 node_save 之后清除缓存,所以我们可以在 node_save 函数的末尾注释这一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多