在启用 Appstats 并分析我的应用程序后,我惊慌失措地试图弄清楚如何通过任何方式降低成本。我每个请求的大部分成本都来自查询,因此我试图尽可能地消除查询。
例如,我有一个查询,我想在某个日期 X 之后获取用户的 StatusUpdates。我使用查询来获取:statusUpdates = StatusUpdates.query(StatusUpdates.date > X)
。
所以我认为我可能会智取系统并避免查询,但为了降低读取成本而产生更高的写入成本。我认为每次用户写入状态时,我都会将该状态的密钥存储在用户的列表属性中。因此,我不会查询,而是会做ndb.get_multi(user.list_of_status_keys)
.
问题是,这两种方法之间的系统有什么区别?当然,我避免对第二种情况进行查询,但是这里的幕后发生了什么?我在第二种情况下正在做什么,我正在收集密钥,只是我做一个手动索引,GAE 会为我做查询?
一般来说,get_multi(keys) 和查询有什么区别?哪个更有效率?哪个成本更低?