¿Cuáles son las ventajas de ejecutar NoSQL (ex MongoDB) sobre MySQL, PostGRE SQL o MSSQL en Drupal? ¿Son las ventajas obtenidas simplemente usando el almacenamiento o necesita cambiar alguna configuración de Drupal?
¿Cuáles son las ventajas de ejecutar NoSQL (ex MongoDB) sobre MySQL, PostGRE SQL o MSSQL en Drupal? ¿Son las ventajas obtenidas simplemente usando el almacenamiento o necesita cambiar alguna configuración de Drupal?
Respuestas:
MongoDB se puede utilizar para almacenar la mayoría o todas sus entidades en un almacenamiento rápido y orientado a documentos. Este tipo de almacenamiento se escala mucho mejor que el almacenamiento estándar basado en SQL que tenemos en el núcleo de Drupal (que se basa en un esquema de "una tabla por campo").
En el estado actual de Drupal 7, tendría:
Esto permite consultas rápidas sobre las entidades en MongoDB y la capacidad de agregar índices complejos que no son compatibles con la base de datos SQL de Opensource (incluidos los índices en las tablas). Al mismo tiempo, no pierde la interoperabilidad porque la tabla base de la entidad todavía está almacenada en SQL y, por lo tanto, puede unirse mediante módulos que todavía son solo SQL (como Flag).
Este tipo de consulta rápida está disponible gracias al mecanismo EntityFieldQuery, una forma de generar consultas sobre entidades, sus propiedades y sus campos de manera abstracta. La implementación predeterminada en core traduce esas consultas a SQL, pero el módulo MongoDB tiene una implementación con todas las funciones que puede satisfacer esas consultas de MongoDB directamente.
Gracias al backend EntityFieldQuery para Vistas , puede aprovechar fácilmente este poder, utilizando las herramientas a las que está acostumbrado. El único inconveniente es que las relaciones no son compatibles (pero en la práctica rara vez las necesita de todos modos, y esto puede solucionarse insertando datos adicionales en el objeto de entidad y agregando exponerlos como propiedades adicionales de la entidad).
En pocas palabras, tan pronto como el rendimiento de la consulta sea un problema en su proyecto, lo que sucede tan pronto como tenga un conjunto de datos significativo (digamos, comenzando en unas pocas decenas de miles de entidades en un tipo de entidad dado), MongoDB es una ganancia neta por muy muy pocos inconvenientes. Muy recomendable.
MongoDB y similares están diseñados para almacenar datos estructurados (jerárquicos) de una manera relativamente flexible.
Por ejemplo Drupal 7
, cuando se usa field_sql_storage
, cada campo obtiene sus propias tablas. Cuando adjuntas 10 campos a un tipo de contenido, terminas con 10 tablas en tu base de datos. Cuando cargue ese nodo, field_sql_storage
ejecutará una consulta por campo y por nodo (o múltiples nodos, cuando lo use node_load_multiple
).
Cuando usa mongodb_field_storage , puede almacenar todos los campos de un nodo en un solo documento y obtener una sola consulta.
También puede almacenar otras cosas como watchdog, sesiones, caché, bloques en MongoDB .
Sin embargo, todavía necesita MySQL, MongoDB no lo reemplaza (solo para partes específicas).
Otra ventaja es que con MongoDB es más fácil escalar, puede agregar muchos servidores a un clúster y compartir los datos entre ellos.
Los pros vienen con contras.
Drupal en su conjunto no se puede cambiar a MongoDb, por lo que deberá admitir dos bases de datos y asegurarse de que funcionen bien juntas.
Muchos módulos no podrán funcionar con mongodb, por lo que perderá la interoperabilidad.
A menos que tenga una necesidad apremiante (como parte de su sistema no está haciendo frente a la cantidad de solicitud / cantidad de datos), no cambiaría. E incluso cuando comience a acercarse a los límites, observe lanzar hardware al problema o ajustar antes de cambiar.
Pensé que había respondido esto antes, hay casi un duplicado en SO