2015-11-01 38 views
0

我想要試用DynamoDB並將其用於由nginx生成的access.logs,後者將用於報告儀表板,包括IP,引薦網址,引薦域,瀏覽器等等。引用數據的DynamoDB架構

初始設置將是運行nginx和CloudWatch的EC2實例,它將使用nginx實例的access.logs。

想法是,CloudWatch條目將觸發一個lambda函數,該函數將解析日誌並將其放入DynamoDB。

我不是太熟悉DynamoDB比其他我讀過,但在這裏就是我想在做這個模式的:

ID將在URL中使用nginx的打擊,這就是我們會報告。

ReferralDomain(表)

  • ID(密鑰)
  • 域(S)
  • 創建(範圍)

ReferralURL(表)

  • ID(密鑰)
  • URL(S)
  • 創建(範圍)

ReferralBrowser(表)

  • ID(密鑰)
  • 瀏覽器(S)
  • 創建(範圍)

對於其他正在報告的項目(如IP或GEO信息(ReferralCity,ReferralCountry等)),此操作將繼續進行。

對於Dynamo中的這種類型的數據,這看起來像是一個很好的模式設計嗎?最終,儀表板將針對具有日期範圍操作的特定ID,它將按URL,瀏覽器等顯示總計(聚合)列表,以及實際列出數據。另外,其中一個報告可能包含列有計數的唯一項目。例如,對於ReferralDomain,「Facebook」在特定ID的日期範圍內可能有550個計數。這可能需要在EMR內完成?

對於這種類型的數據,是否有更好的架構可供使用或應考慮Dynamo應考慮的其他因素?謝謝

+0

多少網址,我們談論在這裏? (對於哈希主鍵的一部分) –

+0

數以百萬計,是爲從nginx的 – dzm

+0

擔任我要補充,我是不會把一定的實際URL作爲ID的圖像,但可能是URL的哈希(MD5 ) – dzm

回答

0

主鍵看起來很穩固,而且你的架構可以很好地工作和擴展。

如果我正確理解nginx /你的用例 - 我不知道你爲什麼要根據屬性拆分你的表。

可以有一個表:

鏈接(表)

  • ID(主散列密鑰)
  • 創建日期(主範圍鍵)
  • referralUrl(S屬性)
  • referralDomain(S屬性)
  • referralBrowser(S屬性)
  • ...

而且由於DynamoDB是無模式您可以保留其中的一些。