我一直在研究google IO“构建可扩展的复杂应用程序”中描述的粉丝消息原则
在其中它建议使用list属性来表示接收者列表是一种可扩展的解决方案。
在这种情况下,如何更新list属性以便争用问题不会介入,如果应用程序正在处理许多用户
使用IO示例:
class message(db.model)
sender=db.stringproperty()
body=db.textproperty()
class messageindex(db.model)
receivers=db.stringlistproperty()
为了适应他们的例子我还需要
class followers(db.model)
user=db.userproperty()
followers=db.stringlistproperty()
(代码仅用于示例,未正确输入 - 抱歉)
概念是,如果有人关注您,您将其密钥添加到关注者模型中的关注者列表中,如果您发送消息,则将关注者列表存储在消息列表中 - 并使用简单查询所有用户获取消息 - 非常简单的东西。
问题是更新某些关注者列表。假设一些帐户可能有数百万粉丝 - 如果我只是更新实体他们将成为争用问题 - 一个人还需要多个条目,因为我认为他们是每个列表5000个条目的限制。当然,可以发送请求以“添加”或“删除”某人。什么是最好的方法来做到这一点。我在考虑使用task_queue服务。我正在考虑一个存储每个跟随请求的工作模型,并触发一个任务在60秒内运行。该任务将为人员关注者列表完成所有工作 - 并构建新列表。不确定这是如何工作的 - 但它会停止争用问题,因为只有一个线程可以在一分钟内执行。
有没有人有任何代码示例的好建议,帮助我如何以可扩展的方式做到这一点 - 我不认为m cache可以在方法中使用,因为任何丢失都意味着跟随请求可能会丢失。 / p>