Na minha opinião, o formato dos seus dados deve ser a principal preocupação ao escolher um back-end de armazenamento. Você tem dados que são de natureza relacional? Em caso afirmativo, pode e é uma boa ideia modelar os dados em documentos? A modelagem de dados é tão importante em um banco de dados de documentos quanto em um banco de dados relacional, apenas diferente. Quantos tipos de objetos você tem e como eles estão relacionados? DBrefs no Mongodb pode fazer o truque ou você perderá tanto as chaves estrangeiras que será doloroso? Quais são seus padrões de acesso aos dados? Você está apenas buscando dados de um tipo filtrado por um valor de campo ou possui modos de busca complexos?
Você precisa de integridade transacional ACID? O domínio impõe muitas restrições aos dados? Você precisa do fator de escalabilidade de um banco de dados de documentos ou isso é apenas uma coisa "legal" de se ter?
Quais são seus requisitos de consistência e integridade de dados? Algumas soluções NoSQL e o MongoDB em particular são bastante frouxos na consistência de gravação para obter desempenho. NoSQL não é uma paisagem uniforme e outros produtos, por exemplo. O CouchDB tem outras características neste departamento. Alguns também são ajustáveis.
Estas são todas as perguntas que devem entrar na escolha do armazenamento.
Algumas experiências
- Fazer relatórios extensivos sobre os dados armazenados pode ser mais difícil ao usar o MongoDB ou qualquer banco de dados de documentos e alguns casos de uso combinam RDBMS e document-db para essa finalidade.
- (Muito) Modelo de consulta diferente. O MongoDB também difere de outros document-dbs.
- Flexível para alterar o formato/esquema dos dados durante o desenvolvimento
- Território desconhecido
- vários graus de maturidade em drivers e frameworks
- Rápido
- Ferramentas de produto e gerenciamento mais simples (em muitos aspectos) (em comparação com muitos produtos RDBMS)
- Não há mais incompatibilidade de impedância. O armazenamento se ajusta aos dados, e não o contrário.
- Menos atrito e acesso mais direto aos dados.
- Domínio mais vinculado à persistência (dependendo do "nível" do ORM do NoRM, de quanto ele abstrai do back-end. Não usei o NoRM, então não posso responder isso.)