Question

Je construis un système de messagerie hiérarchique qui sera hébergé sur Google AppEngine

Je l'ai modélisé après la technique décrite par Brett Slatkin dans bâtiment Applications évolutives, complexes sur App Engine

class Message(db.Model):
  sender = db.StringProperty()
  body = db.TextProperty()

class MessageIndex(db.Model):
  receivers = db.StringListProperty()

La question que je vais devoir déterminer la façon la plus efficace de suivre l'état de message pour un utilisateur. Par exemple est un read de message, archived, deleted pour un utilisateur particulier.

Voici la solution que je suis venu avec à ce jour.

J'utilise Datastore + 'de la StructuredProperty pour ajouter un état à le MessageIndex message

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 le bénéfice du MessageIndex. En outre, depuis le MessageIndex l'est dans le même groupe d'entités comme les écritures datastore de messages sont limités.

plein code source

Quelle serait la façon la plus efficace d'y arriver? Plût l'ajout d'un groupe d'entités supplémentaires 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
Était-ce utile?

La solution

Pour la meilleure interrogation - diviser votre liste « récepteurs » en quatre listes différentes -. « Non lu », « read », « archivé », « supprimé » et shuffle le record du récepteur entre les listes selon le cas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top