例如,如果我們在Google Analytics中記錄page_type,item_id,date,pageviews,timeOnPage。如何避免在MongoDB(使用Mongoid)或ActiveRecord(使用MySQL的Rails)中插入兩次相同的記錄?
看來他們有幾種方法可以避免它。有沒有一種自動方式?
上唯一標識的記錄,例如
[page_type, item_id, date]
,使指數唯一的,因此,添加相同的記錄時,它會拒絕它的字段建立索引。或者,如果數據庫或框架支持它,則將上面的主索引設置爲唯一索引。不過,在Rails中,通常ID 1,2,3,4是主要索引。
或者,使用
[page_type, item_id, date]
查詢記錄,然後更新記錄(如果記錄已經存在)(或者如果pageviews和timeOnPage已經具有相同的值,則不執行任何操作)。如果記錄不存在,則使用此數據插入新記錄。但是如果需要以這種方式查詢記錄,看起來像我們需要在這3個字段上的索引。插入新記錄所有的時間,但在查詢中值,使用類似
select * from analytics where ... order by created_at desc limit 1
也就是說,獲得最新創建的記錄而忽略其他。但是,這似乎是1條記錄的解決方案,但在彙總數值(彙總)時不太可行,例如select sum(pageviews)
或select count(*)
。
除了使用上面的方法還有一些自動解決方案嗎?