Frage

Ich erstelle ein Messaging -System mit Threaded, das auf Google Appengine gehostet wird

Ich habe es nach der von Brett Slatkin in beschriebenen Technik modelliert Bauen skalierbare, komplexe Apps auf App Engine

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

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

Das Problem, in dem ich den effizientesten Weg ermitteln muss, um den Nachrichtenstatus für einen Benutzer zu verfolgen. Zum Beispiel ist eine Nachricht read, archived, deleted Für einen bestimmten Benutzer.

Hier sind die Lösung, die ich mir bisher ausgedacht habe.

Ich benutze DataStore+'s structuredProperty, um der Nachricht einen Zustand hinzuzufügen 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)

Diese Lösung negiert zwar einfach, negiert den Nutzen des MessageIndex. Da sich der MessageIndex in derselben Entitätsgruppe befindet wie der Nachrichtendatastore, wird er begrenzt.

Voller Quellcode

Was wäre der effizienteste Weg, um dies zu erreichen? Wäre das Hinzufügen einer zusätzlichen Entitätsgruppe eine bessere Lösung?

class MessageState(model.Model):
  user_key = model.KeyProperty()
  message_key = model.KeyPropery()
  message_state = model.IntegerProperty(default=0) # 0-unread, 1-read, 2-archived
War es hilfreich?

Lösung

Für die einfachste Abfrage - teilen Sie Ihre "Empfängerliste" in vier verschiedene Listen auf - "ungelesen", "lesen", "archiviert", "gelöscht" und mischen Sie den Empfängerdatensatz zwischen den Listen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top