簡體   English   中英

在關系很少的數據上使用NoSQL

[英]Using NoSQL on data with few relations

我目前正在計划一項服務的開發,該服務應處理大量請求,並針對每個請求進行一些日志記錄。 每個日志將具有以下形式

{event: "EVENTTYPE", userid: "UID", itemid: "ITEMID", timestamp: DATETIME}

我希望可以完成很多寫作,而閱讀和分析每小時只能完成一次。

數據分析的要求是我必須能夠執行以下查詢:是否已為用戶(UID)記錄了項目(ITEMID)上的事件A和事件B? (甚至可以根據時間戳記,判斷事件A是否早於事件B)

我已經考慮過將MongoDB作為我的存儲解決方案。

  • 上面的查詢可以(正確地)由MongoDB聚合框架執行嗎?
  • 將來,我可能會增加從ITEMID到ITEM.Categories的關系的分析步驟(我有一個項目集合,每個項目都有一系列類別)。 可能很有趣的是,在過去30天內,事件A在按單個物料類別分組的物料上發生了多少次。 MongoDB會適合我的要求嗎?

有關將要使用的數據的一些信息:我希望平均每天記錄約10.000個事件。 我尚未決定是否應無限期地存儲數據。

  • MongoDB是否適合我的要求? 是否有另一個NoSQL數據庫可以更好地滿足我的要求? NoSQL在這種情況下是否還可用,還是我最好還是堅持使用關系數據庫?
  • 如果我對分析頻率的要求發生變化,請說從每小時一次到實時一次。 我相信Redis會比MongoDB更好地達到我的目的,這是否正確理解?

是否已為用戶(UID)記錄了項目(ITEMID)上的事件A和B? (甚至可能根據時間戳記事件A是否在事件B之前出現)上面的查詢是否可以(適當地)由MongoDB聚合框架執行?

是的,一點沒錯。 您可以使用$group運算符按ITEMID,UID匯總事件,可以在分組之前通過$match過濾結果以將其限制為特定時間段,也可以使用任何其他過濾器進行過濾,並且可以按時間(第一個,最后一個) $group運算符創建的文檔中每種事件的類型。 然后,如果需要,可以使用$project創建一個字段,該字段指示先於先后的內容。

聚合框架的所有功能均在此處概述:

http://docs.mongodb.org/manual/core/aggregation-pipeline/

將來,我可能會增加從ITEMID到ITEM.Categories的關系的分析步驟(我有一個項目集合,每個項目都有一系列類別)。 可能很有趣的是,在過去30天內,事件A在按單個物料類別分組的物料上發生了多少次。 MongoDB會適合我的要求嗎?

是。 MongoDB中的聚合使您可以$unwind數組,以便您可以按類別對事物進行分組。 您描述的所有內容都可以通過聚合框架輕松完成。

MongoDB是否適合您的應用程序不在本站點范圍內,但是您在此問題中列出的要求可以在MongoDB中實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM