2014-12-24 5 views
0

Objectify에서 개체를 @Cache로 주석 처리하여 memcache에 쓸 수 있습니다. 특정 속성이 데이터 저장소에 기록되지 않도록하려면 @Ignore로 주석을 추가 할 수 있습니다.Objectify에서 memcache에 데이터를 쓰지 만 데이터 저장소에 속성을 쓰지 않습니까?

  • 내가 찾고있는 것은 데이터 저장소에 있지만 memcache에는 속성을 저장하는 방법입니다.
  • 그리고 이것을 .save (onlyCache)와 결합하고 싶습니다. {pseudo-code only}

즉, 저는 memcache에만 유지되지만 데이터 저장소에는 유지되지 않는 속성을 가질 수 있기를 바랍니다. 엔티티가 memcache에서 검색되면이 등록 정보가 채워집니다. 그렇지 않으면 비어 있습니다.

동시에 엔티티를 memcache에만 저장할 수 있지만 데이터 스토어에는 저장하지 못하도록하고 싶습니다.

왜 이것이 의미가 있습니까? 때로는 사용자가 온라인 상태 일 때만 필요한 속성이 있으며 중요하지 않은 부분은 누락되어 야합니다. 예를 들어 자주 쓰이지는 않지만 자주 읽는 사용자 엔티티 (예 : 소셜 네트워크의 친구 상태)를 상상해보십시오. 사용자가 탐색 할 때마다 현재 상태 값이 변경되는 각 사용자의 존재를 추적하고 싶습니다. 내 앱에서. 이미 존재하는 상태 표시기가 이미 부착되어있는 memcache에 사용자를 저장할 수 있으면 좋을 것입니다. 따라서 클라이언트가 검색되면 클라이언트는 지속 된 값과 사용 가능한 캐시 된 정보가있는 해당 엔터티를받습니다. 엔티티를 memcache 또는 모든 방법을 통해 데이터 스토어에 저장하려는 경우 .save (onlyCache)를 Objectify에 지시하도록 제어 할 수 있으면보고 싶은 항목과 적용하지 않을 항목을 미세 조정할 수 있습니다.

Objectify에 있거나 이와 같은 것이 가능할 수 있습니까? 이 접근법으로 볼 수있는 단점이 있습니까?

답변

2

데이터베이스에 보존되지 않은 속성은 엔티티에 속해 있지 않아야합니다. 언급 한 것과 같은 런타임 속성은 MemcacheService (https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/MemcacheService)를 별도로 사용하여 memcache에 저장할 수 있습니다. 그렇게하면 코드가 복잡해지지 않고 (주석이 너무 많아 @Ingore, @CacheOnly 등) 스키마를 깨끗하게 유지할 수 있습니다.

+3

이것은 올바른 답변입니다. Objectify는 지속성 API입니다. 엉뚱한 비즈니스 로직을 캐싱 주위에서 원한다면 Objectify 위에 놓아야합니다. – stickfigure

+0

Objectify가 Cloud Endpoints와 함께 사용되는 경우 아무리해도 계층이 깨끗하지 않으므로보기에 동의하지만 엔티티는 한쪽에서 지속성을 유지하고 다른 쪽에서는 REST를 통해 전송하기 때문에 이걸 가져오고 싶습니다. 따라서 우리는 이미 코드에서 두 가지 다른 것에 대한 주석을 가지고 있으며, 그 시점에서 동일한 엔티티에 캐싱을 위해 더 많은 것을 추가하는 것이 합리적 일 수 있습니다. 그러나 나는 주석이 많은 코드를 읽기가 어렵다고 동의한다. –

관련 문제