Учебник: Использование MongoDB для хранения комментариев

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

Требования

  • Облачный сервер под управлением Linux (CentOS 7).
  • Установленная и запущенная MongoDB.

Комментарии на сайте являются отличным примером использования MongoDB по сравнению с традиционной реляционной базой данных. Вводимые пользователем данные (например, имя пользователя) непостоянны, что может вызвать головную боль, связанную с дублированием записей в реляционной базе данных. Комментарии могут быть представлены быстро и в большом объеме в периоды высокой посещаемости, что требует высокой производительности.

Самая большая причина выбрать NoSQL для этой цели заключается в том, что комментарии не являются реляционными. Нет необходимости хранить дополнительную информацию о каждом комментарии в нескольких таблицах. Единственные данные, которые необходимо хранить, это имя пользователя, сам комментарий, метка времени и (опционально) ID комментария, на который был дан ответ, для сайтов, где комментарии отображаются в потоковом формате.

Обзор проекта

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

Несмотря на некоторые преимущества хранения всех комментариев в виде одного документа, лучшие практики MongoDB позволяют избегать ситуаций, когда документ со временем увеличивается в размерах. Кроме того, чем больше становится документ, тем сложнее его хранить на диске. Это может вызвать значительные проблемы с производительностью чтения/записи.

В данном руководстве мы будем хранить каждый комментарий как отдельный документ.

Команда для вставки комментария в базу данных выглядит следующим образом:

db.comments.insert({
    'parent_article_id': [ID of parent article],
    'posted': ISODate("[timestamp]"),
    'author': '[Author's name]',
    'comment_body': '[Text of comment]' })
  • parent_article_id: ID статьи, в которой был оставлен комментарий.
  • author: Имя автора (поле свободной формы, не проверяется на подлинность).
  • comment_body: Текст комментария.

Создание базы данных и вставка комментария

Войдите в оболочку командной строки MongoDB:

mongodb

Создайте базу данных comment_tracker для проекта:

use comment_tracker

Вставьте первый комментарий:

db.comments.insert({
    'parent_article_id': 1,
    'posted': ISODate("2017-03-22T19:53:59.526+0000"),
    'author': 'Alice',
    'comment_body': 'Test comment' })

MongoDB ответит сообщением о том, что запись была вставлена:

>     db.comments.insert({
...         'parent_article_id': 1,
...         'posted': ISODate("2017-03-22T19:53:59.526+0000"),
...         'author': 'Alice',
...         'comment_body': 'Test comment' })
WriteResult({ "nInserted" : 1 })

Мы можем просмотреть этот комментарий (и все содержимое базы данных) с помощью команды:

db.comments.find()

Это вернет единственный комментарий, который мы вставили на данный момент:

{ "_id" : ObjectId("58d2df9d8da74c010860e576"), "parent_article_id" : 1, "posted" : ISODate("2017-03-22T19:53:59.526Z"), "author" : "Alice", "comment_body" : "Test comment" }

Добавьте второй комментарий для надежности:

db.comments.insert({
    'parent_article_id': "1",
    'posted': ISODate("2017-03-22T22:11:08.526+0000"),
    'author': `Bob`,
    'comment_body': 'Hello everyone.' })

Чтобы отобразить все комментарии к определенной статье:

db.comments.find({ 'parent_article_id': "1" })

Оцените статью
cdelat.ru
Добавить комментарий