How about delegating the tinyUrl expiration to the Storage Layer. Most key/value stores (including DynamoDB, Riak, Cassandra) support TTL at the record or value level. That should reduce maintenance quite a bit.
Also, why does nobody ever mentions HBase?