À mon avis, le format de vos données devrait être la principale préoccupation lors du choix d'un backend de stockage. Avez-vous des données qui sont de nature relationnelle ? Si oui, est-ce possible et est-ce une bonne idée de modéliser les données en documents ? La modélisation des données est aussi importante dans une base de données documentaire que dans une base de données relationnelle, elle est simplement effectuée différemment. Combien de types d'objets avez-vous et comment sont-ils reliés ? DBrefs dans Mongodb peut-il faire l'affaire ou les clés étrangères vous manqueront-elles tellement que ce sera douloureux ? Quels sont vos modèles d'accès aux données ? Recherchez-vous uniquement des données d'un type donné, filtrées par la valeur d'un champ, ou avez-vous des modes de recherche complexes ?
Avez-vous besoin d'une intégrité transactionnelle ACID ? Le domaine impose-t-il beaucoup de contraintes sur les données ? Avez-vous besoin du facteur d'évolutivité d'une base de données de documents ou est-ce juste une chose "cool" à avoir ?
Quelles sont vos exigences en matière de cohérence et d'intégrité des données ? Certaines solutions NoSQL, et MongoDB en particulier, sont assez souples en ce qui concerne la cohérence des écritures afin d'obtenir des performances. NoSQL n'est pas un paysage uniforme et d'autres produits, par exemple CouchDB, présentent d'autres caractéristiques dans ce domaine. Certains sont également réglables.
Ce sont toutes des questions qui doivent entrer en ligne de compte dans le choix du stockage.
Quelques expériences
- L'établissement de rapports détaillés sur les données stockées peut s'avérer plus difficile avec MongoDB ou toute autre base de données documentaire, et certains cas d'utilisation ont combiné un SGBDR et une base de données documentaire à cette fin.
- (Très) Modèle d'interrogation différent. MongoDB diffère également des autres bases de données documentaires.
- Possibilité de modifier le format et le schéma des données pendant le développement.
- Territoire inconnu
- degré variable de maturité des moteurs et des cadres
- Rapidement
- Des outils de production et de gestion plus simples (à bien des égards) que ceux de nombreux SGBDR.
- Plus de déséquilibre d'impédance. Le stockage s'adapte aux données, et non l'inverse.
- Moins de frictions et un accès plus direct aux données.
- Domaine plus lié à la persistance (selon le "niveau" ORM de NoRM, selon le degré d'abstraction du backend. Je n'ai pas utilisé NoRM donc je ne peux pas répondre à cette question).