Se i vostri dati sono "altamente relazionali", allora posso interessarvi un... uhm... database relazionale? Ha un supporto di prima classe per questo, ed è accessibile attraverso una familiare interfaccia simile a SQL (cioè SQL).
Se avete bisogno di scalabilità a causa di molti utenti, e non a causa di rapporti estremamente grandi o complessi, basta aggiungere più repliche di sola lettura e il gioco è fatto. Il caching e i refresh programmati sono estremamente utili (a volte i dati non hanno bisogno di essere "in tempo reale" - un refresh notturno è a volte sufficiente; e interrogare gli stessi dati a distanza di 1 minuto non è praticamente mai utile).
Se avete così tanti dati che non stanno più da nessuna parte (tipo, petabyte), allora forse il NoSQL può aiutare. Non è un problema che tu non abbia JOIN (a meno che tu non debba supportare report ad-hoc) perché i tuoi dati possono essere denormalizzati in entrata (a proposito, controlla le viste materializzate - questo può aumentare massicciamente le tue prestazioni di lettura in SQL normale, se lo spazio di archiviazione non è un problema).
Ma se il tuo problema di performance è dovuto a query complesse (dove il processo di "materializzazione" stesso richiede troppo tempo), allora forse controlla la roba "Big Data". Ci sono motori SQL che girano su Hadoop, per esempio Vertica (e molti altri).