SimpleDB ha alcune limitazioni di scalabilità. Puoi ridimensionare solo tramite sharding e ha una latenza maggiore rispetto a mongodb o cassandra, ha un limite di velocità effettiva e ha un prezzo più alto rispetto ad altre opzioni. La scalabilità è manuale (devi shard).
Se hai bisogno di opzioni di query più ampie e hai una velocità di lettura elevata e non hai così tanti dati, mongodb è meglio. Ma per durabilità, è necessario utilizzare almeno 2 istanze del server mongodb come master/slave. Altrimenti puoi perdere l'ultimo minuto dei tuoi dati. La scalabilità è manuale. È molto più veloce di simpledb. Il partizionamento automatico è implementato nella versione 1.6.
Cassandra ha opzioni di query deboli ma è durevole come postgresql. È veloce come mongo e più veloce su dimensioni di dati maggiori. Le operazioni di scrittura sono più veloci delle operazioni di lettura su cassandra. Può ridimensionarsi automaticamente attivando istanze ec2, ma è necessario modificare un po' i file di configurazione (se ricordo bene). Se hai terabyte di dati, cassandra è la soluzione migliore. Non c'è bisogno di partizionare i tuoi dati, è stato progettato distribuito dal 1° giorno. Puoi avere un numero qualsiasi di copie per tutti i tuoi dati e se alcuni server sono morti restituirà automaticamente i risultati di quelli attivi e distribuirà i dati del server morto ad altri. È altamente tollerante agli errori. Puoi includere un numero qualsiasi di istanze, è molto più facile da ridimensionare rispetto ad altre opzioni. Ha forti opzioni client .net e java. Hanno pool di connessioni, bilanciamento del carico, contrassegno di server morti,...
Un'altra opzione è hadoop per i big data ma non è in tempo reale come gli altri, puoi usare hadoop per il datawarehousing. Né cassandra né mongo hanno transazioni, quindi se hai bisogno di transazioni postgresql è più adatto. Un'altra opzione è Amazon RDS, ma le sue prestazioni sono pessime e il prezzo è alto. Se vuoi usare database o simpledb potresti aver bisogno anche di un caching dei dati (es:memcached).
Per le app web, se i tuoi dati sono piccoli ti consiglio mongo, se è grande è meglio cassandra. Non hai bisogno di un livello di memorizzazione nella cache con mongo o cassandra, sono già veloci. Non consiglio simpledb, ti blocca anche su Amazon come hai detto.
Se stai usando c#, java o scala puoi scrivere un'interfaccia e implementarla per mongo, mysql, cassandra o qualsiasi altra cosa per il livello di accesso ai dati. È più semplice nei linguaggi dinamici (es. rub, python, php). Puoi scrivere un provider per due di loro se vuoi e puoi cambiare lo spazio di archiviazione magari in runtime con una sola modifica della configurazione, sono tutti possibili. Lo sviluppo con mongo,cassandra e simpledb è più semplice di un database e sono privi di schemi, dipende anche dalla libreria/connettore client che stai utilizzando. Il più semplice è il mongo. C'è solo un indice per tabella in cassandra, quindi devi gestire tu stesso altri indici, ma con la versione 0.7 di cassandra gli indici secondari saranno possibili, come so. Puoi anche iniziare con uno qualsiasi di essi e sostituirlo in futuro, se necessario.