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.