我在GAE上有一个应用程序,允许用户将\ edit帖子添加到任意路径(如wiki)。我将所有帖子存储在一个表中。该表的结构如下:
class WikiPosts(db.Model):
path = db.StringProperty(required = True)
content = db.TextProperty(required = True)
date_created = db.DateTimeProperty(auto_now_add = True)
在主页上,我想显示每条路径的最新帖子。
我的问题与此问题相似(Select first row in each GROUP BY group?),但答案涉及使用GAE中无法实现的联接。
我可以有一个专用字段来跟踪每个网址的最新帖子但是可以使用gql查询吗?
截至目前,我正在使用此查询返回按创建时间排序的所有wiki帖子的所有版本。
db.GqlQuery("SELECT * FROM WikiPosts ORDER BY date_created DESC limit=10")
答案 0 :(得分:1)
由于您没有唯一的路径列表,并且由于GAE不支持等效的SQL SELECT DISTINCT
(请参阅here,here和here) ,你必须
我认为选项3是您最好的选择,因为(通常是GAE的情况),您将把数据存储完全放入您想要的内容(即,使写入更复杂,有利于快速读取。 )
答案 1 :(得分:0)
您可以致电:
def get_latest_posts(amount=10):
return db.GqlQuery("SELECT * FROM WikiPosts where path =:1 ORDER BY date_created DESC limit=:2", path, amount)
这将为每条路径返回最新帖子。
答案 2 :(得分:0)
与每次页面访问进行查询有很多相关的问题。当然,您可能拥有更多的实例,并且必须与支持查询的索引的最终一致性相抗衡。由于您的页面只是十大列表,为什么不简单地使用memcache对象进行管理?如果找不到该对象,则执行查询并编写缺少的memcache对象。发布列表更新将在实体put()之前写入/重写内存缓存 - 这可能是延迟函数(任务队列)的良好候选者。