2017-01-19 4 views
1

Я веб-сайт, посвященный новостной бумаге.Как структурировать данные JSON в mongoDB?

Сайт содержит статьи, содержащие заголовок, текст, временную метку, автора и раздел комментариев.

Раздел комментариев содержит комментарии от самых разных пользователей, которые могут комментировать статью, оставлять комментарии и отвечать на другие комментарии.

Я использую MongoDB (новичок), и мой вопрос заключается в том, что было бы keept в объекте JSON.

Например, будет ли каждая статья новостей представлять собой один объект со всеми комментариями пользователя внутри него. Или было бы более читаемым иметь каждый текст/комментарий как собственный объект.

{"article": { 
"id": "title of article", 
"text": "text of article", 
"author": "author of article", 
"date": "date", 
"comment_section": { 
    "user": "username", 
    "text": "text from comment", 
    "upvotes": int, 
}, 
}} 

Или что-то вроде:

{"text": { 
    "text_type": "article text or comment", 
    "text": "text of article or comment", 
    "date": "date", 
    "author": "author of article or comment author", 
    "upvotes": int, 
}} 

Если первый пример будет иметь меньше объектов, но много вещей в них, и последний, множество объектов, а не много данных в них.

Спасибо.

ответ

0

Полная мощность json заключается в том, что она является деревом, поэтому один документ может содержать все его данные внутри. Вы можете добавлять индексы в поддокументах и ​​проекциях для запроса только необходимых частей вашего документа.

Однако, если вы ожидаете иметь огромные разделы комментариев, встроенные комментарии могут быть проблемой, так как тогда mongodb должен прочитать весь документ, добавить новый комментарий в список комментариев и записать его обратно.

В идеале вы бы выбрали среднее решение: сохраните комментарии вложенными до тех пор, пока их не будет меньше 20-50 (которые также отображаются вместе со статьей и кнопкой «Следующие комментарии»), а затем переключитесь на сохранение входящие комментарии в сборнике замечаний. Таким образом, вы можете сделать свою статью одним запросом mongo, эффективно создавая один запрос манго для каждого взаимодействия с пользователем, что является предпочтительным способом проектирования БД.

С помощью mongo вам всегда придется использовать размер объекта + количество обновлений по сравнению с затратами на извлечение этих данных во внешнюю коллекцию и выполнение дополнительных запросов против него.

+0

Как я понял, вы предлагаете первый вариант, вы также предлагаете хранить все разные статьи новостей в том же объекте? – Isbister

+0

По моему опыту, я предлагаю иметь коллекцию статей и хранить первые N комментариев, которые вы планируете отображать на странице, в любом случае, там тоже. Так что для рендеринга страницы статьи вы получаете все данные в одном запросе mongo. Если у вас больше N комментариев, добавьте дополнительную информацию в отдельную коллекцию, потому что она может легко вырасти до тысячи комментариев по одной статье, что сделает документ статьи слишком дорогостоящим для чтения или изменения. –

 Смежные вопросы

  • Нет связанных вопросов^_^