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