I just found this really nice blog post by Sony Arouje (author of iTraveller). He makes some good points about why he decided to go with db4o after evaluating several database technologies (even NoSQL's MongoDB). Let's take a look at some of his comments:
"One of the design goals was the application should be scalable. My major concern was I cannot freeze my db design before my first release because I am planning to have multiple version with added functionalities, so the db structure may change in the future. If I use conventional db’s then I have to write the functionality to add or remove columns. iTraveller is not very data centric application, so managing db change scripts and writing a functionality to apply these changes when user upgrade to new version will be a big pain for me"
This is precisely why it makes sense to go with db4o in applications that will require updates and where the database schema might change (sounds familiar?). Remember that with db4o your object model IS your schema so you're easing one of the biggest sources of pain developers have to cope with: database schema updates. Isn't it really nice to be able to focus your work on your objects rather than on your data?
"First I thought of using MongoDB, because I used Mongo db in a Silverlight application. But then finally dropped that idea. I want some thing more lighter than Mongo and NoSql sort of database. I evaluated several db’s but nothing suites what I am looking for. Finally my search ends at db4o. The usage of db4o is very straight forward and very easy to learn, db4o installer comes with a very good documentation to start off with the development"
Why choose a non-embedded persistence technology when you can go embedded and achieve the same with a much lighter engine? Why avoiding the benefits of easing up your deployment requirements by putting your db engine in a single jar/dll file? Why not? It's easy to get started, documentation is nice as Sony tells us and there are tons of db4o based projects out there backed up by a huge community.
"db4o is a light weight Object Oriented database. Using db4o I can persist my entities very easily without any configuration. I can add or remove new properties to my entities without affecting the already saved entities."
With db4o you don't have to start from scratch with every application update. It's the same concept and when you working with source code. Just imagine if every time you have to update your app you would have to start from scratch. db4o handles data in the same way. No migrations, no complicated configuration and, by design, refactoring friendly (your old data can coexist with the new one).
"As you can see the db4o is very easy to use light weight database without the hurdles of mapping to tables and all sort of stuff"
And that's right on spot -> NO MAPPING! =)
If you want to take a look at some db4o related code snippets in Sony's blog post see this page. If you want to take a look at project iTraveller the source code is available here.