O SimpleDB tem algumas limitações de escalabilidade. Você só pode escalar por sharding e tem maior latência que mongodb ou cassandra, tem um limite de taxa de transferência e tem um preço mais alto que outras opções. A escalabilidade é manual (você precisa fragmentar).
Se você precisar de opções de consulta mais amplas e tiver uma alta taxa de leitura e não tiver tantos dados, o mongodb é melhor. Mas para durabilidade, você precisa usar pelo menos 2 instâncias do servidor mongodb como mestre/escravo. Caso contrário, você pode perder o último minuto de seus dados. A escalabilidade é manual. É muito mais rápido que o simpledb. Autosharding é implementado na versão 1.6.
O Cassandra tem opções de consulta fracas, mas é tão durável quanto o postgresql. É tão rápido quanto o mongo e mais rápido em tamanhos de dados maiores. As operações de gravação são mais rápidas do que as operações de leitura no cassandra. Ele pode ser dimensionado automaticamente disparando instâncias ec2, mas você precisa modificar um pouco os arquivos de configuração (se bem me lembro). Se você tem terabytes de dados, o cassandra é sua melhor aposta. Não há necessidade de fragmentar seus dados, ele foi projetado distribuído desde o 1º dia. Você pode ter qualquer número de cópias para todos os seus dados e, se alguns servidores estiverem inativos, ele retornará automaticamente os resultados dos ativos e distribuirá os dados do servidor inativo para outros. É altamente tolerante a falhas. Você pode incluir qualquer número de instâncias, é muito mais fácil dimensionar do que outras opções. Possui fortes opções de cliente .net e java. Eles têm pool de conexões, balanceamento de carga, marcação de servidores mortos,...
Outra opção é o hadoop para big data, mas não é tão em tempo real quanto os outros, você pode usar o hadoop para datawarehousing. Nem o cassandra nem o mongo têm transações, portanto, se você precisar de transações, o postgresql é mais adequado. Outra opção é o Amazon RDS, mas seu desempenho é ruim e o preço é alto. Se você quiser usar bancos de dados ou simpledb, você também pode precisar de cache de dados (por exemplo:memcached).
Para aplicativos da web, se seus dados forem pequenos eu recomendo o mongo, se for grande o cassandra é melhor. Você não precisa de uma camada de cache com mongo ou cassandra, eles já são rápidos. Eu não recomendo o simpledb, ele também bloqueia você na Amazon como você disse.
Se você estiver usando c#, java ou scala, você pode escrever uma interface e implementá-la para mongo, mysql, cassandra ou qualquer outra coisa para camada de acesso a dados. É mais simples em linguagens dinâmicas (por exemplo, rub,python,php). Você pode escrever um provedor para dois deles se quiser e pode alterar o armazenamento talvez em tempo de execução por apenas uma alteração de configuração, todos são possíveis. O desenvolvimento com mongo, cassandra e simpledb é mais fácil que um banco de dados, e eles são livres de esquema, também depende da biblioteca/conector cliente que você está usando. O mais simples é o mongo. Há apenas um índice por tabela no cassandra, então você mesmo deve gerenciar outros índices, mas com a versão 0.7 do cassandra os índices secundários serão possíveis, como eu sei. Você também pode começar com qualquer um deles e substituí-lo no futuro, se necessário.