2012-04-28 67 views
2

MongoDB的新手,接受分析任務並有模式問題。MongoDB分析模式

我從SQL服務器,在那裏我有4個表來了...

stats_landing_table 
------------------- 
id 
post_id 
visit_date 
country 
browser 
impressions 

stats_geo_table 
--------------- 
id 
post_id 
date 
country 
country_count 

stats_browser_table 
------------------- 
id 
post_id 
date 
browser 
browser_count 

stats_impressions_table 
----------------------- 
id 
post_id 
date 
impression_count 

與着陸表 - 我只是把所有的數據到那裏每次 - 沒有更新,只是插入。在那裏,我有一個觸發器查看其他表並執行相應的更新或插入,然後刪除登陸表中的條目。

因此,我需要FAST插入/更新,並能夠根據整個或特定的時間範圍返回並顯示關於帖子(國家,瀏覽器,展示等)的每個屬性的報告。

對於Mongo,它歸結爲我是應該嵌入還是具有單獨的文檔,或者我猜是完全不同的模式。如果我嵌入,我試圖弄清楚如何更新瀏覽器表格等內容,同時還要檢查國家和更新展示次數。這聽起來像我需要爲每件事情單獨更新(例如,這個vistor使用來自德國的firefox,而這個是來自芬蘭的firefox - 不能在我看到的單個查詢中做到這一點)。另一種選擇是做不同的文檔,但這是同樣的問題 - 我需要爲每個集合執行一次更新 - 這與SQL服務器單次調用相比有很多網絡流量。

對於如何設計類似的東西,我願意提供任何建議,允許快速的性能更新/插入,同時仍然允許報告。

+0

可能看一個nosql教程,並參加嵌入和規範化文檔(表)。 – hpavc 2012-04-28 17:47:24

回答

3

根據我對這種情況的理解,這三張表是摘要表,其中日期,post_id和瀏覽器或國家情況下的給定度量的唯一組合被記錄。

我會一起跳過插入表,因爲您今天不保留它,並將它作爲隊列使用或多或少。

隨着MongoDB的寫入將全部寫入內存,所以它非常快。它也可以異步完成(火和忘記它的風格)。

我會爲每個唯一日期和post_id創建一個新文檔。它有兩個數組,一個用於瀏覽器,另一個用於國家代碼或瀏覽器,鍵值爲count。該文檔還會有一個用於展示次數的字段。

每次訪問都會更新單個文檔並且很容易查詢。

更新將使用原子操作符「$ inc」來增加服務器上的原子計數,因此不需要引入任何數據來執行更新。這將是一個非常少量的數據傳輸。

這是否回答這個問題?

+0

這實際上是我最終做的。 – QuaffAPint 2012-05-01 16:42:05