Il existe de nombreuses solutions NoSQL, chacune avec ses forces et ses faiblesses. Par conséquent, les mesures suivantes doivent être prises avec un grain de sel.
Cependant, de nombreuses bases de données NoSQL reposent sur la dénormalisation et tentent d’optimiser pour le cas dénormalisé. Par exemple, supposons que vous lisiez un article de blog avec ses commentaires dans une base de données orientée document. Souvent, les commentaires sont enregistrés avec le message lui-même. Cela signifie qu'il sera plus rapide de les récupérer tous ensemble, car ils sont stockés au même endroit et vous n'avez pas à effectuer de jointure.
Bien sûr, vous pouvez faire la même chose en SQL et la dénormalisation est une pratique courante lorsque l’on a besoin de performances. C'est juste que beaucoup de solutions NoSQL sont conçues dès le début pour être toujours utilisées de cette façon. Vous obtenez alors les compromis habituels: par exemple, l'ajout d'un commentaire dans l'exemple ci-dessus sera plus lent car vous devez enregistrer le document entier avec celui-ci. Et une fois que vous avez dénormalisé, vous devez veiller à préserver l'intégrité des données dans votre application.
De plus, dans de nombreuses solutions NoSQL, il est impossible de faire des jointures arbitraires, donc des requêtes arbitraires. Certaines bases de données, telles que CouchDB, nécessitent que vous réfléchissiez à l'avance aux requêtes dont vous aurez besoin et que vous les prépariez dans la base de données.
Au total, cela revient à attendre un schéma dénormalisé et à optimiser les lectures pour cette situation, ce qui fonctionne bien pour des données peu relationnelles et nécessitant beaucoup plus de lectures que d'écritures.