我将远程 API 用于一些实用程序任务,并且我注意到它比在 Appengine 上运行的代码慢几个数量级。一个简单的 get_by_id(list) 使用远程 API 需要几分钟,而在 Appengine 上运行几秒钟。
日志显示远程 API 分别提取需要几秒钟;而在 Appengine 上,几乎同时检索到整个对象列表。
有什么办法可以改善这种情况吗?
我将远程 API 用于一些实用程序任务,并且我注意到它比在 Appengine 上运行的代码慢几个数量级。一个简单的 get_by_id(list) 使用远程 API 需要几分钟,而在 Appengine 上运行几秒钟。
日志显示远程 API 分别提取需要几秒钟;而在 Appengine 上,几乎同时检索到整个对象列表。
有什么办法可以改善这种情况吗?
不要忘记,remoteapi 在本地执行您的代码,并且只为数据存储/blobstore/等调用 appengine 服务器。操作。因此,从本质上讲,您正在运行的代码会访问网络上的数据库。它肯定更慢。
好吧,我自己测试了一下,发现获取 1000 个实体需要很长时间。在这种情况下,我觉得 remote_api 客户端为每个实体发出一个请求。这是因为我们的数据存储 API 调用的默认选项已更改。您可以通过在呼叫上设置 max_entity_groups_per_rpc 配置选项来加快呼叫。这是一个例子:
config = db.create_config(max_entity_groups_per_rpc=50)
entities = MyModel.get_by_id(l, config=config)
# or
entities = db.get(key_list, config=config)
或者,使用键查询要快得多,因此,如果您的键列表是连续的,并且您可以使用键范围构建查询,例如:
MyModel.all().filter('__key__ >=', db.Key.from_path('MyModel', 1)).\
filter('__key__ <', db.Key.from_path('MyModel', 1001))
你可以解决这个问题。