Quais são as vantagens de executar o NoSQL (ex MongoDB) sobre MySQL, PostGRE SQL ou MSSQL no Drupal? As vantagens são obtidas com o simples uso do armazenamento ou alguma configuração do Drupal precisa ser alterada?
Quais são as vantagens de executar o NoSQL (ex MongoDB) sobre MySQL, PostGRE SQL ou MSSQL no Drupal? As vantagens são obtidas com o simples uso do armazenamento ou alguma configuração do Drupal precisa ser alterada?
Respostas:
O MongoDB pode ser usado para armazenar a maioria ou todas as suas entidades em um armazenamento rápido e orientado a documentos. Esse tipo de armazenamento é bem melhor do que o armazenamento padrão baseado em SQL que temos no núcleo Drupal (que é baseado no esquema "uma tabela por campo").
No estado atual do Drupal 7, você teria:
Isso permite consultas rápidas sobre as entidades no MongoDB e a capacidade de adicionar índices complexos aos quais nenhum banco de dados SQL Opensource suporta (incluindo índices entre tabelas). Ao mesmo tempo, você não perde a interoperabilidade porque a tabela base da entidade ainda está armazenada no SQL e, portanto, pode ser unida por módulos que ainda são apenas SQL (como Flag).
Esse tipo de consulta rápida está disponível graças ao mecanismo EntityFieldQuery, uma maneira de criar consultas sobre entidades, suas propriedades e seus campos de maneira abstrata. A implementação padrão no núcleo converte essas consultas para SQL, mas o módulo MongoDB possui uma implementação completa que pode atender diretamente a essas consultas do MongoDB.
Graças ao back-end EntityFieldQuery para Views , você pode aproveitar facilmente esse poder usando as ferramentas às quais está acostumado. A única desvantagem é que os relacionamentos não são suportados (mas, na prática, você raramente precisa deles de qualquer maneira - e isso pode ser contornado ao inserir dados adicionais no objeto da entidade e adicionar a exposição deles como propriedades adicionais da entidade).
Em poucas palavras, assim que o desempenho da consulta é um problema no seu projeto, o que acontece assim que você tem um conjunto de dados significativo (digamos, começando em alguns décimos de milhares de entidades em um determinado tipo de entidade), o MongoDB é um ganho líquido por pouquíssimas desvantagens. Altamente recomendado.
O MongoDB e similares são projetados para armazenar dados estruturados (hierárquicos) de uma maneira relativamente flexível.
Por exemplo Drupal 7
, ao usar field_sql_storage
, cada campo obtém suas próprias tabelas. Quando você anexa 10 campos a um tipo de conteúdo, você acaba com 10 tabelas no seu banco de dados. Quando você carrega esse nó, field_sql_storage
executará uma consulta por campo e por nó (ou vários nós, ao usar node_load_multiple
).
Ao usar mongodb_field_storage , você pode armazenar todos os campos de um nó em um único documento e obter uma única consulta.
Você também pode armazenar outras coisas, como watchdog, sessões, cache, blocos no MongoDB .
Você ainda precisa do MySQL, no entanto, o MongoDB não o substitui (apenas para partes específicas).
Outra vantagem é que, com o MongoDB , é mais fácil escalar, você pode adicionar muitos servidores a um cluster para compartilhar os dados entre eles.
Os profissionais vêm com contras.
O Drupal como um todo não pode ser alternado para o MongoDb, portanto você terá que suportar dois bancos de dados e garantir que eles funcionem bem juntos.
Muitos módulos não poderão trabalhar com o mongodb, assim você perderá a interoperabilidade.
A menos que você tenha uma necessidade premente (como parte do seu sistema não está lidando com o número de solicitações / ou quantidade de dados), eu não trocaria. E mesmo quando você começa a se aproximar dos limites, lance o hardware para o problema ou ajuste antes de mudar.
Eu pensei que tinha respondido isso antes, há quase uma duplicata no SO