DynamoDB Local Secondary Indexes
aws.typepad.com
aws.typepad.com
I wish it was more like the Google App Engine datastore where you could have indexes on any column and then fetch objects based on that.
I've pondered just concatenating (or hashing a concatenation) of fields (a compound primary key) to use as a primary key on DynamoDB tables. Makes me nuts - this turns into analysis paralysis for me with DynamoDB . . .
Luckily in my app I only have 1 lookup I ever want to do (find your account based on your social network id, so you can restore your account after reinstalling the app + connecting to facebook), so just maintaining this single lookup table is not that bad.
If you really need to query on a bunch of other fields then maybe you should maintain a single table in RDS (MySql) and just use it for looking up the DynamoDb primary key. I think that is what I would do.
IMHO the challenge is to communicate the increased cost when making use of these enhanced features. One of the amazing things about DynamoDB is that AWS have learned the pain points of DBaaS from SimpleDB and structured the features and pricing of DDB to be more "true" to the limitations of distributed datastores.
So, while they can likely introduce hash-key-less lookup, they have to balance the increased adoption with the downside of unhappy/confused customers that expected it to be free. As it stands now, customers need to build that capability themselves, which is instructive in terms of the costs to implement it.
Also, any chance we could have strongly consistent auto-expiring keys in DynamoDB? Would make DynamoDB a very useful tool for synchronisation/lease management and other funky uses.
I also sent Werner an email asking if it would be suitable to use DynamoDB as a block device — you could then build a filesystem on top and benefit from DynamoDB features like replication, consistency, etc. Unfortunately, I fear the email must have slipped through his no-doubt-busy-inbox. If any of DynamoDB developers could shed any light on its suitability as a block device, that would be awesome! Thanks.
This. 100 times. A filesystem was my first thought when DDB was announced last year. I can't imagine it would be harder to build than GridFS was. [1]
That said, I'm not talking about a FUSE-like filesystem. More like HDFS or GridFS -- a blobstore+ if you will.
For more information, have a look at our FAQ guide and Developer Guides.
I am often thinking in a star-schema direction (too much time data warehousing) rather than normalized designs. For DynamoDB, I stumble around the primary key for such setups given that a rather large subset of the tuple values in a star schema row (plus a timestamp) actually represent the primary (compound) key for the metric measurement.
Probably need to re-think all that sometime.