php - Web 应用程序的 PHP 和 MySQL 统计报告的建议

标签 php mysql statistics

背景:

我在我的小公司“继承”了一个 php webapp 并且 经过多年的唠叨终于得到了 去扔掉意大利面条代码并重新开始。

我们想记录在系统中进行的每个操作,例如:

  • 用户 X 浏览了项目 Y
  • 用户 X 更新了项目 Y
  • Z 城市的新商品 Y

然后提供不同分辨率的图表(日、月、年) 在系统中完成的操作。

在以前的版本中,我们有一个包含 20,000,000 条记录的表,因为 2005 所以这会让你了解我们已经拥有的数据量 有,这只是众多统计数据中的一个。

实际问题:

您对构建接近实时的网站有何建议 系统创建此统计信息?

注意事项:

  1. Google 的可视化 API 已经涵盖了绘图
  2. 我不反对使用任何 NoSql 数据库或 消息服务器、crons 或任何获取的东西 工作完成,但更喜欢 mysql/php 解决方案
  3. 我目前的思路是 自动为每个创建一个表 我要保存和创建的统计数据 几个汇总表(按月、按天、按年) 缓存结果。
  4. 我知道这是一个广泛的问题,但欢迎提出任何建议

最佳答案

如果所有用户都必须注册,我会采用完整的标准化解决方案。

USERS TABLE            OBJECTS TABLE
---------------        -----------------     
user_id (primary)      object_id (primary)


USERS_TO_OBJECTS TABLE
--------------------
user_id (index)
object_id (index)
time (index)
action (index)
? object_type (index) // could be useful to speed things up

此设置可能会在绘制图表时为您提供最大的灵 active ,并且速度也会非常快,因为如果您不需要用户或对象,您可以将其省略。

编辑:

假设城市 X(id 9876)由用户 123(id 1234)更新...

1234    - user_id (the user that did the action)
9876    - object_id (the object where the action was done)
xyz     - time
updated - action type (so that you select only specific actions)
city    - object type (so that you select only specific objects)

我已经用 4000 万行填充了这个表,结果是可以接受的。

0.002 秒,用于对过去一周更新的城市数量进行简单计数。数据是随机插入的。

编辑2

如果你发现自己有一个非常大的表,你可以求助于 MySQL 分区,你的模式是完美的。我真的不知道您将如何使用这些表格,但您可以:

按范围划分。按日期组织分区。每个新月左右,您都会有一个新分区。

按键分区。按 Action 组织分区。每个操作都会转到适当的分区。

可以查看more on partitions on MySQL's sitethis article gives you some detail进入微调分区。

关于php - Web 应用程序的 PHP 和 MySQL 统计报告的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974152/

相关文章:

linux - 基于 Web 的 Linux 统计信息

python - 如何使用 Python 检查面板数据中的单位根?

php - 错误 : Namespace declaration statement has to be the very first statement or after any declare call in the script

php - Codeigniter 2.2 - 使用左连接和多个 where 子句更新 Active Record

php - 从页面 facebook api graph 获取信息

php - 我需要具有一组特定功能的本地站点搜索

mysql - SQL多表插入

javascript - HTML5 Ajax JQuery PHP MySQL 插入

mysql - 为什么我的索引字段以随机顺序而不是字母 (ASC) 顺序返回?

python - Django & Postgres - 百分位(中位数)和分组依据