Indeed, DynamoDB and MySQL are apples and oranges. DynamoDB is the NoSQL storage tier, while MySQL is used for relational storage. You must choose what to use based on the real needs of your application. In fact, some applications may be well served using both.
If, for example, you store data that does not lend itself to a relational scheme (tree structures, JSON representations without a scheme, etc.) that can be searched against a single key or combination of keys / ranges, then DynamoDB (or some other NoSQL store) will probably be your best bet.
If you have a well-defined schema for your data that can fit well with the relational structure, and you need the flexibility to query the data in different ways (adding indexes, if necessary, of course), then RDS may be the best solution.
The main advantage of using DynamoDB as a NoSQL store is that you get guaranteed read / write bandwidth at any level you need without worrying about managing the storage of clustered data. Therefore, if your application requires 1000 read / write operations per second, you can simply provide a DynamoDB table for this bandwidth level and not worry about the underlying infrastructure.
RDS has the same benefit as not having to worry about the infrastructure itself, however, if you need to make a significant number of records before the moment when the largest instance size will no longer support, you are kind on the left with no parameters (you can scale horizontally for reading using read replicas).
Updated note: DynamoDb now supports global secondary indexing, so you now have the opportunity to perform optimized searches on data fields other than a hash or a combination of hashes and range keys.
Mike Brant Dec 20 '12 at 16:33 2012-12-20 16:33
source share