Dynamo DB
Pros
·
Scalable, Simple, Distributed,
Flexible and offers Tunable consistency.
·
Hosted by Amazon and receives Fully
Managed Service from Amazon.
·
Plans are cheap – a free tier allows
more than 40 million database operations/month and pricing is based on
throughput
·
Automatic data replication across
multiple AWS availability zones to protect data and provide high uptime
·
Average service-side latencies
in single-digit milliseconds
·
Single API call allows you to
atomically increment or decrement numerical attributes
·
Uses secure algorithms to keep
your data safe
·
AWS Management Console
monitors your table operational metrics and receives amazons infrastructure support
·
Tightly integrated with Amazon
Elastic MapReduce (Amazon EMR)
·
Composite key support
·
Offers Conditional updates
·
Supports Hadoop integration M/R,
Hive
·
It has the property of distributed
hash tables hence more performance booster as compared to MySQL
·
Consistent performance
·
Low learning curve
·
It comes with a decent object mapper
for Java
Cons
·
Poor documentation
·
Limited data types. : It
doesn’t accept binary data. You cannot store images, byte arrays etc. You can
get around it by encoding everything in string using base64 encoding, but
base64 encoding produces bigger data. And you are counting your bytes as you
cannot hit the 64KB limit!
·
Poor query comparison operators
·
Unable to do complex queries
·
64KB limit on row size
·
1MB limit on querying
·
Deployable Only on AWS
·
Indexes on column values are not
supported. Secondary indexes also are not supported.
·
Integrated caching is not well
explained in the document
·
When you create a table
programatically (or even using AWS Console), the table doesn’t become available
instantly
·
In RDBMS we get ACID guarantee, but
in Dynamo-db there is no such guarantee.
·
Dynamo is an expensive and extremely
low latency solution, If you are trying to store more than 64KB per item
·
Indexing - Changing or adding keys
on-the-fly is impossible without creating a new table.
·
Queries - Querying data is extremely
limited. Especially if you want to query non-indexed data. Joins are of course
impossible so you have to manage complex data relations on your code/cache
layer.
·
Backup - tedious backup procedure as
compared to the slick backup of RDS
·
GUI - bad UX, limited search, no
fun.
·
Speed - Response time is problematic
compared to RDS. You find yourself building elaborate caching mechanism to
compensate for it in places you would have settled for RDS's internal caching.
·
A big limitation of DynamoDB and
other non-relational database is the lack of multiple indices.
·
DynamoDB is great for lookups by
key, not so good for queries, and abysmal for queries with multiple predicates.
(Esp. for Eventlog tables)
·
DynamoDB does not support
transactions in the traditional SQL sense. Each write operation is atomic to an
item. A write operation either successfully updates all of the item's
attributes or none of its attributes.
·
Once you hit the read or write
limit, your requests are denied until enough time has elapsed.
·
No Server-side scripts
·
No triggers
·
No Foreign Keys