たとえば、Analytics で page_type、item_id、date、pageviews、timeOnPage を記録するとします。
回避する方法はいくつかあるようです。自動的な方法はありますか?
たとえば、レコードを一意に識別するフィールドにインデックスを作成し、インデックスを一意にします
[page_type, item_id, date]
。これにより、同じレコードを追加すると拒否されます。または、DB またはフレームワークがサポートしている場合は、上記を一意のプライマリ インデックスにします。ただし、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
つまり、作成された最新のレコードを取得し、残りを無視します。select sum(pageviews)
しかし、これは 1 レコードの解決策のように見えますが、やなどの値を合計する (集計を行う) 場合にはあまり実現可能ではありませんselect count(*)
。
上記の方法を使用する以外に、自動解決策もありますか?