2010-08-17 124 views
3

什麼是最好的數據庫模型來存儲用戶訪問和計數唯一用戶使用IP在1.000.000行的大數據庫中的例子?PHP和MySQL統計系統

SELECT COUNT(DISTINCT ip) FROM visits 

但與1.000.000不同的ip它可以是一個緩慢的查詢。緩存不會返回實數。

大型統計系統統計獨特訪問量?

回答

2

具有唯一IP列,並在其上UNIQUE索引的另一MyISAM表。你會得到正確的計數在任何時間(MyISAM數據緩存表中的行數)

如果您還需要計算每個IP訪問[評論後加],增加一個列visitCount和使用

INSERT INTO 
    visitCounter (IP,visitCount) 
VALUES 
    (INET_ATON($ip),1) 
ON DUPLICATE KEY UPDATE 
    SET visitCount = visitCount+1 
+0

@ Mchl如果IP列是UNIQUE,那麼這個表總是返回COUNT = 1每IP? – Frankie 2010-08-17 20:11:25

+0

它會,但我明白,威廉要計算所有不同的IP數量,這仍然可以通過添加一個'count'字段和使用'INSERT ... ON DUPLICATE KEY UPDATE ...'語法來增加它。 – Mchl 2010-08-17 20:19:22

+0

對於獨特的訪問是一個很好的解決方案。保存唯一的IP和實際的時間戳 – Wiliam 2010-08-17 20:21:11

2

請勿爲此使用關係數據庫。它不是爲了存儲這種類型的信息而設計的。

您可以嘗試一個NoSQL 數據庫Mongo(我知道很多地方使用它們進行日誌記錄,因爲它的開銷很小)。

如果你必須使用MySQL堅持,你可以添加索引到ip列應顯著加快東西......

+2

這就是我的建議。另外,請考慮計算唯一用戶的概念。只需計算一次,然後重新使用它。昨天唯一訪客的數量不會改變。上週唯一身份訪問者的數量也不會改變.. – dwich 2010-08-17 20:07:45

+2

基於此,您可以每天/每週/每月/無論分​​片,併爲每個新時期創建一個新表。這樣,你仍然保留這些信息(如果你真的需要它),並獲得處理相對較小表格的性能收益。但我必須問,爲什麼你需要保留那麼多的數據?爲什麼不每天總結一次,然後在一兩個月後刪除? – ircmaxell 2010-08-17 20:12:17

+0

我知道如何使用索引...我只是要求爲高填充數據庫的數據庫模型。我需要保存所有數據,因爲我的框架需要不同服務器中的所有客戶端的所有信息以用於統計和其他事情。謝謝 (有什麼更快,INDEX IP,或另一種解決方案,使獨特的IP表嗎?) – Wiliam 2010-08-17 20:24:56