[elephant-devel] Re: Getting count of the number of persistent objectsof a particular class

Joubert Nel joubert at joubster.com
Mon Jan 21 13:52:06 UTC 2008


On Mon, 2008-01-21 at 10:58 +0200, Alex Mizrahi wrote:
> JN> I did some reading through the mailing list archives and the Elephant
>  JN> manual, but cannot find a recommended way of counting the number of
>  JN> persistent objects of a particular class.
> 
>  JN> I have a method that works (using map-class) but this is way too slow
>  JN> for my purposes.
> 
>  JN> I did find some postings from Oct last year about this question but no
>  JN> definitive answer it seams.
> 
>  JN> Any advice?
> 
> as far as i know, most btree implementation do not have a fast way to count 
> leafs -- you need to iterate through all of them.
> in PostgreSQL (and i think in most relational databases like that) query 
> "SELECT COUNT(*) FROM tree11" takes time proportional to number of elements 
> in tree11.
> of course it would be much faster to do "SELECT COUNT(*)" then reading all 
> elements on Lisp side, but it will be flawed anyway.

Right, I'm used to doing "SELECT COUNT" SQL statements, which could be
on any kind of joins and is *very* fast in a relational database.

> 
> so, the advice would be to count this parameter yourself. for example, make 
> btree class-name -> instance count. and update it in initialize-instance 
> (you can move this functionality to some instance-counter-mixin class), and 
> whereever you delete them..

This is a great suggestion.
Just to verify: the writes to the database from the initialize-instance
method; will they occur atomically with the consing of the persistent
class (i.e. I don't need to explicitly wrap things into a transaction)?

Joubert





More information about the elephant-devel mailing list