我正在构建一个应用程序,其中有一些事件存储在数据存储区中,该模型(简化)如下:
class Event(db.Model)
plan = db.ReferenceProperty(Plan)
points = db.FloatProperty()
date = db.DateTimeProperty()
cumelativePoints = db.FloatProperty()
其中Plan是将事件分组给用户的父实例。我的挑战是(a)我需要一个一致性排序,因为事件之前事件的得分总和存储在事件中(b)多个事件可以同时发生(c)日期可以改变(即,事件的顺序改变)
在Building Scalable Web Applications with Google App Engine(幻灯片36)中,建议使用复合字符串属性。我的问题是如何实施?我有两个建议:
在模型中创建一个额外的字符串属性(称之为索引)和计划中的计数器,因此新属性(在psudo中)self.index = self.date.tostring+"|"+self.plan.counter
?当按索引查询顺序和更新日期更新索引时。
在模型中创建增量计数器(例如self.i
),排序时,首先按计数器(i
)排序,然后按日期排序;总共.order("i").order("date")
。
哪个最好还是有另一个更好的解决方案?
非常感谢答案!对不起草率的记谱法,糟糕的英语和项目的所有额外细节!