Есть задача написать платформу для ведения блогов. В идеале нужны такие вещи: очередь публикаций, разные типы публикаций (анонс, статья, новость, интервью, видео с ютюба, вставить пост из ВК, вставить твит), возможность разным авторам писать одну совместную статью, модерация перед публикацией, возможность обычному пользователю предложить статью, граббер материалов из социалок и других сайтов.
То есть планируется очень много разнородного контента.
Допустим, у интервью должны быть указаны автор и действующие лица, авторов может быть несколько...
Начал проектировать... Понял, что на MySQL будет много таблиц и много сложностей в проектировании. Особенно, если в будущем добавится новый тип публикаций.
Однажды сообщество Тостера уже советовало мне воспользоваться MongoDB, для других целей, но всё же. На первый взгляд на монго мне будет проще всё это сделать.
Допустим, массив авторов:
authors{
"1" => "Вася Пупкин",
"2" => "Петя Попкин"
}
Это упростит задачи поиска материалов конкретного автора, проще будет организовать вывод авторов в шаблоне. Плюсы очевидны.
Будет проще вообще работать с выводом материалов. Проблемы две:
1) большой опыт в PHP+MySQL кодинге, но MongoDB знаю только по двум статьям с Хабра;
2) на сервере использую Vesta Control Panel... в ней нет поддержки MongoDB...
Что хочу узнать у сообщества:
1) стоит ли изучать MongoDB и кодить проект под этот тип БД? оправдают ли себя инвестиции времени?
2) первое время нужно держать несколько сайтов на одном VPS, многие используют MySQL. Есть ли бесплатное и удобное решение по типу Vesta Control Panel, но с поддержкой МонгоДБ или можно поставить Монгу поверх весты и наслаждаться жизнью?
Спасибо.
UPD1. Забыл про необходимость сделать комментарии с лайками/дислайками и вложенностью.
монга - документно-ориентированная база. Подумайте хорошенько. Если вы не планируете вводить связи между записями - то смело берите монгу. В противном случае не стоит.
nepster09: нет транзакций нет проблем. Монгу чаще всего используют для агрегации данных из реляционной базы для ускорения выборок. Для логов скажем нынче удобнее юзать эластику... да и для агрегаций данных тоже. Если честно я даже не знаю зачем сейчас может понадобиться монга. Разве что только как документно-ориентированная база, хотя опять же есть CouchDB.
Использовать монгу как основную базу данных я считаю не особо хорошей идеей. Но у всего есть исключения конечно же.
Сергей Протько: мы использовали в играх и в чатах. Там транзакции не нужны были, так как 1 запрос с пользователя, все окей. Больше не где не использовал.
при определенных допущениях можно, я использую. Но у меня страница состоит из блоков и мне просто так удобнее хранить страницы. В целом же если у меня возникнет задача введения пользователей (у меня пока только один админ) то тогда я лучше все эти вещи буду хранить в реляционке и буду делать один запрос к структуре. Ну или буду хранить все в jsonb, всеравно postgresql если что буду использовать.
nepster09: последовательности вместо убогих автоинкрементов позволяют мне убрать тонны кастылей в коде (связанные с тем что я не знаю ID записи до вставки), нормальные транзакции, проще детектить факапы миграций (я все же в команде работаю) а так же возможность обернуть практически все в транзакцию и безопасно накатить. Ну и да, всякие репликации стриминг реплики для бэкапов и т..д. Все остальные плюсы вроде postgis и т.д. весьма спорны, так как можно подключить сверху какую-нибудь эластику, но иногда удобно.
nepster09: я им не пользовался особо, только давным давно. Не вижу в нем смысла если есть эластика, которая чуть больше умеет и у нее намного больше сообщество. Попробуйте на сфинксе запилить кластеризацию серверную меток на карте. А потом погуглите готовое решение для эластики и вы найдете такое.
Сергей Протько: я чет вообще не в тему написал про кей-вал. Читаю монгодб, думаю про мемкеш/редис. :) Да на монге можно конечно такое сделать, но не так идеально как в реляционной базе. Под нельзя я имел в виду не рекомендуется)