我正在维护一个系统,其中用户创建被其他用户访问的称为“书”的东西。
我需要一种方便(良好的性能)的方式将事件存储在数据库中,以便用户访问这些书,以便以后显示带有统计信息的图形。这些图需要显示一个历史记录,在该历史记录中,书的所有者可以看到一周中的哪几天,以及在什么时间(整个月中)都有更多的访问活动。
使用ERD(实体关系图),我可以生成以下概念模型:
起初,这个问题似乎已经解决,因为我们这里的情况非常简单。这将给我一个包含3个字段的表格。一个是访问事件的发生,另外两个是外键。一个代表用户,另一个代表访问了哪本书。简而言之,此表中的每条记录都将是一次访问:
但是,考虑到一个用户每天平均可以访问10到30本书,并且拥有一个拥有100.000用户的系统,该表一天之内就可以添加许多GB的新记录。我不是数据库性能良好实践中最有经验的人,但是我很确定这不是解决方案。
即使我在数据库上进行了清理以删除旧记录,但我仍需要保留访问的最近两个月的记录历史(至少)。
好几天以来,我一直在寻找解决这个问题的方法,但是我还没有发现任何东西。有人可以帮我吗?
谢谢。
OBS::我使用的是PostgreSQL 9.X,系统是用Java编写的。
答案 0 :(得分:1)
如评论中所述,您可能高估了数据大小。让我们做数学。每天有30本书,每天每条记录30个字节,有10万名用户。
(100_000 * 30 * 30) / 1_000_000 # => 90 megabytes per day
即使添加索引大小和一定量的开销,这仍然比“每天几GB”低几个数量级。