当前位置: 首页 > 面试题库 >

将视图计数存储在数据库表中

傅俊德
2023-03-14
问题内容

每次访问数据库记录时,什么是最合适的和最有效的存储视图计数的方法?

我有ITEMS包含以下字段的表:id, item_name

每个项目都有自己的永久链接:http :
//domain.com/item_name

我希望能够使用此数据并Views: 2,938在页面上显示一个。哪种方法最好?

方法一

view_countITEMS表中创建一个附加字段,并对其进行更新以增加视图计数:

view_count = view_count + 1;

方法B

创建一个VIEWS包含以下字段的新表:

id, item_id, timestamp, ip

并在VIEWS每次查看页面时将新记录html" target="_blank">添加到表中。

方法C

完全有另一种方法吗?

我已经看到方法A在各种PHP论坛软件中都使用过,但是我的大学讲师告诉我方法B更好,因为add()所需的压力小于update()


问题答案:

确实,INSERT操作通常比UPDATE语句消耗更少的资源。但是调整良好的UPDATE语句并不一定会带来麻烦。”

还有其他考虑。如果唯一已知和可预见的要求是“总”页数,则与为每个“视图”事件存储单独的行相比,单行将消耗更少的存储空间。同样,检索视图计数的查询将更加有效。

(实际上,“应变”是在存储中,而不仅仅是磁盘空间,而是磁带的数量和备份所需的时钟时间,还原所需的时间等)

如果您需要能够按小时或按天报告观看次数,则拥有更细粒度的数据将使您能够做到这一点,而这是您无法从总数中获得的。

您实际上可以两者兼而有之。

如果我需要一个“摘要”计数来放置页面,那么我就不必对历史事件记录中的大量行运行查询,而在下一次页面时只需输入新值2939被查看。从单行中检索单列值对数据库资源的“压力”要小得多,而不是每次查看页面时都要翻阅数千行事件数据以将其聚合为一个计数。

如果还需要能够按国家,IP或小时,天,周或月来按国家或IP管理性地报告“视图”,则我还将存储单个事件行,以使它们可用于切片和骰子分析。



 类似资料:
  • 我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?

  • 问题内容: 我正在尝试为视图创建JPA实体。在数据库层中,表和视图应该相同。 但是,问题开始出现并且有两个方面: 尝试设置正确的注释时。视图没有与之关联的主键,但是如果没有对字段进行适当的注释,则会在运行时引发抛出异常。 Spring Boot 接口定义要求类型为extends ,这避免了由于视图实体上缺少ID 而不能用作替代方法。 与缺少主键的视图进行交互的正确JPA / SpringBoot

  • 问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很

  • 我正在尝试为视图创建一个JPA实体。从数据库层来看,表和视图应该是相同的。 然而,问题开始出现,它们是两方面的: > 当试图设置正确的注释时。视图没有与之相关联的主键,但没有适当的javax。坚持不懈Id注释在字段上,您将获得一个组织。冬眠AnnotationException:没有为运行时抛出的实体指定标识符。 Spring Boot接口定义要求类型扩展,这排除了使用作为视图实体上缺少id的解决

  • 问题内容: 在数据库中存储图像的常用方法是在存储数据之前将图像转换为数据。此过程将使大小增加33%。或者,可以将图像直接存储为;例如: 然后用 使用后一种方法,我们可以节省1/3的存储空间。为什么像在MySQL数据库中那样存储图像更常见? 更新: 关于将图像存储在数据库中的优点和缺点的争论很多,大多数人认为这不是一种实用的方法。无论如何,在这里我假设我们将图像存储在数据库中,并讨论了这样做的最佳方

  • 我想知道是否有任何机制可以在Spring Data MongoDB存储库中使用带有注释的?我希望能收到我所拥有的文件数量,而不必获取所有文件。 基本上,这在Java中相当于: