我意识到这通常也适用于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更适合将新添加的数据附加到包含以前数据的瞬态中(例如,一个月的值)假设前面提到的训练和结果数组是必要的,这将节省更多空间、序列化(默认情况下就像WordPress那样)、json编码或其他替代方法在检索大量(例如一个月)的数据时,有什么方法可以减少聚合数据的系统密集度?假设必须将其系统化为可比较的单元,这可以在客户端进行以减轻负载,还是预生成的瞬态(具有随时显示的数据)更好在导出/导入数据方面,什么现有系统最适合处理这些数据量?例如,WordPress是否有内置的CSV导出/导入?我假设常规的导入/导出工具不会处理大量数据负载
最合适的回答,由SO网友:s_ha_dum 整理而成
自定义表格。WordPress帖子在结构上不适合您所做的事情。尝试使用它们将导致大量不必要的数据处理和存储。但您需要仔细考虑自己的数据库设计,并且需要熟练使用SQL,否则最终会导致效率低下。
我不相信瞬变过程会对你有帮助。听起来您将大量更改数据。这可能会抵消这些好处。
如果必须存储数组,请序列化。JSON可能更小,但serialize有更多的数据——这是一种简单的校验和值。大小不重要。这个option_value
第列,共列wp_options
是longtext
. That is about 4GB. 限制因素是系统内存,而不是列。
客户端处理(Javascript)比服务器端(PHP)慢很多很多倍,更不用说数据传输时间了。如果您在瞬态中准备了数据,这可能会有所帮助,但与之前一样,听起来您将要对数据进行大量更改。
不知道这是什么意思。