在WordPress中处理大N数据

时间:2013-01-09 作者:OleVik

我意识到这通常也适用于PHP和MySQL,但上下文和操作在WordPress中。

简介

我目前正在开发一个插件,用于创建和保存有关练习的数据:它基本上可以让我创建训练(选择练习及其详细信息),这些训练可以作为常规帖子的元数据或作为自定义帖子类型中的草稿存储,还可以创建有关训练结果的数据(完成/详细信息)。数据从表单中枚举为如下内容(单个训练的数据集示例):

Array
(
    [compound_exercises-incline_and_standing_shrugs-sets] => 8
    [compound_exercises-incline_and_standing_shrugs-reps] => 2
    [compound_exercises-stiff-legged_deadlift-sets] => 8
    [compound_exercises-stiff-legged_deadlift-reps] => 1
)
Array
(
    [compound_exercises-incline_and_standing_shrugs-sets] => on
    [compound_exercises-incline_and_standing_shrugs-sets-sets] => 8
    [compound_exercises-incline_and_standing_shrugs-sets-reps] => 8
    [compound_exercises-incline_and_standing_shrugs-sets-weight] => 16
    [compound_exercises-incline_and_standing_shrugs-sets-completed] => 1
    [compound_exercises-incline_and_standing_shrugs-sets-result] => 1
    [compound_exercises-incline_and_standing_shrugs-sets-info] => Lorem ipsum dolor sit amet...
    [compound_exercises-incline_and_standing_shrugs-reps] => on
    [compound_exercises-incline_and_standing_shrugs-reps-sets] => 5
    [compound_exercises-incline_and_standing_shrugs-reps-reps] => 10
    [compound_exercises-incline_and_standing_shrugs-reps-weight] => 69
    [compound_exercises-incline_and_standing_shrugs-reps-completed] => 1
    [compound_exercises-incline_and_standing_shrugs-reps-result] => 4
    [compound_exercises-incline_and_standing_shrugs-reps-info] => Lorem ipsum dolor sit amet...
    [compound_exercises-stiff-legged_deadlift-sets] => on
    [compound_exercises-stiff-legged_deadlift-sets-sets] => 3
    [compound_exercises-stiff-legged_deadlift-sets-reps] => 8
    [compound_exercises-stiff-legged_deadlift-sets-weight] => 17
    [compound_exercises-stiff-legged_deadlift-sets-completed] => 1
    [compound_exercises-stiff-legged_deadlift-sets-result] => 1
    [compound_exercises-stiff-legged_deadlift-sets-info] => Lorem ipsum dolor sit amet...
    [compound_exercises-stiff-legged_deadlift-reps] => on
    [compound_exercises-stiff-legged_deadlift-reps-sets] => 3
    [compound_exercises-stiff-legged_deadlift-reps-reps] => 16
    [compound_exercises-stiff-legged_deadlift-reps-weight] => 100
    [compound_exercises-stiff-legged_deadlift-reps-completed] => 1
    [compound_exercises-stiff-legged_deadlift-reps-result] => 3
    [compound_exercises-stiff-legged_deadlift-reps-info] => Lorem ipsum dolor sit amet...
    [general-data-weight] => 60
    [general-data-chest] => 10
    [general-data-waist] => 10
    [general-data-thighs] => 10
    [general-data-calves] => 10
    [general-data-arms] => 10
    [general-data-forearms] => 10
)
第一个数组包含训练、计划的套数和重复次数;第二个是关于训练过程的第二个细节。这里首先要注意的是,一次锻炼可能会达到几KBs的大小。例如,在几年的训练量中,当总的训练量达到几MB时,这种情况并不少见。

此外,我知道一些软件可以独立于WordPress轻松地解决这些任务,但我正在尝试将此解决方案集成到WordPress中,因为它可以处理大量数据,并且可以轻松地与博客和其他解决方案集成。

问题

虽然从数MB的MySQL结果中缓存部分数据并不一定很难,但问题在于检索数据并以增量和异步方式进行处理:我需要WordPress通过添加数据来更新一组瞬态,而不干扰用户交互。这将需要处理一些预设量的数据,以创建一个可随时显示(例如,表格或图形)的数据集。

我主要关心的是WordPress数据库的负载,以及可能对其托管的服务器的负载,因此我希望确保在创建、保存和显示数据时,数据检索和处理尽可能优化。

问题:什么对数据库负载的影响最小:将数据存储为自定义post类型中带有post meta的post、不明确的post meta、带有元数据的层次分类法(通过plugin, 参考号:q49333), 作为自定义数据库表中的数据,还是其他选项cronjobs, 直接操作或ajax更适合将新添加的数据附加到包含以前数据的瞬态中(例如,一个月的值)

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

自定义表格。WordPress帖子在结构上不适合您所做的事情。尝试使用它们将导致大量不必要的数据处理和存储。但您需要仔细考虑自己的数据库设计,并且需要熟练使用SQL,否则最终会导致效率低下。

我不相信瞬变过程会对你有帮助。听起来您将大量更改数据。这可能会抵消这些好处。

如果必须存储数组,请序列化。JSON可能更小,但serialize有更多的数据——这是一种简单的校验和值。大小不重要。这个option_value 第列,共列wp_optionslongtext. That is about 4GB. 限制因素是系统内存,而不是列。

客户端处理(Javascript)比服务器端(PHP)慢很多很多倍,更不用说数据传输时间了。如果您在瞬态中准备了数据,这可能会有所帮助,但与之前一样,听起来您将要对数据进行大量更改。

不知道这是什么意思。

结束