Friday 27 September 2013

DynamoDB : Pros and Cons



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

No comments:

Post a Comment