
Учебник: Использование 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" })