Стратегия данных AppEngine для обработки большого индекса на пользователя? - PullRequest
1 голос
/ 08 ноября 2010

Я создаю приложение AppEngine на Python.

Ради обсуждения представьте, что я создаю клон Gmail.За исключением миллиона коротких электронных писем на пользователя.

Дело в том, что у каждого пользователя будет большой поисковый индекс, все для себя;Как и в Gmail, у каждого пользователя есть личная «поисковая система» со своим контентом.

Теперь представьте, что многие из этих сообщений принадлежат нескольким пользователям (например, электронная почта в списке рассылки или копия сотен пользователей).Не все, но некоторая разумная доля.

Без преждевременной оптимизации, какой мой лучший выбор для хранения данных и индексов?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2010

Как насчет хранения списка пользовательских ключей в каждом почтовом сообщении?Это предполагает, что одно сообщение не будет принадлежать более чем сотне пользователей.

class User(db.Model):
    "usual properties like name, etc"

class Message(db.Model):

    # list of users that have this message
    users = db.ListProperty(db.Key)

Если вы хотите неограниченное количество пользовательских * сообщений, вы можете использовать другую таблицу:

class UserMessage(db.Model):

    user = db.ReferenceProperty(User)
    message = db.ReferenceProperty(Message)

вот пара хороших статей по моделированию отношений, подобных этим на GAE:

http://code.google.com/appengine/articles/modeling.html http://blog.notdot.net/2010/10/Modeling-relationships-in-App-Engine

0 голосов
/ 17 ноября 2010
class User(db.Model):
    pass

class Message(db.Model):
    text = db.StringProperty()

class MessageIndex(db.Model): # parent is a Message
    users = db.StringListProperty() #users keys

class UserIndex(db.Model): # parent is an User
    messages = db.StringListProperty() #messages keys

Взгляните здесь или прочитайте pdf .

...