Looks great!

Oct 26, 2012 at 10:30 AM

Hi Jacek,

NDatabase looks great! I've got a few questions though:

  • Does it support transactions?
  • What kind of serialization do you use to store objects?
  • Does it handle complex object graphs with circular references?
  • What about the concurrency, does it work in a multithreaded environment?
  • It is fault-tolerant? What about a non-clean shutdown such as power failure?
  • What platforms are supported? Have you tested it on Linux?

What types can be stored in a database? Can I use it to log exceptions (as you know, exceptions use custom binary serialization protocol, ISerializable — so to serialize them properly we have to deal with BinaryFormatter).

Nov 21, 2012 at 6:40 PM


sorry for a late response.

Ad1 Yes, it is supporting transactions, some doc over that: http://ndatabase.codeplex.com/wikipage?title=transaction&referringTitle=Documentation. Simply, if you are using close method of odb or using statement, then commit happens automatically. Additionally, you can manualy invoke Commit or Rollback method.

Ad2 That's not easy topic. The way of how that's done is described there: http://ndatabase.codeplex.com/wikipage?title=odb-file-format&referringTitle=Documentation, so how file is divided, and where (and in which way) objects are stored.

Ad3 Yes

Ad4 No, for now it is working only in the single thread mode (single file lock).

Ad5 It depends, what are you expecting writing fault-tolerant. Transactions are supporting  things like if something wasn't commited, then it is not in the file. Additionally db has closing marker, but usage of that is in the early stage.

Ad6 .net/mono, no I shouldn't but after creating finally vm with ubuntu I will definitely make some deep tests on it.

The last question: yes, you can. Seems like there is some problem in .net 4 because of changes how exception is built in .net, but generally speaking yes. ISerializable is not required for putting objects into NDatabase.

Dec 9, 2012 at 5:22 PM

Ad 6

Linux test - successful ( tested on KUbuntu/Ubuntu with Mono 2.10.8 and MonoDevleop).