Small (un-representative) benchmark on sqlite with blobs

David Nolden david.nolden.kdevelop at art-master.de
Mon Jun 25 18:01:57 UTC 2007


On Monday 25 June 2007 15:59:16 Jens Dagerbo wrote:
> On 6/25/07, Andreas Pakulat <apaku at gmx.de> wrote:
> But.. in KDev3 the database was actually used for queries.. if you are
> saying it should all go into a blob, why not simply use a file on
> disk? What does the the database give you at all in this case?
>
> And while on topic.. all data in one blob?? You're only interested in
I was thinking about the file-on-disk thing too. But noone is talking about 
storing everything in one blob here, of course it would be many many separate 
blobs, that could be loaded each on demand.

> persistence here? It seems to suggest that you will have all of the
> data (duchain, whatever) in memory during normal operation, but surely
> that will use up way too much memory? KDev3 kept (and persisted) only
> the project PCS in memory, and used bdb for lookups against external
> libraries. This to keep the memory usage down. (And with large
> projects, this was a bit too heavy too.)
>
> // jens

The general idea is that every du-chain ever parsed is stored in a database on 
disk, and can be loaded on-demand when needed. That way, after some usage, we 
would have a database for most possible versions of all commonly used 
header-files in the database, and parsing could become lightning fast even on 
a new project, while still being correct.

The du-chain database would consist of this:
- A mapping from absolute file-names to a list of environment-matching nodes
- One environment-matching node for each du-chain
- All the du-chains

The environment-matching nodes will be needed to decide whether one of the 
stored du-chains can be used in a given environment.

We cannot store it all in a flat file, because everything may change on the 
fly as code changes, including the environment-matching nodes and the 
du-chains. Any node should also be deletable from the database any time(for 
example when one a file changes, all other versions of the file including the 
matching-nodes can be deleted). Also it would be hard to just load a specific 
needed du-chain in a flat file.

The only option would probably be storing everything in separate files. But 
that might either become very slow when a lot of small du-chains need to be 
loaded, or we would need to implement some complex logic to group du-chains 
that commonly appear together into bigger files, so we could load them all at 
once.

I think the best solution might be storing it all in a very simple and 
efficient database, because the management-complexity would stay within a 
stable database-implementation and we wouldn't need to care much about it.

greetings, David





More information about the KDevelop-devel mailing list