2 votes

Système de messagerie App Engine avec statut des messages - Modèle de conception

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.

Code source complet

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

2voto

Kevin P Points 1665

Pour faciliter l'interrogation, divisez votre liste de "destinataires" en quatre listes différentes - "non lu", "lu", "archivé", "supprimé" et mélangez les enregistrements des destinataires entre les listes comme il convient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X