我正在使用一个表来跟踪我站点中对象的访问/查看情况。每个对象可以有多个类别和多个所有者。我希望能够尽可能高效地显示统计信息,而不需要进行大的多表连接。
现在,我正在为每次访问生成一个guid --然后将其附加到hits表中的一行,该表还跟踪对象ID、用户ID、类别ID和所有者ID。然后,当我查询表中的命中时,我对guid执行了select distinct,以获得每个对象的命中总数--因为可能有多行具有相同的guid,所以我不想计算这两次。
其他策略可能是为"owner2“、"owner3”、"category2“、"category3”等设置多个额外的列,或者在生成报告时简单地在对象表上进行连接并获取所有者ID和类别ID。这样做的缺点是,它可能是一个非常丑陋的查询,并且可能很慢(因为对象表可能有数十万行)。
对处理这个问题的最佳方法有什么看法吗?
发布于 2011-06-14 00:00:19
7.8.1. Make Your Data as Small as Possible
这并不总是答案,但我认为它在你的情况下。假设你想要一个每个对象的类别和每个对象的所有者的视图数量的报告,那么我认为你目前相对正常的(标准化的)设计是很好的。我不喜欢“其他战术”的说法。
但是,您可以考虑进行优化。时间只朝一个方向移动。过去的统计数据不能改变。而且,如果你不采取措施加以控制,你的点击率将会单调增长。您能说一个超过N天未见的guid是旧的并且可以删除吗?在这种情况下,您可以保留一个(guid,last_seen_timestamp)表,并定期使用它从hits表中清除旧的guid,同时生成刷新的guid的汇总统计信息。
发布于 2011-06-12 06:01:45
其他的策略可能是为"owner2","owner3","category2","category3“等有几个额外的列,或者简单地在对象表上做一个连接,并在我生成报告时获得所有者ID和类别ID。
乍一看,您的设计似乎很好,但如果可以,您可能希望使用PostgreSQL进行研究:它具有array type和gist索引,这将允许您将所有者/类别聚合为数组字段,并使用重叠(&&)运算符对后者进行查询。
https://stackoverflow.com/questions/6318737
复制相似问题