加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何处理用于分析的大型数据集以及不同数量的列?

发布时间:2020-12-13 22:28:51 所属栏目:PHP教程 来源:网络整理
导读:我正在为移动应用程序构建分析系统,并且在决定如何存储和处理大量数据时遇到了一些困难. 每行代表一个“视图”(如网页)并存储一些固定属性,如用户代理和日期.另外,每个视图可以具有不同数量的额外属性,这些属性与所执行的动作或内容标识符有关. 我查看了Amaz
我正在为移动应用程序构建分析系统,并且在决定如何存储和处理大量数据时遇到了一些困难.

每行代表一个“视图”(如网页)并存储一些固定属性,如用户代理和日期.另外,每个视图可以具有不同数量的额外属性,这些属性与所执行的动作或内容标识符有关.

我查看了Amazon SimpleDb,它可以很好地处理不同数量的属性,但是不支持GROUP BY,并且在COUNTing行时似乎表现不佳.生成包含30个数据点的月度图表将需要查询每个数据集的每一天.

MySQL更好地处理COUNT和GROUP修饰符,但是附加属性需要存储在链接表和JOIN中以检索属性与给定值匹配的视图,这不是非常快. 5.1的分区功能可能有助于加快速度.

我从上述系统的大量阅读和分析查询中收集到的是,最终所有数据都需要聚合并存储在表中,以便快速生成报告.

我是否错过了我研究中显而易见的任何内容,是否有比使用MySQL更好的方法?它不适合作业,但我找不到任何能够同时进行GROUP / COUNT查询和灵活的表结构的任务.

解决方法

保持在MySQL中:如果写入量有限/读取更常见,并且数据相对简单(即:您可以预测可能的字符),您可以尝试在主表中使用text / blob列,使用逗号分隔值或键/值对更新,并在连接表上使用AFTER INSERT / UPDATE触发器.您将实际数据保存在单独的表中,因此搜索MAX的/特定“额外”属性仍然可以相对较快地完成,但是检索一个“视图”的完整数据集将是主表中的单行,您可以使用您正在使用的脚本/应用程序拆分为单独的值,从而减轻数据库本身的压力.

这样做的缺点是连接表中更新/插入成本的大幅增加:每次数据更改都需要查询记录的所有相关数据,并在第二次插入“普通”表中,类似于

UPDATE join_table
JOIN main_table
ON main_table.id = join_table.main_id
SET main_table.cache  = GROUP_CONCAT(CONCAT(join_table.key,'=',join_table.value) SEPARATOR ';')
WHERE join_table.main_id = 'foo' GROUP BY main_table.id`).

但是,随着分析数据的发展,它通常会有所不同,所以可能不是每个更新都必须触发缓存中的更新,只需每天使用昨天数据填充缓存的cronscript就可以了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读