例如,如果我们正在做 Analytics 记录 page_type、item_id、date、pageviews、timeOnPage。
似乎它们有几种避免它的方法。有自动的方法吗?
在唯一标识记录的字段上创建索引,例如
[page_type, item_id, date]
并使索引唯一,这样在添加相同的记录时,它会拒绝它。或者,如果数据库或框架支持,则将上述设置为唯一的主索引。不过,在 Rails 中,通常 ID 1、2、3、4 是主索引。
或者,使用 查询记录
[page_type, item_id, date]
,然后更新该记录(如果它已经存在)(或者如果 pageviews 和 timeOnPage 已经具有相同的值,则不执行任何操作)。如果记录不存在,则使用此数据插入一条新记录。但是如果需要以这种方式查询记录,看起来我们无论如何都需要在这三个字段上建立索引。一直插入新记录,但是在查询值时,使用类似
select * from analytics where ... order by created_at desc limit 1
也就是说,获取最新创建的记录并忽略其余记录。但这似乎是 1 条记录的解决方案,但在汇总值(进行聚合)时不太可行,例如select sum(pageviews)
or select count(*)
。
除了使用上述方法之外,还有一些自动解决方案吗?