I agree with Osama that you must first compare the features you used.
However, I do not agree that "complex" data should automatically lead you to sqlite. Although I have not seen any tests (and did not want to write), I have a reaction to the guts (whatever the cost), which says that BerkeleyDB will be superior every time.
That said. I do not think that I would use to make my own decision. He returns to these functions. If all I want is a simple data warehouse, then I would choose sqlite because it will be simpler. Similarly, if I want to be able to arbitrarily query data in any field, or perhaps once store it in an enterprise SQL database, I would most likely go with sqlite, because future migration will be easier. If, however, I intend to go beyond a simple data warehouse, and I look at transaction security, high concurrency, high availability, the presence of many readers and writers, etc., and I have a set of fairly well-defined โrequestsโ, then I probably want BDB.
Please note that the "complexity" of my data is really not included in these equations. The reason is simple. BDB can contain my object in its native serialized format. Sql of any flavor comes with a known impedance mismatch, which, IMO, complicates my application.
If you are serious about BDB, I must warn you that you must decide what type of storage you are going to use, since the different types of stores that BDB offers are not necessarily compatible.
Shaun source share