Php 如何存储和检索大量数据以进行特定日期的检索+;摘要检索?

Php 如何存储和检索大量数据以进行特定日期的检索+;摘要检索?,php,mysql,database-design,data-structures,Php,Mysql,Database Design,Data Structures,简化案例: 存储 用户点击一个链接 链接\u每次单击+1 超级用户为每次单击设置乘数参数 每次点击链接奖励(+1*param) 每次单击也会记录用户ID 检索 必须在特定日期范围内进行查询(例如,“10月10日至10月23日之间,用户ID=4的点击次数”) 但是,大多数查询都是针对给定用户的所有日期的总和进行的 假设表变得庞大,两种查询都会变得非常缓慢,对吗 如何处理?同时存储在一个详细表(每个链接每个用户每次单击一行)和一个摘要表(每个链接每个用户一行)中?我听说过“汇总”数据,但我不知道

简化案例:

存储

  • 用户点击一个链接
  • 链接\u每次单击+1
  • 超级用户为每次单击设置乘数参数
  • 每次点击链接奖励(+1*param)
  • 每次单击也会记录用户ID
  • 检索

    • 必须在特定日期范围内进行查询(例如,“10月10日至10月23日之间,用户ID=4的点击次数”)
    • 但是,大多数查询都是针对给定用户的所有日期的总和进行的
    假设表变得庞大,两种查询都会变得非常缓慢,对吗

    如何处理?同时存储在一个详细表(每个链接每个用户每次单击一行)和一个摘要表(每个链接每个用户一行)中?我听说过“汇总”数据,但我不知道这是什么意思

    使用的技术:MySQL、PHP(和Javascript)

    如何处理?同时存储在一个详细表(每个链接每个用户每次单击一行)和一个摘要表(每个链接每个用户一行)中

    是的,但是添加一个DATETIME列,这样您就可以执行(a)中提到的周期检查。使用
    NOW()
    函数填充DATETIME列以获取当前日期和时间。关于选项(a)需要注意的是,标准将最小化汇总的数据,因此性能不应该是一个太大的问题。此外,不应该为details表编制索引,因为索引只会帮助获取数据,并降低将数据放入表的速度

    超级用户奖励可能应该是一个单独的表,但这意味着您的详细信息表需要通过超级用户的用户ID或URL与超级用户关联
    userid
    将是一个更好的选择

    我听说过“汇总”数据,但我不知道这是什么意思

    数据库原则是只存储您需要的内容——可以使用SUM和COUNT等函数计算摘要数据。可以,它可以像表格一样查询,但不存储任何数据。

    简单。:-)

    一个用户表,我称之为用户表

    一张点击表,我叫它ClickEvent

    每个不同的链接对应一个表,我称之为超链接(避免在数据库中使用“链接”一词)

    根据我们所知(不多),用户表不是很重要的问题或答案

    超链接表将用于存储每个链接的所有信息,列为:

    • 超链接
    • 网址
    • 点击值
    • 报酬乘数
    (我认为您所说的是将值和乘数分配给链接实体,而不是每个单击事件,对吗?)

    ClickEvent表是问题/答案的核心。我会给它列如下:

    • ClickEventID,int(主键)
    • 用户ID,int(FK)
    • HyperLinkID,int(FK)
    • 单击日期时间、日期时间
    • ComputedEventValue(十进制或 小额货币)
    你对速度的担忧应该是温和的——这不是很强烈,即使有很多活动。每个事务(单击)都记录在ClickEvent表中。每次单击事件都会插入一条新记录,在插入期间,会写入ComputedEventValue


    在我看来,这似乎涵盖了主要思想。

    谢谢@OMG Ponies!这是一个极好的答案!总结数据的一个后续问题。我必须调用大约30个不同链接的总和来填充数据表。如果我按照你说的方式做,在我开始担心“不合理”的延迟之前,有多少记录?几千?数以百万计的?数亿?埃米尔:数据库可以轻松处理数百万条记录。这更多地取决于您正在执行操作的数据类型,以及您试图从这些信息中获得什么。谢谢@OMG。30个不同的总和将在DATETIME和一个INT列上执行。但是你说的基本上是“不用担心”谢谢你的帮助!