2

我正在构建一个将托管在 Google AppEngine 上的线程消息传递系统

我根据 Brett Slatkin 在Building Scalable, Complex Apps on App Engine中描述的技术对其进行了建模

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

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

我必须确定跟踪用户消息状态的最有效方法的问题。例如,针对特定用户的消息read, 。archiveddeleted

这是我到目前为止提出的解决方案。

我正在使用Datastore+的 StructuredProperty 向消息添加状态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)

这个解决方案虽然简单,但否定了 MessageIndex 的好处。此外,由于 MessageIndex 与消息数据存储在同一实体组中写入将受到限制。

完整的源代码

实现这一目标的最有效方法是什么?添加一个额外的实体组会是一个更好的解决方案吗?

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

1 回答 1

2

对于最简单的查询 - 将您的“接收者”列表分成四个不同的列表 - “未读”、“已读”、“已归档”、“已删除”,并根据需要在列表之间打乱接收者记录。

于 2011-06-14T22:54:19.497 回答