如何刷新保存在 Google App Engine 数据存储中的配置条目?
How to refresh configuration entries kept in Google App Engine Datastore?
我想将一些应用程序配置条目作为实体保存在 数据存储 中。现在,当我从 Datastore Viewer(开发环境)或 Google Cloud Platform Datastore 用户界面(生产环境)更新这些条目时,应用程序看不到新值。这是因为 ndb 缓存了实体。
我的(非常开放的)问题是:在数据存储中保存配置条目、从 Google 的用户界面更新它们并为应用程序提供新值的技术是什么?
我想到了以下几点:
在定义配置条目的 ndb.Model
子类上设置一个合理的 _memcache_timeout
- 但在这种情况下内存缓存的使用不是最佳的(执行了不必要的数据存储读取)。
将缓存设置保持在最大值,但在应用程序的管理区域中执行 flush
操作以单独刷新实体。这很棘手,因为您无法确定实体的实际缓存键。但通常它应该是 _memcache_prefix + key.urlsafe()
,其中 _memcache_prefix
定义在 ndb.context module.
从应用程序的管理区域更新所有配置条目,不要使用 Google 的数据存储用户界面 - 这需要额外的努力。
选项 1 - 大部分工作
使用 NDB 客户端库在 App Engine 中实现您自己的管理模块。如果您通过自己的应用程序对实体进行更改,那么它自然会为您写入正确的内存缓存密钥。
选项 2 - 更新延迟的交易成本
正如您已经建议的那样,缩短模型的最长缓存期限。例如,在大多数情况下,在更改生效之前允许 1 小时的时间并不是不合理的。
选项 3 - 工作最少,但在规模上不是个好主意
通过云控制台为 memcache 刷新整个缓存。
警告:如果你运行规模很大,这是个坏主意,因为它可能会导致请求激增。例如,如果您在 90% 的缓存命中率后 运行 将 100 万 reads/second 写入数据存储,您可能会在刷新后立即飙升至 1000 万 reads/second。
我想将一些应用程序配置条目作为实体保存在 数据存储 中。现在,当我从 Datastore Viewer(开发环境)或 Google Cloud Platform Datastore 用户界面(生产环境)更新这些条目时,应用程序看不到新值。这是因为 ndb 缓存了实体。
我的(非常开放的)问题是:在数据存储中保存配置条目、从 Google 的用户界面更新它们并为应用程序提供新值的技术是什么?
我想到了以下几点:
在定义配置条目的
ndb.Model
子类上设置一个合理的_memcache_timeout
- 但在这种情况下内存缓存的使用不是最佳的(执行了不必要的数据存储读取)。将缓存设置保持在最大值,但在应用程序的管理区域中执行
flush
操作以单独刷新实体。这很棘手,因为您无法确定实体的实际缓存键。但通常它应该是_memcache_prefix + key.urlsafe()
,其中_memcache_prefix
定义在 ndb.context module.从应用程序的管理区域更新所有配置条目,不要使用 Google 的数据存储用户界面 - 这需要额外的努力。
选项 1 - 大部分工作
使用 NDB 客户端库在 App Engine 中实现您自己的管理模块。如果您通过自己的应用程序对实体进行更改,那么它自然会为您写入正确的内存缓存密钥。
选项 2 - 更新延迟的交易成本
正如您已经建议的那样,缩短模型的最长缓存期限。例如,在大多数情况下,在更改生效之前允许 1 小时的时间并不是不合理的。
选项 3 - 工作最少,但在规模上不是个好主意
通过云控制台为 memcache 刷新整个缓存。
警告:如果你运行规模很大,这是个坏主意,因为它可能会导致请求激增。例如,如果您在 90% 的缓存命中率后 运行 将 100 万 reads/second 写入数据存储,您可能会在刷新后立即飙升至 1000 万 reads/second。