3

我的一个朋友有一个目录,目前包含大约 500 行或 500 个项目。我们正在寻找可以提供目录报告的方法,包括查看项目的次数和查看日期。

他的网站平均每月有大约 25,000 次页面展示,如果我们假设其中一半是目录项,那么我们会假设每月查看大约 12,000 个目录项。

我的问题是管理数据库中项目视图的最佳方式。

第一个选项是将目录 ID 插入表中,然后增加其查看次数。这样做的好处是它的紧凑性。表中的行数只会与目录项的数量一样多。

`catalogue_id`, `views`

缺点是没有保存日期信息,没有维护上次查看项目的时间。

第二个选项是每次查看项目时插入一个新行。

`catalogue_id`, `timestamp`

如果我们继续假设 12,000 个项目视图,这意味着每个月向表中添加 12,000 行,或者每年增加 144,000 行。这样做的好处是我们知道该项目被查看的次数,以及查看它的日期。

缺点是桌子的大小。一个有 144,000 行的表对 MySQL 来说太大了吗?

有兴趣听到有关如何实现这一目标的任何想法或建议。

谢谢。

4

2 回答 2

1

正如您所提到的,第一个更紧凑但有限。但是,如果您更详细地查看选项 2;例如,如果您希望存储的不仅仅是查看次数,例如进入/退出页面、主机 IP 等。这些信息对于统计和跟踪可能是无价的。另一个问题是这 25,000 次展示是独一无二的吗?如果不是,您可以通过用户名、ip 或其他一些唯一标识符进行跟踪,这可能使您不使用尽可能多的行。您的问题的答案取决于您希望存储多少细节?数据的重要性是什么?

更新:

诚然,由于时间间隔限制给定项目的重复将是一个很好的解决方案。还知道是否有人访问了相同的项目可能对建议的项目 perdition 小部件有用,类似于亚马逊所做的。还知道有人多次访问某个项目对我说,这是一个很好的项目,可以在邮寄、新闻通讯或流行产品页面中向他们或其他人推广。跟踪独特的视图将提供更真实的视图计数,您可以选择显示或存储。在限制重复访问者价值的问题上,这主要取决于您显示的信息。这一切都是以最适合您的方式构建信息。

于 2012-05-31T04:37:22.680 回答
0

您的问题陈述:我们希望能够跟踪特定目录项的查看次数。

让我们回顾一下您的选择。

第一个选项:

在此选项中,您将存储 catalogue_id 和项目视图数的整数值。

好处:

  1. 好吧,因为你真的有一对一的关系,所以新表会很小。如果您有 500 个项目,您将有 50000 行。如果您选择这条路线,我建议您不要创建新表,而是在目录表中添加另一列,其中包含视图数。

缺点:

  1. 这里的问题是,由于您将相对频繁地更新此表,它将是一个非常繁忙的小表。例如,10 个用户正在查看同一个项目。这 10 个更新必须一个接一个地运行。假设您正在使用 InnoDB,第一个视图操作将锁定行更新计数器释放锁定。其他更新将在它后面排队。因此,虽然表上​​的数据很小,但它可能会在以后成为瓶颈,尤其是当您开始扩展系统时。

  2. 您正在丢失粒度数据,即您没有跟踪原始数据。例如,假设网站开始增长,您有一个感兴趣的投资者,他们希望查看过去 6 个月每周浏览量的细分。如果您使用此选项,您将无法向投资者提供数据。本质上,您正在保留摘要。

第二种选择:

在此选项中,您将创建一个至少包含以下最小字段 catalogue_id 和时间戳的日志记录表。您可以扩展它以添加用户名/IP 地址或其他一些信息,使其更加精细。

好处:

  1. 您正在保留粒度数据。这将允许您以多种方式汇总数据。例如,您可以添加一个 ip 地址列来存储访问者的 IP,然后制作一份月度报告,显示按国家/地区查看的产品(您可以进行 IP 地址查找以了解他们来自哪个国家/地区)。另一个例子是查看上个季度哪些产品的浏览量最高等。这些数据对于帮助您决定如何发展业务非常重要。如果你想知道什么是有效的,什么是无效的,就产品而言,这个细节是绝对关键的。

  2. 您的新表将是一个日志记录表。它只会是插入操作。插入几乎可以并行发生。如果您使用此选项,与不断更新的表格相比,它可能会随着网站的增长而更好地扩展。

缺点:

  1. 该表将更大,可能是数据库中最大的表。然而,这不是问题。我经常处理 500 000 000 行以上的表格。我的一些表本身就超过 750GB,我仍然可以对其进行报告。您只需要了解您的查询以及如何优化它们。这真的不是问题,因为 MySQL 旨在轻松处理数百万行。请记住,您可以将一些信息存档到其他表中。假设您每 3 年归档一次数据,您可以将超过 3 年的数据移动到另一个表中。您不必将所有数据都保存在那里。您对 144 000 行的估计意味着您可以安全地保留大约 15 年以上的价值,而不必担心表的性能。

我给你的建议是认真考虑第二种选择。如果您决定采用这条路线,请使用建议的表结构更新您的问题,让我们来看看。不要害怕大数据,而要害怕糟糕的设计,它更难处理。

然而,一如既往的选择是你的。

于 2012-05-31T07:43:28.123 回答