Hi I think I have a fair handle on how Datastore works, but I need to
check, and I need some help with a design

lets say I have:
a very large list of BOOKS
the BOOKS are tagged- "adventure+romance",   "historical+drama",
"animation+sci-fi+comedy", etc...
and I have a very large list of USERS.
USERS can read a very large number of BOOKS
And I, as a USER, can have a very large number of USERS who are my
friend.

What I want , in english, is
;  Return a list of all the BOOKS tagged with "sci-fi" and "romance"
that have been read by USERS who are my friend, sorted by Most
Frequently Read.

Now, I know I can model tags with a ListProperty, so that filtering is
easy = "WHERE tag AND tag AND tag..."
And I know that I can sort Books by Most Frequently Read  quite easily

But due to the large number of BOOKS that could be read by  a USER,
and the large number of USERS who could be my friend, I cant
practically model  BOOKS READ BY USERS and  USERS WHO ARE MY FRIEND as
ListProperties...

...Because I would blow the 5000 index limit per entity, because each
value of ListPropery generates its own index entry.  Is that correct?

I cant find a way to handle this without resorting to filtering in
memory.  Am I dumb, or is that just the way it is?

My solution is:

BOOK:
numerOfReads
TagList
otherStuff


Then I look up a relationship entity to find out everyone who is a
FRIEND of mine.
FRIENDS:
userKey
friendKey

Then I look up a relationship entity to find out which BOOKS that
USERS have read
BOOKSREAD:
userKey
bookKey
TagList
numberOfReads

So first I pull into memory the list of my particular friendKeys from
the FRIENDS table.

Then I churn through the table of BOOKSREAD, using the duplicated
properties TagList and numberOfReads to filter on tags and sort
according to number of reads.

I then filter this list of BOOKS *in memory* by the friendKeys I
have.  Ill need some sort of algorithm to keep pulling chunks of BOOKS
from the database until I have a nice page of books  my friends have
read (20 books displayed per page) to pass to the GUI.

????

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to