В настоящее время я определяю проект, в котором хранятся многопоточные деревья комментариев.
Для тех из вас, кто не знаком с тем, о чем я говорю, я объясню, что в основном каждый комментарий имеет родительский комментарий, а не просто принадлежит какой-либо теме. В настоящее время я работаю над реляционной моделью SQL Server для хранения этих данных просто потому, что это то, к чему я привык. Это выглядит так:
Id int --PK
ThreadId int --FK
UserId int --FK
ParentCommentId int --FK (relates back to Id)
Comment nvarchar(max)
Time datetime
Что я делаю, это выбираю все комментарии по ThreadId, а затем в коде рекурсивно создаю дерево объектов. Я также делаю объединение, чтобы получить такие вещи, как имя пользователя.
Мне просто кажется, что, возможно, хранилище документов, такое как MongoDB, которое представляет собой NoSql, было бы лучшим выбором для такой модели. Но я ничего не знаю об этом.
- Какие будут подводные камни, если я выберу MongoDB?
- Если я храню его в качестве документа в MongoDB, нужно ли мне включать имя пользователя в каждый комментарий, чтобы не приходилось подтягивать каждую запись пользователя по ключу, поскольку она не "реляционная"?
- Вам нужно агрессивно кэшировать "связанные" данные на объектах, которые вам нужны, когда вы используете MongoDB?
EDIT: я нашел эту статью о хранении деревьев информации в MongoDB. Учитывая, что одним из моих требований является возможность перечислять вошедшему в систему пользователю список его недавних комментариев, я сейчас сильно склоняюсь к тому, чтобы просто использовать SQL Server, потому что я не думаю, что смогу сделать что-нибудь умное с MongoDB, что приведет к реальным преимуществам производительности. Но я могу ошибаться. Я действительно надеюсь, что эксперт (или два) по этому вопросу предоставит больше информации.