我有以下要求來實現這對我造成了一個「難題」:
我有Web服務器和各種用戶(已驗證和登錄)訪問網站的各個區域(即按照並瀏覽各種鏈接)。這些操作(或稱爲瀏覽)正在被記錄到日誌文件中。
因此,這些文件捕獲用戶訪問服務器的日期以及訪問的各種鏈接(即URL)。
的記錄(說明目的)簡化格式可以如下:
Timestamp User-Name URL-1
所以給日誌的一個簡單的例子,我們可以有(假設此有效日期):最常訪問的URL最大序列
Date-1 John URL-1
Date-1 Nick URL-1
Date-1 John URL-2
Date-1 George URL-1
Date-1 George URL-2
Date-1 Eve URL-2
Date-1 Nick URL-2
Date-1 John URL-3
Date-1 George URL-3
Date-1 John URL-5
Date-1 Nick URL-3
Date-1 Bill URL-2
Date-1 George URL-5
Date-1 Nick URL-5
Date-1 Eve URL-3
Date-1 Eve URL-5
等等,並可以有人/數千條目
當我說URL-1
我的意思是一個有效的網站的URL,所以URL-1
在約翰和夏娃真的意味着他們都訪問了相同的鏈接。在此示例中,URL-2,URL-3,URL-5
是最常用的訪問URL序列。
問題:我有興趣使用這些信息,並找到所有用戶在日誌文件覆蓋的整個日期時間範圍和/或特定日期時間訪問的最常訪問的URL序列。
我對如何去做這件事有一些想法。例如。我的第一個想法是將所有內容都存儲在HashMaps
中,幷包含每個外觀的計數器,然後遍歷映射條目以查找最大值,但在我看來,它在空間和運行時都有巨大的開銷。
此外,我對此的看法越多,似乎它可能有一個「標準」解決方案,例如對於字符串模式匹配,則會遵循KMP algorithm
。
然後我想我是否可以使用例如後綴樹,但我只知道實施一個trie和空間複雜性,這將是我相信O(N^2)
。我知道有壓縮版本,但我認爲它們太複雜,如果有更好的/標準的解決方案來解決這個問題,我不想浪費時間。
任何建議/意見非常感謝。
請說清楚,你正在說** **序列的網址**?或關於分開的**網址**? – Andremoniy
@Andremoniy:我不明白你的問題。我的意思是'URL-2,URL-3,URL5'.這是訪問的訂單 – Cratylus
我認爲你應該考慮一個數據庫來存儲你的網站點擊率。每次您重新啓動應用程序時,都必須重新解析所有日誌文件,這會造成大量開銷。當它在一個數據庫中時,你可以查詢你所需要的。 – tom