Разработка схемы для таблицы 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 на уровне приложения для соответствующей сортировки комментариев.
надеюсь, это поможет