AWS DynamoDB is a NoSQL database service that provides consistent performance and seamless scalability. The service is fully managed by Amazon and we can store any amount of data in the DynamoDb tables. The data is stored in SSD disks and replicated across Multiple Availability Zones in a region, thus providing high durability.
The Basics:
- DynamoDb is an AWS managed service, you don’t have to worry about hardware, setup and configuration, replication, patching, and scaling. Data is replicated over three availability zones in a region and stored in SSD drives.
- AWS charges for using DynamoDb table depends on provisioned capacity (in addition to storage). To reduce your AWS bill, you may reduce the provisioned capacity during light traffic and bring it back to appropriate values during normal traffic conditions. This activity does not interrupt the service.
- To get most out of provisioned throughput, design partition key of the table to have of distinct values (larger the number of distinct values, the better).
- If you don’t have a proper partition key design, your requests for read/write items can be throttled, if the keys belong to the same partition, called “hot partition”.
Things to remember:
- There is a 1MB limit on Query and Scan API calls. If the query results in more than 1MB of results set, the query stops and returns the results. If you also include ‘FilterExpression’ in the query params, the filter is applied on the result set, but before result data is sent back to the caller. Because of this, depending on where your items are positioned within the table, it is possible that your query may not return any data at all using query/scan operations even though there is more data in the table. You must use ‘LastEvaluatedKey’ in this case.
- Lack of ability to have multiple keys per index. You can create DynamoDb table with one primary partition key and one sort key (optional) only. It is not possible to have multiple keys per index, but you can create additional secondary indexes on the table. Even then, the secondary index can contain only one sort key.
- Cannot add a secondary index after table creation. If your requirements change and need to add/modify a secondary index on the table, you are out of luck. You must export existing table data, drop and recreate the table with the correct index and import data.
- There is no backup & restore of DynamoDb tables out of the box. There isn’t a provision similar to AWS RDS daily backups. The recommended way is to use ‘AWS Date Pipeline’ service. But Data pipeline is not available in all regions. Eventually, you will end-up doing backup & restore using NodeJs or similar programs.
- Managing tables when you have multiple environments( such as Dev, QA, Live) is a hassle. One of the following solutions need to be adopted:
- Use different table names for each environment (e.g., Dev_Products, Live_Products).
- Use different AWS region for each environment.
- Use different AWS accounts for each environment along with billing consolidation.
‘Limit’ is the number of items to be evaluated by DynamoDb and not the number of rows to return to the caller.