Я пришел с 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, который будет передан в таблицу подробностей, чтобы получить ll ответ для этого конкретного 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
В вышеуказанной схеме, вы овладеете таблица будет иметь информацию о потоке и его ответы.
** Когда есть ответ на ваш комментарий, вы сделаете еще одну запись в master как поток.
Проблема с приведенной выше схемой заключается в том, что комментарий добавления/удаления будет утомительным, и каждый ответ вы должны обновить главный поток.
Вы можете использовать атрибут timestamp на уровне приложения для сортировки комментариев соответствующим образом.
Надеюсь, что поможет