【发布时间】:2014-06-17 17:17:30
【问题描述】:
我想跟踪用户在 PostgreSQL 数据库中查看的最后 n 个项目。我的第一个想法是创建一个表格,例如
CREATE TABLE history (
id SERIAL PRIMARY KEY,
user_id integer REFERENCES users (id),
item_id integer REFERENCES items (id),
view_date timestamp DEFAULT current_timestamp
);
当用户查看对象时,history 表中的新行将记录该视图。但我只需要为每个用户维护最后的 n 个视图,这种方法将存储曾经出现的每个视图。
有没有一种有效的方法来定期删除所有用户的超过他们最近 n 条的条目?
编辑:如果有比使用 SQL 表更好的方法来存储这些数据,我很想听听。
【问题讨论】:
-
每次选择时都需要存储吗?您能否在内存中创建一个数据结构并在用户会话的开始/结束时加载/保存。
-
如果 COUNT > n,如何与每个 INSERT 一起删除最旧的?
-
也许添加和维护一个 view_order 列会有所帮助,如果这必须位于 SQL 中?从读/写的角度来看,@AdmiralAdama 的建议会更好。
-
@AdmiralAdama 很可能我会在每次选择对象时存储时间戳(除非开销使这不可行)。我通过无会话 API 提供对数据的访问。
-
@nate 您建议用什么替代方法来存储这些信息?
标签: sql database postgresql