Slow performance

Todd Blanchard tblanchard at mac.com
Sat Nov 10 01:28:37 UTC 2007


> You should make an *object model* with your root object being a true
> custom domain object like a "InvestmentPortfolio", not a dumb
> collection.  This InvestmentPortfolio may then reference several
> MagmaCollections which can serve as your "buckets"..

Mkay - what if I want to add more buckets later?  Will that "just work"?

On Nov 9, 2007, at 5:24 PM, Chris Muller wrote:

> Hi Todd, MagmaSets are only for very specific purposes, and only after
> they absolutely pay for themselves 10X over a regular MagmaCollection.
>  You are not there yet.  MagmaSets are twice as slow as a standard
> MagmaCollection when adding because they have to check #includes:
> before every add.
>
> The MyDatabaseSession subclass seems like an attempt to make the
> session itself act as a "bucket" to stuff data into and then retrieve
> out of later.  This is not necessary and probably even not very
> workable with Magma.
>
> You should make an *object model* with your root object being a true
> custom domain object like a "InvestmentPortfolio", not a dumb
> collection.  This InvestmentPortfolio may then reference several
> MagmaCollections which can serve as your "buckets"..
>
> Regards,
>   Chris
>
>
> On Nov 8, 2007 1:36 AM, Todd Blanchard <tblanchard at mac.com> wrote:
>> OK, I'm totally frustrated.  I can't thing one in or out of  this
>> database.
>>
>> I want the root to act like a dictionary - so I set it up like this:
>>
>> | set |
>> set := (MagmaSet  equivalenceAttributes: (Array with: #key)).
>> set addIndex: (MaSearchStringIndex attribute: #key).
>> MagmaRepositoryController create: 'magma' root: set.
>>
>> I start the server session on a port and leave it.  In the client I
>> subclass MagmaSession to add schema specific methods.  One thing I
>> add is this:
>>
>> MyDatabaseSession>>at: aSymbol ifAbsentPut: aBlock
>>
>>         | collection assoc |
>>         collection := (self root where:[:ea | ea key = aSymbol]).
>>         collection isEmpty
>>                 ifTrue: [self root add: (assoc := aSymbol->(aBlock  
>> value))]
>>                 ifFalse: [assoc := collection first].
>>         ^assoc value.
>>
>> This fails on a newly created database because MaCollectionReader
>> isEmpty ends up calling sortIndex on a MaQueryTrunk which doesn't
>> seem to understand it.
>>
>> What gives?
>>



More information about the Magma mailing list