2

데이터 저장소에 엔티티로 일부 응용 프로그램 구성 항목을 보관하고 싶습니다. 이제 데이터 저장소 뷰어 (개발 환경) 또는 Google Cloud Platform Datastore 사용자 인터페이스 (프로덕션 환경)에서 항목을 업데이트하면 응용 프로그램에서 새 값을 볼 수 없습니다. ndb이 엔티티를 캐시하기 때문입니다.Google App Engine Datastore에 저장된 구성 항목을 새로 고치는 방법은 무엇입니까?

내 질문은 : 데이터 저장소에 구성 항목을 유지하고, Google 사용자 인터페이스에서 업데이트하고, 응용 프로그램에 새로운 값을 제공하는 기술은 무엇입니까?

나는 다음과 같은 생각을 한 다음 ndb.Model 구성 항목을 정의 서브 클래스에 합리적인 _memcache_timeout을 설정

  1. -하지만 Memcache의 사용은 (불필요한 데이터 저장소 수행 읽기)이 경우에 최적입니다.

  2. 캐시 설정을 최대로 유지하고 응용 프로그램의 관리 영역에 flush 작업을 구현하여 항목을 개별적으로 플러시합니다. 엔티티의 실제 캐시 키를 확신 할 수 없기 때문에 이는 까다로운 작업입니다. 하지만 일반적으로 _memcache_prefix + key.urlsafe()이어야하며 _memcache_prefixndb.context module에 정의됩니다.

  3. 응용 프로그램의 관리 영역에서 모든 구성 항목을 업데이트하고 Google의 데이터 저장소 사용자 인터페이스를 사용하지 마십시오. 추가 작업이 필요합니다.

+1

production 및 development env 콘솔에서 값을 업데이트 한 후 memcache 뷰어로 가서 캐시를 수동으로 비울 수 있습니다. 앱에서 이전 값을 더 이상 보지 않아야합니다. 이것은 모든 항목을 플러시하지만 영향은 작아야합니다. 어쨌든 memcache 값이 사라지는 앱을 준비해야합니다. –

+1

앱이 이러한 구성을 사용하는 방식에 따라 이미 실행중인 앱 인스턴스를 다시 시작해야 할 수도 있습니다. –

+0

@DanCornilescu 다른 목적으로도 캐시를 사용합니다 (구성 항목을 저장하는 것만이 아님). 캐시 전체를 비우는 것은 필자의 경우 성능에 별다른 영향을 미치지 않습니다. 그러나 당신의 생각은 다른 시나리오에서 크게 들립니다. –

답변

2

옵션 1-

는 NDB 클라이언트 라이브러리를 사용하여 앱 엔진에서 자신의 관리 모듈을 구현하여 대부분의 작업. 자신의 응용 프로그램을 통해 엔티티를 변경하면 자연스럽게 올바른 memcache 키가 작성됩니다.

옵션 2 - 업데이트에 대한 거래 비용은 이미 제안으로, 모델의 최대 캐시 보존 기간을 줄일 수

지연됩니다. 예를 들어, 대부분의 경우 변경 사항이 적용되기 전에 1 시간을 허용하는 것은 불합리하지 않습니다.

옵션 3 - 최소 작동하지만 memcache에 대한 클라우드 콘솔을 통해

매입 규모는 전체 캐시에서 나쁜 생각.

경고 : 큰 규모로 실행하면 요청이 크게 늘어날 수 있으므로 좋지 않은 생각입니다. 예를 들어 90 % 캐시 적중률을 기록한 후 1 백만 판독/초를 데이터 저장소로 실행하는 경우 플래시 즉시 1,000 만 회의 읽기/초로 급상승 할 수 있습니다.

+2

옵션 1은 복잡하지 않아도됩니다. 필요한 Memcache 항목 (예 : "/ admin/update_config")을 정리하는 간단한 (보호 된) 처리기가 필요합니다. –

+1

@AndreiVolgin - 실제로는 설정하지 않지만 여전히 설정 중입니다. 더 많은 코드/서비스를 제공합니다. 궁극적으로 일정 업데이트, 롤백, 로깅, 변경 사항 확인 등과 같이 앱 기능을보다 효과적으로 관리 할 수있는 점을 제공 할 수 있습니다. –

관련 문제