A big question here is do you need transactional integrity/atomic
mutations? These things will always make the API more complex and so
it gets in the way if you don't need it. But not having them means
exposing yourself to race conditions, especially as your application
grows more complex or
especially as your application
grows more complex or simply if the user has your application open in
two separate tabs.
The two tabs use case is an interesting point. Currently as I understand
the leveldb interface avoids this problem by saying only one process can
open a database.
Not quite