2013-02-05 72 views
2

我目前正在開發一個Web應用程序,客戶想要在網站上的用戶活動周圍存儲數據。這不屬於Google Analytics可以提供的範圍。在網站上收集用戶活動數據

我目前有一個很好的簡單的數據庫結構,所有的表都與網站的核心功能有關。

我有點吝嗇在添加大量表到數據庫模式來記錄用戶活動。通過添加服務來記錄用戶在網站上的活動,也會使代碼庫變得泥濘。他們想記錄什麼

的例子是:

  • 登錄現有用戶
  • 明確註銷由用戶通過管理員
  • 用戶的
  • 變化
  • 密碼重置/更改
  • 密碼重置用戶帳戶(例如授予/刪除管理員權限或 個人資料更改,如果我們有個人資料)

他們可能還需要記錄

  • 搜索參數輸入到搜索表單
  • 任何(內容)頁面的訪問
  • 選擇任何(內容)鏈接
  • 語言選擇

所以我的問題是:

  • 我應該只是將此功能添加到數據庫和項目?
  • 我是否應該儘可能將其分開,可能將此分析數據存儲在單獨的數據庫中,或可能在不同的 模式中爲分析服務創建單獨的項目。
  • 是否還有其他選擇?

我只是覺得記錄這些數據會批量代碼庫和數據庫,並且只有很少的收穫......。

回答

1

將此功能添加到您的項目中。但不是你的數據庫。 而是將其存儲爲日誌。

我從來不喜歡把它放入數據庫(特別是你的生產數據庫)的想法,因爲對這個數據庫的任何查詢都會影響你的系統性能。

但是,您還需要創建一個批處理作業來讀取此日誌,並從中生成所需的任何數據。

如果日誌變得這麼大,你應該去Map Reduce的方法。使用Hadoop,Hive或任何類似的產品。

0

我至少會考慮製作一個通用表來記錄任何活動。像這樣:

 

event_id int, 
event_name nvarchar(100), 
event_date smalldatetime, 
user_id int, 
source_page nvarchar(100), 
additional_info nvarchar(5000) 
 

你可以使覆蓋大多數情況下,我會想象。只是一個想法,可以寫一個大的文本字段,你可能會寫一些序列化的JSON。這只是一個可以存儲一些結構化文本的blob。

沿着這些相同的路線,您可以創建一個單獨的數據庫來存儲無模式數據,這將更容易寫入,並且如果您以後想要註銷註銷,則不必修改現有數據庫。

此外,還檢查了面向方面的編程,以便進行日誌記錄調用。這可以讓你的方法非常乾淨,同時允許記錄和事件。對於可能是Aspect J的Java(http://eclipse.org/aspectj/)和.NET的PostSharp(http://www.sharpcrafters.com/aop.net)。

無論如何,如你所說,我會實現一個小腳印,可以很容易地刪除的東西。

相關問題