私はデータストアのエンティティとして、いくつかのアプリケーション設定エントリを保持したいと考えています。現在、データストアビューア(開発環境)またはGoogle Cloud Platform Datastoreユーザインタフェース(運用環境)からこれらのエントリを更新すると、新しい値はアプリケーションには表示されません。これは、ndbがエンティティをキャッシュするためです。Google App Engine Datastoreに保存されている設定エントリを更新するにはどうすればよいですか?
私の質問は、データストアに設定エントリを保存し、Googleのユーザーインターフェイスから更新したり、アプリケーションに新しい値を提供したりするための技術ですか?
Iは、以下を考えた:ndb.Model
構成エントリを定義サブクラスに妥当_memcache_timeout
を設定
- しかし、memcacheの使用量は(不要なデータストアが行われる読み出し)この場合の準最適です。
キャッシュ設定を最大で保持しますが、アプリケーションの管理領域に
flush
オペレーションを実装して、エンティティを個別にフラッシュします。エンティティの実際のキャッシュキーがわからないため、これは難しいことです。しかし、通常_memcache_prefix + key.urlsafe()
でなければなりません。_memcache_prefix
はndb.context moduleで定義されています。アプリケーションの管理領域からすべての設定エントリを更新し、Googleのデータストアユーザーインターフェイスを使用しないでください。これには余分な労力が必要です。
実稼働環境と開発環境の両方のenvコンソールでは、値を更新した後にmemcacheビューアにアクセスして手動でキャッシュをフラッシュできます。あなたは、古い値は表示されなくなります。これはすべてのエントリをフラッシュしますが、影響は小さくなければなりません - あなたのアプリはmemcacheの値が消えるように準備する必要があります。 –
あなたのアプリがこれらの設定をどのように使用するかに応じて、すでに実行中のアプリインスタンスも再起動する必要があります。 –
@DanCornilescu私は他の目的でもキャッシュを使用します(設定エントリを格納するためだけでなく)。キャッシュ全体をフラッシュすることは、私のケースでは無視できないパフォーマンスの影響を与えます。しかし、あなたのアイデアは他のシナリオでは素晴らしいと思います。 –