Каковы преимущества запуска NoSQL (ex MongoDB) над MySQL, PostGRE SQL или MSSQL в Drupal? Получаются ли преимущества от простого использования хранилища или нужно изменить какую-то конфигурацию Drupal?
Каковы преимущества запуска NoSQL (ex MongoDB) над MySQL, PostGRE SQL или MSSQL в Drupal? Получаются ли преимущества от простого использования хранилища или нужно изменить какую-то конфигурацию Drupal?
Ответы:
MongoDB может использоваться для хранения большинства или всех ваших объектов в быстром, ориентированном на документы хранилище. Этот тип хранилища масштабируется намного лучше, чем стандартное хранилище на основе SQL, которое мы имеем в ядре Drupal (которое основано на схеме «одна таблица на поле»).
В текущем состоянии Drupal 7 у вас будет:
Это позволяет быстро запрашивать объекты в MongoDB и добавлять сложные индексы, которые не поддерживаются базой данных Opensource SQL (включая индексы по таблицам). В то же время вы не потеряете совместимость, потому что базовая таблица сущности все еще хранится в SQL и, таким образом, может быть объединена с модулями, которые все еще только для SQL (например, Flag).
Этот тип быстрых запросов доступен благодаря механизму EntityFieldQuery, способу абстрактного построения запросов к сущностям, их свойствам и их полям. Реализация по умолчанию в ядре переводит эти запросы в SQL, но модуль MongoDB имеет полнофункциональную реализацию, которая может удовлетворить эти запросы непосредственно из MongoDB.
Благодаря бэкэнду EntityFieldQuery для Views вы можете легко использовать эту мощь, используя инструменты, к которым вы привыкли. Единственным недостатком является то, что отношения не поддерживаются (но на практике они вам все равно редко нужны - и это можно обойти, добавив дополнительные данные в объект сущности и добавив их в качестве дополнительных свойств сущности).
Короче говоря, как только производительность запроса становится проблемой для вашего проекта, что происходит, как только у вас есть значительный набор данных (скажем, начиная с нескольких десятых тысяч сущностей для данного типа сущности), MongoDB является чистым выигрышем за очень мало недостатков. Настоятельно рекомендуется.
MongoDB и аналогичные предназначены для хранения структурированных (иерархических) данных относительно гибким способом.
Например Drupal 7
, при использовании field_sql_storage
каждое поле получает свои собственные таблицы. Когда вы присоединяете 10 полей к типу контента, в вашей базе данных получается 10 таблиц. При загрузке этого узла field_sql_storage
будет выполняться запрос для каждого поля и для каждого узла (или нескольких узлов при использовании node_load_multiple
).
Когда вы используете mongodb_field_storage , вы можете хранить все поля узла в одном документе и получать с помощью одного запроса.
Вы также можете хранить другие вещи, такие как сторожевой таймер, сессии, кеш, блоки в MongoDB .
Тем не менее, вам все еще нужен MySQL, MongoDB не заменяет его (только для определенных частей).
Еще одним преимуществом является то, что с MongoDB проще масштабировать, вы можете добавить много серверов в кластер, чтобы обмениваться данными между ними.
Плюсы идут с минусами.
В целом Drupal нельзя переключить на MongoDb, поэтому вам придется поддерживать две базы данных и убедиться, что они хорошо работают вместе.
Многие модули не смогут работать с mongodb, поэтому вы потеряете совместимость.
Если у вас нет острой необходимости (например, часть вашей системы не справляется с количеством запросов / или количеством данных), я бы не стал переключаться. И даже когда вы начинаете приближаться к пределам, перед переключением обратите внимание на аппаратную проблему или настройку.
Я думал, что я ответил на это раньше, на SO есть почти дубликат