1

我對設計一個簡單的論壇感興趣,用戶可以發佈主題,發表評論和回覆特定評論。Dynamo Db表或等效Nosql Db的架構設計論壇

我發現它來非常困難了架構/數據庫模型來實現的評論和回覆功能

模式,爲用戶和線程

{ 
     name  : "Krishnakanth", 
     username : "krish", (-) 
     password : "rbswew424", 
     age  : 21, 
     hometown : "abc", 

    } 
     *Threads* 
    { 
     name   : "someName", 
     threadId  : "someID",(-) 
     username  : "someName, 
     timeOfCreation : "time in some standard format" (--) 
    } 
  • ( - )=>分區鍵*
  • ( - )=>排序鍵*
  • 好心幫助拿出架構設計來實現評論和回覆功能*

如果您來自非Dynamo數據庫背景只是張貼評論和回覆功能的JSON格式..!

在此先感謝。

回答

1

我想出了兩種不同的方法都有自己的優點和cos,

1)模式,而不StringSet

threadMaster(threadId-hash, timestamp, otherAttributes) 
threadDetails(threadId- hash, replyId-range, timestamp, otherAttributes) 

數據在此架構看起來像:

threadMaster: 
t1, 31-11-2016:10:30 
t2, 31-11-2016:09:34 
t3, 31-11-2016:11:30 

threadDetails: 
t1, r1, 31-11-2016:10:33 
t1, r2, 31-11-2016:11:09 
t1, r3, 31-11-2016:13:20 
r1, r1, 31-11-2016:10:38 ** 
r1, r2, 31-11-2016:10:44 ** 

在上面的模式中,theadMaster將保存將傳遞給細節表的主要threadId以獲得一個回答那個特定的threadId。

**您的回覆在回覆中將有詳細的表格維護,您可以在詳細信息表中添加另一個具有真/假值的屬性,這將顯示如果此回覆有回覆或不回覆掃描表。

上述模式的問題是,如果其中一個線程有數百萬的回覆,那麼會對性能產生影響。

2)隨着StringSet

threadMaster(threadId-hash, replyId(Set of Ids), timestamp, otherAttributes) 
threadDetails(replyId- hash, timestamp, otherAttributes) 

數據在此架構看起來像:

threadMaster: 
t1, [r1,r2,r3..rn], 31-10-2016:10:18 
t2, [r11,r12,r13..r1n], 11-11-2016:20:00 
t3, [r21,r22,r33..r2n], 21-11-2016:00:30 
r4, [r99,r98] ** 

threadDetails: 
r1 31-11-2016:10:30 
r2 31-11-2016:11:20 
r99 01-11-2016:11:20 

在上述模式中,你掌握了表將有關於線程和該國的信息。

**當有回覆您的評論時,您將在主人中作爲另一個線索本身。

上述模式的問題是,添加/刪除註釋將是乏味的,每個回覆你必須更新主線程。

您可以在應用程序級別使用timestamp屬性來相應地對評論進行排序。

希望可以幫到