Magma collection - where:

Chris Muller asqueaker at gmail.com
Tue Nov 16 03:07:07 UTC 2010


Hi Facundo,


> self customers select: [:aCustomer | aCustomer name asUppercase beginsWith:
> firstsLetterOfName asUppercase]
>
> It works ok and with good perfomance but "customers" is a magma collection

Please do not do this.  Linear enumeration of an entire large
MagmaCollection is something that never performs well.

> so I would like use where: because the collection has a index on #name
> attribute.
>
> self customers where: [:each | aCustomer name
> = firstsLetterOfName asUppercase]
>
> It works but I had two problems, the first one is that the
> meaningfulCharacters of MaSearchStringIndex is 5 and then it works if I
> write exactly the 5 firsts letter of the name.

When you use where: you will get back a MagmaCollectionReader.  The
reader can be thought of as a "collection" with the items narrowed
down to the first-five matching characters.  Sending #select: to that
reader will only enumerate those items, which are much fewer than the
entire collection.

I prefer to favor small key-sizes on my own MagmaCollections; usually
32 bits and less is "blazing" compared to 64, 128 and larger.  I think
Magma deserves criticism for letting users use larger than 256-bit,
because there is too much LI arithmetic-processing to achieve very
good performance at those larger sizes..

You may want to consider an index that allows a precise,
unique-identification of each customer.  You have 20K customers, you
could get away with a 16-bit index!  While, at the same time solving
the issue of two customers with potentially the same name.  A
system-generated account #..?

 - Chris



> The second problem is that I
> can't send asUppercase beacuse name is a MaClause.

The answer to this is here:

  http://wiki.squeak.org/squeak/5859

> So, my question is: Can I use where: for this funcionality or I need use
> select:? If you think that where: is appropiate, Do I need create a new king
> of index to reach that?
> Thank you,
> Facu
> p.s.: I'm using the first code in the method of customersOfNameBeginsWith:
> selector and i used it on a autocompletation jquery input control.
> _______________________________________________
> Magma mailing list
> Magma at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/magma
>
>


More information about the Magma mailing list