I am looking for a persistent key/value store for my web application (which is written in Java).
My app generates user session data that I would like to store in the key/value store. Each user session is roughly 1 MB of binary data, and roughly a million user sessions are created every day. Each user session should expire from the key/value store after 24 hours.
I figure the expiration could happen in one of two ways. One way to implement the expiration would be if the key/value store had built-in support for expiring objects after a given timeout and automatically deleted any expired objects. The second way would be if each key/value pair also had an associated timestamp, and the system would run an hourly task that deleted all key/value pairs where the timestamp was over a given timeout.
I don't need the ability to do any queries on the system other than 1) load/store a value for a key, and 2) the above-mentioned deleting of expired key/values. Throughput requirements: 1,000,000 new 1-MB objects created per day, 100,000 1-MB objects read per day, 100,000 1-MB objects updated (read and written back to the store) per day, and 1,000,000 objects expired/deleted per day.
I don't need the system to provide fault tolerance, crash resistance, replication or auto-scaling. Sharding would be nice.
I definitely need a system that has good support for Java clients, is open source, has good documentation, and good community support.
What system do you recommendation?