Python 帮助使用App Engine的框架';s最终一致性+;缓存
我相信我有一个相当典型的用例,这对于最终的一致性是非常困难的。我想知道是否有人已经创建了python框架来帮助解决这个问题 我有一个GET请求,它对一组实体发出查询。它们很少更新。 我有一个一次更新一个实体的POST请求,更新实体会影响它们是否/如何出现在GET请求中 由于实体很少改变,我想将GET请求缓存很长一段时间,比如说几天或几周。因此,如果我有机会获得更新实体的帖子,我可以清除memcache 如果我处理一个POST请求、更新一个实体、清除缓存,然后很快就会收到一个GET请求,那么问题就会出现,最终一致的数据存储查询可能会显示旧的查询结果,这些结果将在接下来的几天或几周内被memcached 与其简单地更新数据存储和清除缓存,我需要:Python 帮助使用App Engine的框架';s最终一致性+;缓存,python,google-app-engine,google-cloud-datastore,eventual-consistency,Python,Google App Engine,Google Cloud Datastore,Eventual Consistency,我相信我有一个相当典型的用例,这对于最终的一致性是非常困难的。我想知道是否有人已经创建了python框架来帮助解决这个问题 我有一个GET请求,它对一组实体发出查询。它们很少更新。 我有一个一次更新一个实体的POST请求,更新实体会影响它们是否/如何出现在GET请求中 由于实体很少改变,我想将GET请求缓存很长一段时间,比如说几天或几周。因此,如果我有机会获得更新实体的帖子,我可以清除memcache 如果我处理一个POST请求、更新一个实体、清除缓存,然后很快就会收到一个GET请求,那么问题就
1. update the datastore
2. get the cached query
3. modify the cached query (with the proper sorting too!)
4. update the cache with the new modified query results (with a cas() operation)
这似乎是一个很常见的问题。是否有任何python框架可以帮助缓解这个问题
ndb没有帮助,因为数据存储查询绕过了所有缓存
如果有关系的话,我目前正在使用django Nonl,django tastypie处理GET请求。根据我在GAE上使用memcache的理解/经验,您的数据将被逐出,除非您的流量非常大,但即使如此 但是,我认为您应该能够通过将查询的范围限制在实体组来使用,因为它们提供了很强的一致性。从文档中: 要获得高度一致的查询结果,需要使用 祖先查询将结果限制为单个实体组。这 之所以有效,是因为实体组既是一致性的单位,也是一致性的单位 交易性。所有数据操作都应用于整个组; 在整个实体完成之前,祖先查询不会返回其结果 该组是最新的。如果您的应用程序依赖于强一致性 对于某些查询的结果,您可能需要考虑这一点 设计数据模型时需要考虑的问题 假设您的GET请求与某种用户或其他可识别的“父级”绑定,或者您可以创建一个由该GET检索的所有实体共享的全局父级,那么您将能够使用该父级来检索强一致的发送
我问了一个相关的问题,它展示了设置父项、键和易于查询的ID的一些好技巧:缓存查询是非常困难的-因为无法枚举或查询memcache,所以无法知道在一般情况下缓存哪些查询。我不认为有一种方法可以自动做到这一点:如果你想缓存查询,你必须根据具体情况来做。