我需要確定用戶是否已經訪問了一個頁面,以便跟蹤唯一頁面瀏覽量。優化SQL以確定每個用戶的獨特頁面瀏覽量
我已經實現了一些HTTP頭緩存,但現在我需要優化SQL查詢。
的訪問是獨特的,當:
- 對:
page_id
+user_id
在visit
表中找到 - 或對:
page_id
+session_id
發現 - 或:
page_id
+ [ip
+useragent
] - (這是另一個討論的話題,不管它應該是ip還是ip + useragent)
所以我有一個表,跟蹤用戶訪問:
visit:
page_id
user_id
session_id
useragent
ip
created_at
updated_at
現在每個用戶訪問(不命中的Cache),如果存在的話,我會更新一行。如果有任何受影響的行,我會插入新的訪問表。
這是一個或兩個查詢(假設緩存將工作,主要是兩個查詢),但行數受限於某種方式。也許最好是將所有的都存儲下來,然後在數據庫中清理數據庫。一個月?
的問題是:
- 如何應該是
visit
表結構(鍵,索引,關係到user
和page_views
表)。一些重要的字段可能爲空(例如user_id),那麼索引呢?我需要多列主鍵嗎? - 這將是最快的SQL查詢來找到唯一的用戶?
- 是這種理智的方法嗎?
我使用PostgreSQL和PDO(Doctrine ORM)。 我所有的會話都存儲在同一個數據庫中。
嗨,如果我使用隊列,我將如何知道我是否已經處理了一個唯一的用戶?我必須使用另一個數據庫來存儲「已計數的用戶」嗎? – moeseth 2017-03-05 14:06:32
@moeseth不,隊列只是爲了將工作從請求線程移開,所以響應不會延遲。您可以使用任何業務規則來檢測唯一的用戶頁面查看,以分隔監聽隊列的後臺工作人員中的唯一用戶。 – 2017-03-08 10:59:06
我相信我將不得不使用存儲系統來檢測「已計數的用戶」。是對的嗎? – moeseth 2017-03-09 06:20:27