Je construis un système de messagerie à fils qui sera hébergé sur Google AppEngine.
Je l'ai modelé d'après la technique décrite par Brett Slatkin dans Créer des applications complexes et évolutives sur App Engine
class Message(db.Model):
sender = db.StringProperty()
body = db.TextProperty()
class MessageIndex(db.Model):
receivers = db.StringListProperty()
Le problème que je rencontre est de déterminer le moyen le plus efficace de suivre l'état des messages pour un utilisateur. Par exemple, un message read
, archived
, deleted
pour un utilisateur particulier.
Voici la solution que j'ai trouvée jusqu'à présent.
J'utilise Datastore+ de StructuredProperty pour ajouter un état au message MessageIndex
class Message(model.Model):
sender = model.StringProperty()
body = model.TextProperty()
class _DisplayState(model.Model):
user_key = model.KeyProperty()
state = model.IntegerProperty(default=0) # 0-unread, 1-read, 2-archived
class MessageIndex(model.Model):
receivers = model.StructuredProperty(_DisplayState, repeated=True)
Cette solution, bien que simple, annule l'avantage du MessageIndex. De plus, puisque le MessageIndex est dans le même groupe d'entités que le datastore de messages, les écritures seront limitées.
Quel serait le moyen le plus efficace d'y parvenir ? L'ajout d'un groupe d'entités supplémentaire serait-il une meilleure solution ?
class MessageState(model.Model):
user_key = model.KeyProperty()
message_key = model.KeyPropery()
message_state = model.IntegerProperty(default=0) # 0-unread, 1-read, 2-archived