用于讨论论坛的 Dynamo Db table 或等效 Nosql Db 的架构设计

Schema design for Dynamo Db table or Equivalent Nosql Db for Discussion Forum

我有兴趣设计一个简单的讨论论坛,用户可以在其中 post 一个线程,对该线程发表评论并回复特定评论。

我发现很难想出 schema/database 模型来实现评论和回复功能

用户和线程的架构

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

    }
       *Threads*
    {
      name           : "someName",
      threadId       : "someID",(-)
      username       : "someName,
      timeOfCreation : "time in some standard format" (--)
    }

如果您来自非 Dynamo 数据库背景,只需 post 评论和回复功能的 JSON 格式..!

提前致谢。

我提出了两种不同的方法,各有优缺点。

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 将持有主线程 ID,该线程 ID 将传递给详细信息 table 以获取该特定线程 ID 的所有回复。

**您的回复反过来有回复,将详细维护 table,您可以添加另一个详细属性 table 并显示 true/false 值此评论是否有回复避免扫描table.

上述架构的问题是,如果其中一个线程有数百万条回复,那么会对性能产生影响。

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

在上面的架构中,您掌握 table 将获得有关线程及其回复的信息。

** 当有回复你的评论时,你将在 master 中创建另一个条目作为线程本身。

上述架构的问题是 add/remove 评论会很乏味,每次回复都必须更新主线程。

您可以在应用程序级别使用时间戳属性对评论进行相应排序。