我很喜欢在 GAE 上构建几个简单的应用程序,但现在我对如何在应用程序引擎上构建音乐收藏管理器感到困惑。简而言之,我不知道如何在对另一个属性进行排序的同时对多个属性进行过滤。
假设核心模型是一个包含多个属性的相册,包括:
- 标题
- 艺术家
- 标签
- 出版年份
- 类型
- 长度
- 轨道名称列表
- 心情列表
- 插入数据库的日期时间
我们还假设我想使用这些属性过滤整个集合,然后按以下之一对结果进行排序:
- 出版年份
- 专辑长度
- 艺术家姓名
- 信息添加到数据库的时间
我不知道如何在不遇到索引爆炸难题的情况下做到这一点。具体来说,我想做这样的事情:
Albums.all().filter('publication_year <', 1980).order('artist_name')
我知道这是不可能的,但是解决方法是什么?
这似乎是一种相当通用的应用程序类型。音乐专辑可以是餐馆、瓶装 Wine 或酒店。我有一个具有描述性属性的项目集合,我想对它们进行过滤和排序。
是否存在我忽略的最佳实践数据模型设计?有什么建议吗?
最佳答案
这里有几个选项:您可以尽可能地进行过滤,然后按照 Alex 的建议对内存中的结果进行排序,或者您可以重新设计数据结构以使用相等过滤器而不是不等式过滤器。
例如,假设您只想按十年进行过滤,则可以添加一个字段来编码录制歌曲的十年。要查找十年之前或之后的所有内容,请对要跨越的十年执行 IN 查询。这将需要每十年进行一次底层查询,但如果记录数量很大,这仍然比获取所有结果并在内存中对它们进行排序要便宜。
关于python - 在 Google App Engine 上过滤和排序音乐信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213959/