KVP and data that contains a forward slash

Derek Atkins warlord at MIT.EDU
Fri Feb 12 12:26:01 EST 2016


John Ralls <jralls at ceridwen.us> writes:

> Again, the path argument would be more convincing if we actually used
> XPath. I don't think it really matters what grand plan the designer
> (you?) had in mind, what matters is how we're using it now.

No, it wasn't me; KVP was in there (long?) before I got involved.

> No, SQL just makes the penalty more severe. Cache misses are
> expensive; so much so that the current C++ doctrine (based on many
> simulations) is that it's much faster to sequentially search a
> std::vector than to use any container that relies on independently
> allocated nodes, even when the overhead of complete reallocation for
> an insert operation is accounted for. Every indirection in KVP,
> i.e. every step involving a KvpFrame means dereferencing the
> KvpFrame*, dereferencing its GHashTable*, dereferencing the hash
> table's hashes and getting the next KvpItem*, dereferencing it,
> getting its content type and ptr, and if it's a KvpFrame, repeating
> the process. Because each of them is a different type GSlice will have
> a different magazine for each of them. If not much else is going on on
> the system all of the magazines might be in cache after the first
> round and subsequent descents will be faster. Or not.
>
> That overhead could be reduced immensely by not having KvpFrames. With
> the whole path as a key there'd be a single GHashtable lookup and only
> three derefences (the QofInstance's Kvp GHashtable, the KvpItem* it
> returns, and the KvpItem's contents).

Is it a structural problem or an implementation/storage problem?

> All of that said, I agree that not implementing KVP in the SQL backend
> that way was a mistake and I regret it.

Why do YOU regret it?  I don't think you implemented it that way.

> Moving almost all of the Kvp access to being through GObject
> properties does make all of the access via the object's API. The next
> step is to add members to the objects and load them from KVP in the
> backend. That gets rid of the Kvp performance penalty entirely for the
> XML backend and makes it one-time for the SQL backend.

Right.  That works; you just need to change the way the 'write' works.

> Regards,
> John Ralls

-derek

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available


More information about the gnucash-devel mailing list