SimpleDB presenta alcuni limiti di scalabilità. È possibile ridimensionare solo in base allo sharding e ha una latenza maggiore rispetto a mongodb o cassandra, ha un limite di throughput e ha un prezzo più alto rispetto ad altre opzioni. La scalabilità è manuale (devi dividere).
Se sono necessarie opzioni di query più ampie e si dispone di una frequenza di lettura elevata e non si dispone di tanti dati, mongodb è migliore. Ma per la 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. Autosharding è implementato nella versione 1.6.
Cassandra ha opzioni di query deboli ma è resistente come postgresql. È veloce come mongo e più veloce con una maggiore dimensione dei dati. Le operazioni di scrittura sono più veloci delle operazioni di lettura su cassandra. Può scalare automaticamente sparando istanze ec2, ma è necessario modificare un po 'i file di configurazione (se non ricordo male). Se hai terabyte di dati, la cassandra è la soluzione migliore. Non è necessario dividere 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 da quelli attivi e distribuirà i dati del server morto ad altri. È altamente tollerante ai guasti. Puoi includere un numero qualsiasi di istanze, è molto più semplice scalare rispetto ad altre opzioni. Ha forti opzioni client .net e java. Hanno pool di connessioni, bilanciamento del carico, marcatura di server morti, ...
Un'altra opzione è hadoop per i big data ma non è in tempo reale come altri, è possibile utilizzare hadoop per datawarehousing. Né cassandra né mongo hanno transazioni, quindi se hai bisogno di transazioni postgresql è una soluzione migliore. Un'altra opzione è Amazon RDS, ma le prestazioni sono negative e il prezzo è elevato. Se si desidera utilizzare database o simpledb, potrebbe anche essere necessaria la memorizzazione nella cache dei dati (ad esempio: memcached).
Per le app Web, se i dati sono piccoli, raccomando mongo, se è grande, la cassandra è migliore. Non hai bisogno di uno strato di cache con mongo o cassandra, sono già veloci. Non consiglio simpledb, ma ti blocca anche su Amazon come hai detto tu.
Se si utilizza C#, java o scala è possibile 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). È possibile scrivere un provider per due di essi, se lo si desidera, e può modificare lo spazio di archiviazione, magari in fase di esecuzione, 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, ma dipendono anche dalla libreria/connettore client che stai utilizzando. Il più semplice è mongo. C'è un solo indice per tabella in cassandra, quindi devi gestire altri indici tu stesso, ma con la versione 0.7 degli indici secondari di cassandra sarà possibile come so. Puoi anche iniziare con qualcuno di loro e sostituirlo in futuro se necessario.
"Ma per la durabilità, è necessario utilizzare almeno 2 istanze del server mongodb come master/slave, altrimenti si può perdere l'ultimo minuto dei dati.". MongoDB supporta la durabilità di un server da 1,8 – dan