Out of curiosity, the OIDs in elephant are they 32 bit integers or 64?  I'm running on Ubuntu-64/SBCL-64.<br><br>I'm thinking that my 'query' slot vale would be generated something like this (for 32 bit values):<br>
<br>(format t "~8,0X ~8,0X" slot-a-val slot-b-val)<br><br>Yarek<br><br><div class="gmail_quote">On Tue, Jan 13, 2009 at 5:51 PM, Robert Synnott <span dir="ltr"><<a href="mailto:rsynnott@gmail.com">rsynnott@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I don't believe the Postmodern backend, at least, allows search by conses.<br>
<br>
If you want sensible (ordered) results with a and b if a and/or b are<br>
integers, by the way, you should zero-pad them; otherwise, say, '1 2'<br>
comes after '1 12', which is probably not what you want<br>
Rob<br>
<br>
2009/1/14 Yarek Kowalik <<a href="mailto:yarek.kowalik@gmail.com">yarek.kowalik@gmail.com</a>>:<br>
<div><div></div><div class="Wj3C7c">> When serializing tuples, is the string representation best:  You suggest<br>
> using (format t "~A ~A" a b) - is that efficient enough?  what about doing<br>
> (cons a b) = is there a way to index and search for conses? Any other ideas?<br>
><br>
> Yarek<br>
><br>
> On Tue, Jan 6, 2009 at 5:17 AM, Alex Mizrahi <<a href="mailto:killerstorm@newmail.ru">killerstorm@newmail.ru</a>> wrote:<br>
>><br>
>> YK> Is this a reasonable way of finding an object of type<br>
>> YK> 'my-class that matches on values val-a and val-b for slots a and b?<br>
>><br>
>> yep, it is reasonable if you have relatively low number of objects<br>
>> in returned by (get-instances-by-value 'my-class 'slot-b val-b) query.<br>
>> if number of objects is significant and you get a slowdown because<br>
>> of this, you might want to optimize this. a trivial thing is to try it<br>
>> symmertrically with slot-a -- whatever returns less objects is better.<br>
>> less trivial optimizations would be to work on lower-level -- via<br>
>> map-inverted-index (to avoid allocating whole list but instead test<br>
>> objects<br>
>> one by one) or even cursor API (this way you can retrieve oids rather<br>
>> than objects, which should be faster, and also iterating both indices at<br>
>> once might be a significant benefit if values are not uniformly<br>
>> distributed).<br>
>><br>
>> but the most optimal way doing this in case of high number of objects<br>
>> in both slot-a and slot-b queries would be building and using multi-column<br>
>> index. unfortunately, Elephant does not help you with it -- either you'll<br>
>> have<br>
>> to serialize slot tuples into a string (e.g (format nil "~a_~a" slot-a<br>
>> slot-b)),<br>
>> or reorganize your data to use a custom index structure (like btree of<br>
>> btrees).<br>
>><br>
>> there are also backend-specific considerations. for postmodern<br>
>><br>
>>  (intersection (get-instances-by-value 'my-class 'slot-b val-b)<br>
>>                    (get-instances-by-value 'my-class 'slot-a val-a))<br>
>><br>
>> would be much faster then testing objects one by one, for BDB -- i doubt<br>
>> so.<br>
>><br>
>> LP> Use MAP-CLASS, this will considerably speed up the query.<br>
>><br>
>> how is that? using at least one index is much better than using no index<br>
>> at<br>
>> all.<br>
>><br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> elephant-devel site list<br>
>> <a href="mailto:elephant-devel@common-lisp.net">elephant-devel@common-lisp.net</a><br>
>> <a href="http://common-lisp.net/mailman/listinfo/elephant-devel" target="_blank">http://common-lisp.net/mailman/listinfo/elephant-devel</a><br>
><br>
><br>
> _______________________________________________<br>
> elephant-devel site list<br>
> <a href="mailto:elephant-devel@common-lisp.net">elephant-devel@common-lisp.net</a><br>
> <a href="http://common-lisp.net/mailman/listinfo/elephant-devel" target="_blank">http://common-lisp.net/mailman/listinfo/elephant-devel</a><br>
><br>
<br>
<br>
<br>
</div></div><font color="#888888">--<br>
Robert Synnott<br>
<a href="http://myblog.rsynnott.com" target="_blank">http://myblog.rsynnott.com</a><br>
MSN: <a href="mailto:rsynnott@gmail.com">rsynnott@gmail.com</a><br>
Jabber: <a href="mailto:rsynnott@gmail.com">rsynnott@gmail.com</a><br>
</font><div><div></div><div class="Wj3C7c"><br>
_______________________________________________<br>
elephant-devel site list<br>
<a href="mailto:elephant-devel@common-lisp.net">elephant-devel@common-lisp.net</a><br>
<a href="http://common-lisp.net/mailman/listinfo/elephant-devel" target="_blank">http://common-lisp.net/mailman/listinfo/elephant-devel</a><br>
</div></div></blockquote></div><br>