Is there a storage-engine or database that naturally support this use-case:
1) Key-Value storage. Small Fixed Length Key, and value within [1KB, 64KB] 2) Access is read-mostly 3) Latency more important than throughput. 4) Use discs for values; not a memory-database, but keys could be kept in RAM. 5) Transactions (that involve several values) are NOT required 6) It should be possible to roll-back to a point-in-time (say, 1 week ago max). 7) All changes are attributed to some specific entity (a user) 8) It should be possible to roll-back changes done by a specific group of users within a certain time interval. 9) Rollback happens rarely, so transaction logs should not be kept in RAM. 10) Online backups are possible. 11) I should be directly or indirectly accessible from a JVM.
While I know several engines / DB that generally fit, point 7 and 8 are more problematic.
What would fit this use case best?
[EDIT] This is my first "independent"/private project and I don't have much money to invest for software. Also I'm not sure yet if I will charge for it, or open-source it when it is done, so I would prefer a free storage, or at least one with a free version. Here a clarification of some questions raised in the first answer.
3) I'm sold to SSD already. 4) I said "use disc" simply because the data will not all fit in the RAM I can afford. Also I suspect I will have a lot of "cold" data, that gets created once and never accessed again, so it would seem a waste to keep it all in RAM, as would be the case with VoltDB, for example. 7) Adding explicitly the UserID is not problem in most database. I just thought that some storage system might have some kind of "special" ID that makes rollback easier. 8) This is where the real problem is. Writing a traditional "undo/rollback" by hand is time-consuming and error-prone. I know I can do all the rest with most DB. What I'm looking for is one that implements the undo/rollback for me, given some transaction ID or similar. And most importantly, without undoing other independent transactions that happened before or after. 9) I think redis does that; not sure. 10) I was (implicitly) thinking about a free one, where it's not always a given.