【问题标题】:How to store and retrieve lots of data for date-specific retrieval + summary retrieval?如何存储和检索大量数据以进行特定日期检索+摘要检索?
【发布时间】:2011-04-17 02:09:48
【问题描述】:

简化案例:

存储

  1. 用户点击链接
  2. link_clicks 每次点击 +1
  3. 超级用户为每次点击设置一个乘数参数
  4. 每次点击的链接奖励(+1 * 参数)
  5. 还会记录每次点击的用户 ID

检索

  • 查询必须在特定日期范围内完成(例如,“用户 ID = 4 在 10 月 10 日到 10 月 23 日之间的点击次数”)
  • 但是,大多数查询将针对给定用户的所有日期的总和完成

假设表变得很大,这两种查询都会变得很慢,对吧?

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

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

【问题讨论】:

    标签: php mysql database-design data-structures


    【解决方案1】:

    如何处理这个问题?同时存储在一个明细表中(每个用户每个链接每次点击一行)和一个汇总表(每个用户每个链接一行)?

    是的,但是添加一个 DATETIME 列,这样您就可以检查您在 (a) 中提到的时间段。使用 NOW() 函数填充 DATETIME 列以获取当前日期和时间。关于选项 (a) 需要注意的一点是,该标准将最小化汇总的数据,因此性能不应该成为太大的问题。此外,可能不应该对详细信息表进行索引,因为索引仅有助于获取数据,并减慢将数据放入表中的速度。

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

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

    一个数据库的原则是只存储你需要的——汇总数据可以使用像 SUM 和 COUNT 这样的函数来计算。可以create a view,可以像表格一样查询,但不存储任何数据。

    【讨论】:

    • 感谢@OMG 小马!这是一个很好的答案!汇总数据的一个后续问题。我必须调用一个 SUM 约。 30 个不同的链接来填充数据表。如果我按照你说的那样做,在我开始担心“不合理”的延误之前有多少记录?数千?百万?亿万?
    • @Emile:数据库可以轻松处理数百万条记录。这更多地取决于您正在执行操作的数据类型,以及您试图从该信息中得到什么。
    • 感谢@OMG。将在 DATETIME 和一个 INT 列上执行 30 个不同的 SUM。但你所说的基本上是“不用担心”谢谢所有的帮助!
    【解决方案2】:

    简单。 :-)

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

    一个用于点击的表格,我称之为 ClickEvent。

    每个不同的链接都有一个表,我称之为 HyperLink(避免数据库中的“链接”一词)

    鉴于我们所知道的(不多),User 表并不是很重要的问题或答案。

    HyperLink 表将是存储每个链接上所有信息的地方,列是:

    • 超链接ID
    • 网址
    • 点击值
    • 奖励乘数

    (我认为您所说的将值和乘数分配给链接实体,而不是每个单击事件,对吧?)

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

    • ClickEventID,整数 (PK)
    • 用户 ID,整数 (FK)
    • HyperLinkID,整数 (FK)
    • 点击日期时间,日期时间
    • ComputedEventValue(十进制或 小钱)

    您应该忽略对速度的担忧——这不是很密集,即使有很多活动也是如此。每个事务(单击)都记录在 ClickEvent 表中。每个点击事件都会插入一条新记录,在插入期间,ComputedEventValue 会被写入。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多