我想通过使用Django-nonrel在Google App Engine上设计像线程消息传递系统这样的gmail。我看过“在App Engine上构建可扩展,复杂的应用程序”并阅读了关于SO的以下问题。如何在Google App Engine上设计线程风格的消息传递系统
App Engine Messaging System with Message Status - Design Pattern
我喜欢这个主意凯文指着(App Engine Messaging System with Message Status - Design Pattern),所以我目前的型号有这样的:
class Message(models.Model):
sender = models.ForeignKey(User)
content = models.TextField()
thread_id = models.IntegerField()
class MessageReceivers(models.Model):
message = models.ForeignKey(Message)
users = ListField(models.CharField())
status = models.IntegerField() # 1 unread, 2 read ....
ListField上的Django nonrel就是从这里:
http://www.allbuttonspressed.com/blog/django/2010/03/Updates-on-djangoappengine
这里是我的问题,我不知道如何实现显示计数消息在每个线程像Gmail一样。让我澄清一下我的观点。
当一个用户Sirius向Harry和Ron发送消息时。 (简化的解释)模式应该是这样的:
Message
id = 1
sender = Sirius
thread_id = 1
MessageReceivers
message = 1
users = [Harry, Ron]
然后,哈里回复天狼星,但出于某种原因,他并不包括罗恩:
Message
id = 2
sender = Harry
thread_id = 1
MessageReceivers
message = 2
users = [Sirius]
和Sirius回复哈利太,但他又包括罗恩:
Message
id = 3
sender = Sirius
thread_id = 1
MessageReceivers
message = 3
users = [Haary, Ron]
当天狼星和哈利看到自己的收件箱中,有一个与消息(3)的计数的线程。 Ron看到他的收件箱里有一条消息(2)。我应该如何计算这些数字?我应该制作一个新模型来保存它们吗?
由于提前,
柳
编辑
正如凯文给我介绍了一个线程模型,我意识到,我不需要为我的要求的关系指数模型,所以我目前的模型看起来如下所示。
class Message(models.Model):
sender = models.ForeignKey(User)
content = models.TextField()
class Thread(models.Model):
user = models.ForeignKey(User)
messages = ListField(models.CharField()) # array of message id
lastmodified = models.DateTimeField()
# could have a status field for read or unread, not sure for now
我可能会发现,在进一步发展这些模型的困难,但我会和他们一起去暂且:)
电子邮件(和扩展,Gmail)不做广播,因此不需要那个谈话中描述的技巧。即使它这样工作,普通电子邮件上的收件人数量也足够小,这几乎没有必要,而对于邮件列表,邮件列表的工作量也很大。你确定你的用例类似gmail吗? –
是的,你是对的。我注意到我并不完全需要一个关系索引来满足我的需求,所以我决定像Kevin解释的那样使用Thread模型。 –