Разработка схемы для таблицы 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" (--)
    }
  • (-) => Ключ раздела *
  • (-) => Ключ сортировки *
  • Пожалуйста, помогите придумать дизайн схемы для реализации функциональности комментариев и ответов *

если вы не из Динамо, просто опубликуйте формат JSON для комментариев и ответов...!

Заранее спасибо.

1 ответ

Решение

Я придумал 2 разных подхода, оба имеют свои плюсы и минусы,

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.

** Ваш ответ, в свою очередь, содержит ответ, который будет поддерживаться в подробной таблице, вы можете добавить еще один атрибут в подробную таблицу со значением true/false, которое будет показывать, что если этот комментарий имеет ответ или нет, чтобы избежать сканирования таблицы.

Проблема с приведенной выше схемой заключается в том, что если один из потоков имеет миллионы ответов, это повлияет на производительность.

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 на уровне приложения для соответствующей сортировки комментариев.

надеюсь, это поможет

Другие вопросы по тегам