Ian Eslick wrote:
The pset is probably your best bet. Other collection objects have
more performance impact. With a pset you can ask:
is X a friend of Y? (find-item X (friends Y)) => X | nil
all people that X is friends of:
(remove-nulls
(map-class 'people (lambda (y)
(when (find-item X (friends Y))
Y))
:collect t))
This requires walking all person objects. For larger DB's, you can
build your own 'many-to-many' relation table or waiting for the next
release which should do this for you.
Is there a time line (however preliminary) when this release might be
available?
(defpclass friend-relation ()
((first :accessor first :initarg :first :index t)
(second :accessor second :initarg :second :index t)))
(defmethod add-friend-relation (x y)
(make-instance 'friend-relation :first x :second y))
(defmethod friends-of (x)
(union (mapcar #'second (get-instances-by-slot 'friend-relation
'first x))
(mapcar #'first (get-instances-by-slot 'friend-relation
'second x))))
Of course there are ways to do this more efficiently, but I think this
is the idea.
Many thanks for this guidance. That does, indeed, give me an idea of the
best way forward in our application.
Best regards,
Marc
On Mar 16, 2008, at 11:06 PM, Marc wrote:
Hello!
I fear that this may be a rather stupid newbie question, but neither
from the documentation nor from the mailing list posts I got an idea
as to the best practice for the following type of searches. Let's use
an example akin to the one in the tutorial:
(defpclass person ()
((name :accessor name :index t)
(friends :accessor friends)) ;collection with names (say as strings)
of the friends of this person
)
Given a similar structure, what is the recommended way to handle
queries of the type "find all persons that X is a friend of?" (i.e.
queries on individual entries in slots that contain collections)?
What would be the best data structure for the friends slot, assuming
that the collection remains fairly stable over time (psets, lists or
other collections)?
Thanks in advance for any hint!
Best regards,
Marc
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel