SimpleDB har vissa skalbarhetsbegränsningar. Du kan bara skala genom att skära och den har högre latens än mongodb eller cassandra, den har en genomströmningsgräns och den är prissatt högre än andra alternativ. Skalbarhet är manuell (du måste skära).
Om du behöver bredare frågealternativ och du har en hög läshastighet och du inte har så mycket data är mongodb bättre. Men för hållbarhet måste du använda minst 2 mongodb-serverinstanser som master/slav. Annars kan du förlora den sista minuten av dina data. Skalbarhet är manuell. Det är mycket snabbare än simpledb. Autosharding är implementerad i version 1.6.
Cassandra har svaga frågealternativ men är lika hållbar som postgresql. Det är lika snabbt som mongo och snabbare på högre datastorlek. Skrivoperationer är snabbare än läsoperationer på Cassandra. Det kan skalas automatiskt genom att avfyra ec2-instanser, men du måste modifiera konfigurationsfilerna lite (om jag minns rätt). Om du har terabyte data är Cassandra din bästa insats. Du behöver inte dela dina data, den designades distribuerad från den första dagen. Du kan ha valfritt antal kopior av all din data och om vissa servrar är döda kommer den automatiskt att returnera resultaten från live och distribuera den döda serverns data till andra. Det är mycket feltolerant. Du kan inkludera valfritt antal instanser, det är mycket lättare att skala än andra alternativ. Den har starka .net- och java-klientalternativ. De har anslutningspoolning, lastbalansering, märkning av döda servrar,...
Ett annat alternativ är hadoop för big data men det är inte lika realtid som andra, du kan använda hadoop för datawarehousing. Varken cassandra eller mongo har transaktioner, så om du behöver transaktioner passar postgresql bättre. Ett annat alternativ är Amazon RDS, men dess prestanda är dålig och priset är högt. Om du vill använda databaser eller simpledb kan du också behöva datacache (t.ex. memcached).
För webbappar, om din data är liten rekommenderar jag mongo, om den är stor är cassandra bättre. Du behöver inget cachinglager med mongo eller cassandra, de är redan snabba. Jag rekommenderar inte simpledb, den låser dig också till Amazon som du sa.
Om du använder c#, java eller scala kan du skriva ett gränssnitt och implementera det för mongo, mysql, cassandra eller något annat för dataåtkomstlager. Det är enklare i dynamiska språk (t.ex. rub, python, php). Du kan skriva en leverantör för två av dem om du vill och kan ändra lagringen kanske under körning genom en endast en konfigurationsändring, de är alla möjliga. Utveckling med mongo,cassandra och simpledb är enklare än en databas, och de är fria från schema, det beror också på klientbiblioteket/anslutningen du använder. Den enklaste är mongo. Det finns bara ett index per tabell i cassandra, så du måste hantera andra index själv, men med 0.7-versionen av cassandra kommer sekundära index att vara möjligt som jag vet. Du kan också börja med någon av dem och ersätta den i framtiden om du måste.