Gizzard
Framework for creating eventually-consistent distributed datastores
...Gizzard's architecture is designed for operational flexibility: you can change the shard layout over time, reassign replicas, migrate data between nodes, and have requests redirected during transitions. It also supports secondary indexing and provides hooks for custom logic in migrations and consistency. Because Gizzard handles much of the complexity of shard routing and cluster transitions, it was used to support large-scale, evolving storage backends in production.