I'm looking for information about DB4O object database. I know it has client/server mode, but I have no idea how scalable it is. I'm a big lover of object db idea, but still couldn't find an appropriate OODB to use in any of my projects. So my questions are:
- I'm interested if anyone deployed DB4O in a multi client environment and how does it perform compared to RDBMS?
- Is any web app to date powered by DB4O?
- Can I use DB4O as a replacement for SQL Server (SQL Express at least)?
- How many concurrent client can DB4O support in practice?
- Does performance degrades when DB size increases?
Thanks
P.S. I'm interested in C# edition.
I in general agree with Vagaus and the other comments. db4o can replace in some cases, but it really depends on your scenario. An object database is only one tool and doesn't fit all needs. You probably should try it out.
I just want to add a few comments:
- multi client environment: db4o's focus is on the embedded mode. The client/server mode is more a addon and not really the default mode. db4o expects that the client and the server are 'strongly' coupled: The client and the server need the same classes, otherwise disaster strikes. Also the db4o server doesn't support stuff like multiple databases, user-management etc.
- Replacement for SQL Server (SQL Express at least): Certainly not for the big SQL Server. There more powerful object database than db4o are needed. db4o is more an equivalent for the express edition.
- Does performance degrades when DB size increases: Yes it does, like all databases. db4o is built for small databases. Around 2-16 GB are a good size for db4o.
- Concurrency-Control: db4o has very limited concurrency-controls for client-server mode. It only supports the relatively weak 'Read Committed' isolation mode.
As said, db4o is designed for embedded scenarios. For bigger client server databases you probably need to look at other (object) databases.
Short answer: yes, db4o can be used as a replacement for RDBMs
Long answer: It depends.
I really don't believe in "one size fits all" so I IMHO, it depends on your object model, access pattern, machine configuration, db tunning, expected growth rate, # of indexes, etc.
The best advice I can think of has already been said in the comments: do not take any answer as definitive/reliable (even mine ;-)); do your own performance measurements with an object model / access pattern as close as possible to your real application and take your conclusions.
After saying that, if you'd like to see some benchmarks results you can take a look in the polepos results. Note however that these results are based on an old version of db4o (6.4 instead of current version 7.12) - we expect to publish new results in the near future.
I am sure there are web projects using db4o (for instance jease) but I am not sure exactly how.
Even if db4o performance does not meet your requirements I'd recommend you to not give up on OODBs (generally it make your live - development wise- so much easier). In this case check other options (such VOD - from the same vendor).