What is most valuable?
It is a relatively easy to use key-value store. As a NoSQL solution, it has been around for quite a while, and thus been thoroughly tried and tested. It provides ACID transactions, which is not very common in the NoSQL universe. Response times are relatively fast. It runs as an embedded DB within your application, so a server is not necessary.
What needs improvement?
We have experienced two limitations:
- Oracle BDB Java edition does not support bulk retrieval of entries via their keys. In situations where various entries need to be retrieved, individual calls by key need to be made, instead of just firing one request with all of the keys. There is the alternative of using a cursor, but the whole key set would need to be traversed.
- Memory usage becomes a problem when the number of entries stored within the key/value store are quite high (hundreds of millions).
For how long have I used the solution?
What was my experience with deployment of the solution?
We encountered issues with the amount of memory necessary to keep the keys of the key value store in memory. Running BDB as an embedded database means we need to closely manage the amount of memory used by the application. The more our database grew, the higher the amount of memory used up by BDB. This soon became an issue when half of the 16GB on our web service was used up to store the keys of the key value store. We resolved the issue by adopting Voldemort, which uses BDB under the hood.
Which solution did I use previously and why did I switch?
We did evaluate other key-value stores, and opted to use BDB because of its stability and support.
How was the initial setup?
Setting up BDB as an embedded database is not complicated. It does, however, require close attention be paid to the reference documentation to tweak the database to work optimally.
What about the implementation team?
Our implementation of BDB was done in-house. Pay attention whilst setting up the transaction levels, and tweak the database settings to improve read/write performance.
What other advice do I have?
As a key/value store, Oracle BDB is simple to use, and it provides ACID transactions for companies that cannot afford eventual consistency. Oracle provides good documentation on the database, and when all else fails there is a community ready to help.