Ci sono molte soluzioni NoSQL in giro, ognuna con i suoi punti di forza e di debolezza, quindi il seguente deve essere preso con un pizzico di sale.
In sostanza, ciò che molti database NoSQL fanno è fare affidamento sulla denormalizzazione e cercare di ottimizzare il caso denormalizzato. Ad esempio, supponi di leggere un post sul blog insieme ai suoi commenti in un database orientato ai documenti. Spesso i commenti verranno salvati insieme al post stesso. Ciò significa che sarà più veloce recuperarli tutti insieme, poiché vengono memorizzati nello stesso posto e non è necessario eseguire un join.
Ovviamente, puoi fare lo stesso in SQL, e denormalizzare è una pratica comune quando hai bisogno di prestazioni. È solo che molte soluzioni NoSQL sono progettate sin dall'inizio per essere sempre utilizzate in questo modo. Si ottengono quindi i soliti compromessi: ad esempio, l'aggiunta di un commento nell'esempio precedente sarà più lenta poiché è necessario salvare l'intero documento con esso. E una volta denormalizzato, devi prenderti cura di preservare l'integrità dei dati nella tua applicazione.
Inoltre, in molte soluzioni NoSQL, è impossibile eseguire join arbitrari, quindi query arbitrarie. Alcuni database, come CouchDB, richiedono di pensare in anticipo alle query necessarie e prepararle all'interno del DB.
Tutto sommato, si riduce ad aspettarsi uno schema denormalizzato e ad ottimizzare le letture per quella situazione, e questo funziona bene per i dati che non sono altamente relazionali e che richiedono molte più letture rispetto alle scritture.