1

我正在Python中构建一个AppEngine应用程序。AppEngine数据策略来处理每个用户的大型索引?

为了便于讨论,假设我正在构建Gmail克隆。除了每个用户一百万条短信。

重点是,每个用户都会有一个大的搜索索引,全部给他们自己;就像Gmail一样,每个用户都有自己内容的个人“搜索引擎”。

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

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

回答

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

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