Существует приложение для микроблогов. Два основных базовых хранилища баз данных: MySQL или MongoDB.
Я планирую денормализовать массу данных I.e. Голосование, сделанное по почте, хранится в таблице для голосования, а также счет увеличивается в таблице главных должностей. Есть и другие действия, связанные с этим сообщением (например, "Голос" ).
Если я использую MySQL, некоторые данные лучше подходят для JSON, чем для фиксированной схемы, для более быстрого поиска.
например.
POST_ID | activity_data
213423424 | { 'likes': {'count':213,'recent_likers' :
['john','jack',..fixed list of recent N users]} , 'smiles' :
{'count':345,'recent_smilers' :
['mary','jack',..fixed list of recent N users]} }
Существуют и другие компоненты приложения, где предлагается использование JSON. Итак, чтобы обновить поле JSON, последовательность:
-
Прочитайте JSON в python script.
-
Обновите JSON
-
Сохраните JSON обратно в MySQL.
Это была бы единственная операция в MongoDB с атомными операциями типа $push
, $inc
, $pull
и т.д. Также
документальная структура MongoDB хорошо подходит для моих данных.
Мои соображения при выборе хранилища данных.
Относительно MySQL:
- Стабильный и знакомый.
- Резервное копирование и восстановление легко.
- Некоторые будущие изменения схемы можно избежать, используя некоторые поля в качестве схемы JSON.
- Возможно, придется сначала использовать слой memcached.
- JSON blobs будет статичным в некоторых таблицах, таких как основные сообщения, однако будет обновляться в некоторых других таблицах, таких как "Голоса и пожелания".
Относительно MongoDB:
- Лучше подходит для хранения схемы меньше данных в качестве документов.
- Кэширование можно было бы избежать до более позднего этапа.
- Иногда приложение может интенсивно писать записи, MongoDB может работать лучше в тех точках, где небезопасные записи не являются проблемой.
- Не уверен в стабильности и надежности.
- Не уверен, насколько легко выполнить резервное копирование и восстановление.
Вопросы:
- Можно ли выбрать MongoDB, если половина данных является схематичной и хранится как JSON при использовании MySQL?
-
Некоторые данные, такие как основные сообщения, имеют решающее значение, поэтому они будут сохранены с помощью безопасной записи, счетчиков и т.д. будут сохранены с помощью небезопасной записи. Является ли эта политика основанной на важности данных и правильной написания?
-
Насколько легко отслеживать, создавать резервные копии и восстанавливать MongoDB по сравнению с MySQL? Нам нужно планировать периодические резервные копии (скажем, ежедневно) и легко восстанавливать их в случае катастрофы. Каковы лучшие варианты, которые у меня есть с MongoDB, чтобы сделать его безопасной ставкой для приложения.
Стабильность, резервное копирование, моментальные снимки, восстановление, более широкое внедрение. Ядерность базы данных. - причины, указывающие на меня использовать MySQL в качестве RDBMS + NoSql, даже если хранилище документов NoSQL может служить моей цели лучше.
Пожалуйста, сосредоточьте свои взгляды на выборе между MySQL и MongoDB, учитывая дизайн базы данных, который я имею в виду. Я знаю, что могут быть лучшие способы планирования дизайна базы данных с помощью RDBMS или документов MongoDB. Но это не актуальная тема моего вопроса.
ОБНОВЛЕНИЕ. Начиная с MySQL 5.7, MySQL поддерживает богатый собственный тип данных JSON, который обеспечивает гибкость данных, а также богатый запрос JSON.