AppEngine数据策略处理每个用户的大索引?

时间:2010-11-08 00:23:46

标签: python google-app-engine database-design google-cloud-datastore

我正在使用Python构建AppEngine应用程序。

为了便于讨论,想象一下我正在构建一个Gmail克隆。除了每个用户有100万封短电子邮件。

关键是,每个用户都有一个大的搜索索引,全部都是自己的;就像Gmail一样,每个用户都有自己内容的个人“搜索引擎”。

现在想象许多这些消息属于多个用户(例如邮件列表电子邮件或cc:一百个用户)。不是全部,而是一些合理的分数。

如果没有过早优化,我最好的选择是存储数据和索引吗?

2 个答案:

答案 0 :(得分:2)

如何在每封邮件中存储用户密钥列表?这假设单个消息不会被超过一百个用户拥有。

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

答案 1 :(得分:0)

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

查看here或阅读pdf