存储数据表和检索的最快方法

时间:2012-07-14 07:49:24

标签: php mysql database arrays serialization

我将一些历史信息存储在我的网站上,以便将来检索用户。因此,当他们访问某些页面时,它会记录他们访问过的页面,时间,然后将其存储在用户ID下以备将来添加/检索。

所以我最初的计划是将所有数据存储在一个数组中,然后在每次检索时序列化/反序列化它,然后将其存储回数据库中的TEXT字段。问题是:如果用户建立了(例如)10k页的历史记录,我不知道大数据数据会带来多大的效率或效率。

编辑:所以我想知道最有效的方法是什么?我还在考虑在数据库中为每个历史记录插入一个新行,但是这样就可以建立一个大型数据库来从中选择。

问题是数据库或大规模序列化​​阵列中更快/更高效,大量行的问题是什么?显然,欢迎任何其他更好的解决方案我最终将切换到Python,但是现在必须在PHP中完成。

2 个答案:

答案 0 :(得分:2)

将数据存储为序列化数组没有任何好处。检索大量数据,反序列化,修改数据并重新序列化以进行更新的速度很慢 - 更糟糕的是,数据越大(正是您所担心的),速度会越慢。

数据库专门用于处理大量行,因此请使用它们。随着数据的增长,每次插入都没有额外的成本,与您提出的方法不同,并且您仍然存储相同的数量的数据,因此让数据库执行它最擅长的操作,并保留您的代码简单。

将数据存储为数组也使得任何类型的查询和聚合几乎都不可能。如果系统的目的是(例如)查看特定页面获得的访问次数,则必须对每个记录进行反序列化,找到所有匹配的页面等。如果您将数据作为一系列行与用户和页面,这是一个简单的SQL计数查询。

如果有一天,你发现你有很多行(10,000不是很多行),你开始看到性能问题,找到优化它的方法,可能通过聚合和反规范化。< / p>

答案 1 :(得分:0)

您可以检查会话变量并存储一个会话的所有数据,并将它们一起转储到数据库中。

您可以在数据库级别进行索引以节省时间。

最后,你可以做的最有效的事情是对数据进行操作/操作并将其存储在单独的表中。并始终从manuplated table中选择数据。你可以使用cron job或某些调度来实现这一点。