[rucksack-devel] many small xacts vs. one large xact

Cyrus Harmon ch-rucksack at bobobeach.com
Thu Jan 11 04:01:49 UTC 2007


Ok, so I'm trying to create about .5M persistent objects. If I use a  
single transaction, performance starts to degrade after 50k objects  
or so. If I use a transaction per object, things are ok in the  
beginning, but after 1400 objects or so, I get the following:

There is no applicable method for the generic function
   #<STANDARD-GENERIC-FUNCTION RUCKSACK:P-CAR (1)>
when called with arguments
   (#<RUCKSACK:PERSISTENT-ARRAY #2653 in #<STANDARD-CACHE of size  
10000, heap #P"/Users/sly/projects/cyrusharmon.org/cl-bio/rucksack/ 
heap" and 4634 objects in memory.>>).
    [Condition of type SIMPLE-ERROR]

Restarts:
   0: [ABORT] Abort #<RUCKSACK:STANDARD-TRANSACTION #337747670400025  
with 4 dirty objects>
   1: [RETRY] Retry #<RUCKSACK:STANDARD-TRANSACTION #337747670400025  
with 4 dirty objects>
   2: [ABORT-REQUEST] Abort handling SLIME request.
   3: [ABORT] Exit debugger, returning to top level.

Backtrace:
   0: ((SB-PCL::FAST-METHOD NO-APPLICABLE-METHOD (T)) #<unused  
argument> #<unused argument> #<STANDARD-GENERIC-FUNCTION RUCKSACK:P- 
CAR (1)> #<RUCKSACK:PERSISTENT-ARRAY #2653 in #<STANDARD-CACHE of  
size 10000, heap #P"/Users/sly/projects/cyrusharmon.org/cl-bio/ 
rucksack/heap" and 4634 objects in memory.>>)
   1: ((SB-PCL::FAST-METHOD NO-APPLICABLE-METHOD (T)) #<unavailable  
argument> #<unavailable argument> #<STANDARD-GENERIC-FUNCTION  
RUCKSACK:P-CAR (1)>)
   2: (RUCKSACK::FIND-BINDING-IN-NODE 1413 #<RUCKSACK:BTREE-NODE with  
64 bindings {117D5AF9}> #<RUCKSACK:BTREE #23 in #<STANDARD-CACHE of  
size 10000, heap #P"/Users/sly/projects/cyrusharmon.org/cl-bio/ 
rucksack/heap" and 4634 objects in memory.>>)
   3: (RUCKSACK::LEAF-INSERT #<RUCKSACK:BTREE #23 in #<STANDARD-CACHE  
of size 10000, heap #P"/Users/sly/projects/cyrusharmon.org/cl-bio/ 
rucksack/heap" and 4634 objects in memory.>> #<unavailable argument>  
(#<RUCKSACK:BTREE-NODE with 23 bindings {14494DF1}> NIL) 1413  
2646 :OVERWRITE)
   4: ((SB-PCL::FAST-METHOD RUCKSACK:BTREE-INSERT (RUCKSACK:BTREE  
#1="#<...>" . #1#)) (#(NIL) . #()) #<unused argument>  
#<RUCKSACK:BTREE #23 in #<STANDARD-CACHE of size 10000, heap #P"/ 
Users/sly/projects/cyrusharmon.org/cl-bio/rucksack/heap" and 4634  
objects in memory.>> 1413 2646 :IF-EXISTS :OVERWRITE)
   5: ((SB-PCL::FAST-METHOD INITIALIZE-INSTANCE :AROUND  
(#1="#<...>" . #1#)) (#(NIL NIL) . #()) #S(SB-PCL::FAST-METHOD- 
CALL :FUNCTION #<FUNCTION #> :PV-CELL NIL :NEXT-METHOD-CALL NIL :ARG- 
INFO (1 . T)) #<P-TAXON #2646 in #<STANDARD-CACHE of size 10000, heap  
#P"/Users/sly/projects/cyrusharmon.org/cl-bio/rucksack/heap" and 4634  
objects in memory.>> :TAX-ID 1413 :PARENT-ID 1386 :RANK  
"species" :EMBL-CODE "BC" :DIVISION-ID 0 :DIVISION-INHERITED  
T :GENETIC-CODE-ID 11 :GENETIC-CODE-INHERITED T :MITOCHONDRIAL- 
GENETIC-CODE-ID 0 :MITOCHONDRIAL-GENETIC-CODE-INHERITED T :GENBANK- 
HIDDEN T :HIDDEN-SUBTREE NIL :COMMENTS "" :RUCKSACK  
#<RUCKSACK::SERIAL-TRANSACTION-RUCKSACK in #P"/Users/sly/projects/ 
cyrusharmon.org/cl-bio/rucksack/" with 0 roots {11762239}>)
   6: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) #<unused argument>  
#<unused argument> #<RUCKSACK:PERSISTENT-CLASS P-TAXON> #<unavailable  
&REST argument>)
   7: (PARSE-TAX-NODES :FILE NIL)
   8: (SB-INT:SIMPLE-EVAL-IN-LEXENV (PARSE-TAX-NODES) #<NULL-LEXENV>)
   9: (SWANK::EVAL-REGION
       "(parse-tax-nodes)
      "
       T)
10: ((LAMBDA ()))
11: ((LAMBDA (SWANK-BACKEND::FN)) #<CLOSURE (LAMBDA #) {1175E165}>)
12: (SWANK::CALL-WITH-BUFFER-SYNTAX #<CLOSURE (LAMBDA #) {1175E165}>)
13: (SWANK:LISTENER-EVAL
       "(parse-tax-nodes)
      ")
14: (SB-INT:SIMPLE-EVAL-IN-LEXENV
       (SWANK:LISTENER-EVAL "(parse-tax-nodes)
      ")
       #<NULL-LEXENV>)

has anyone done any stress testing to see how rucksack works with  
lots of objects and/or have any advice on storing large numbers of  
objects?

Thanks,

Cyrus




More information about the rucksack-devel mailing list