Objectify와 함께 Google App Engine을 사용 중이며 5 분마다 db의 항목을 삭제하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? Google App Engine의 ThreadManager 또는 cron 작업을 사용해야합니까? 아니면 다른 방법이 있습니까?가 주기적으로 objectify의 항목을 삭제합니다.
답변
Cron 여기에 맞는 요구 사항이 있지만 삭제해야하는 항목의 크기가 걱정됩니다. (의견에 따라 5 분마다 수십만 개까지). 많은 엔티티를 삭제하는 데는 5 분 이상의 시간이 소요될 수 있으며 프론트 엔드 cron 핸들러의 마감 시간 인 10 분 이상이 될 수도 있습니다.
백엔드가 마감 기한없이 실행될 수 있으므로 가능한 해결책은 backend instance에서 삭제하는 것입니다. Cron은 삭제 될 엔티티를 쿼리하고, 키 전용 쿼리를 사용하여 키를 가져온 다음 background threads의 엔티티를 삭제하는 프로세스를 시작하는 데 사용될 수 있습니다.
프로세스가 무기한 실행될 수 있으므로 삭제가 완료되었다고 스레드가보고 한 후에 즉시 다시 쿼리하고 다음 엔티티 집합을 삭제할 수 있습니다. 백엔드에서 전역 인 메모리 잠금을 사용하여 후속 cron 요청이 별도의 프로세스를 시작하지 않도록 할 수 있지만 프로세스가 이미 실행되었음을 감지하면 자동 종료됩니다. 그래서 여기서 cron은 삭제 과정에서 keep-alive 신호로만 사용됩니다.
부수적으로이 엔티티를이 스케일에서 자주 쿼리하고 삭제하면 데이터 저장소 운영 비용이 엄청나게 비쌉니다. 당신이 원하는 것처럼
감사합니다. 내 구현을 다시 생각해 보겠습니다 –
단일 인스턴스에서 충분한 데이터 저장소 작업 처리량을 얻을 수 없기 때문에 이것이 작동하지 않는다고 생각합니다. 이것이 작동 할 수있는 유일한 방법은 map/reduce를 사용하는 것입니다. 데이터 저장소 연산에서 $ 150/day 이상을 소비합니다.데이터를 읽고 싶다면 타이밍 문제가 있습니다. – stickfigure
@stickfigure : 감사합니다. Jeff, 처리량도 궁금합니다. 내가 mapreduce를 좋아하는만큼, 그것은 구직자가 필요로하는 종류의 정밀한 제어를 제공하는지 모른다. (우리는 이전에 [여기] (http://stackoverflow.com/questions/15976406/objectify-and-timertask-no-api-environment-is-registered-for-this-thread?lq=1)에서이 문제를 논의하고있었습니다) 그것이 내 앱이라면로드와 삭제를 배포하기 위해 일종의 마스터 작업자 패턴을 사용 하겠지만, 구현 전략을 완전히 변경하는 것보다는 약간 과장 될 수 있습니다. –
는에, 5 분마다 소리 :
- 엔티티의 수천
- 집계 수백
- 수백 개체의 수천을 삭제 수백 개체의 수천을 쓰기
map/reduce를 사용하여이 작업을 수행 할 수 있습니다. 그러나 비용이 많이 들고 (하루에 수백 달러가 소요될 것입니다.) 특히 작업 큐가 백업 될 때 타이밍 문제가 발생할 것입니다.
이 데이터를 GAE 외부에 저장하는 것이 좋습니다. Google Compute Engine 계정을 만들고 여기에 mongodb 또는 redis 인스턴스를 설정하십시오. 또는 AWS에서 호스팅 할 수도 있습니다. GAE는 이러한 종류의 작업 부하에 적합하지 않지만 "전부 또는 아님"이 아닙니다. 클라우드의 다른 부분에서 서비스로 쉽게 작업 할 수 있습니다.
좋습니다, 감사합니다! 나는 그것을 들여다 볼 것이다. –
- 1. 어댑터의 arraylist.remove()가 ListView의 잘못된 항목을 삭제합니다.
- 2. 목록보기에서 항목을 클릭하여 항목을 삭제합니다.
- 3. 목록 항목을 주기적으로 탭하는 방법
- 4. backbone.js이 시리즈의 항목을 삭제합니다
- 5. C++ 벡터에서 중복 항목을 삭제합니다.
- 6. ObjectListView 항목을 반복하고 선택한 항목을 삭제합니다.
- 7. Objectify의 엔티티 순위 계산
- 8. objectify의 항목 목록로드
- 9. Linq RemoveAll은 모든 항목을 삭제합니다.
- 10. Android Picasso 캐시에서 항목을 삭제합니다.
- 11. ManyToMany - Join 테이블의 항목을 삭제합니다.
- 12. htaccess가 숫자 이전에 항목을 삭제합니다.
- 13. 링크 된 목록에서 항목을 삭제합니다.
- 14. 클릭하면 카트의 행을 삭제합니다. 목록의 ImageVIewof 행 항목을 삭제합니다.
- 15. 주기적으로 ListView에서 항목을 제거하는 방법은 무엇입니까?
- 16. Objectify의 성능을 분석하는 방법은 무엇입니까?
- 17. 데이터베이스의 데이터를 목록보기에 표시하고 선택된 항목을 삭제합니다.
- 18. django 데이터베이스는 특정 수의 항목을 삭제합니다.
- 19. 목록에서 목록 항목을 삭제 한 후 삭제합니다.
- 20. Javascript 푸시가 첫 번째 항목을 계속 삭제합니다.
- 21. 중첩 된 사전에서 항목을 동적으로 삭제합니다.
- 22. jQuery 프레임의 키보드에서 선택한 항목을 삭제합니다.
- 23. 오른쪽으로 스 와이프를 추가하여 ListView 항목을 삭제합니다.
- 24. 웹 페이지의 항목 목록에서 데이터베이스 항목을 삭제합니다.
- 25. Android에서 커서 어댑터의 목록 항목을 삭제합니다.
- 26. 데이터가 이미 존재하면 목록보기에서 항목을 삭제합니다.
- 27. Click 메서드에서 동시에 모든 항목을 삭제합니다.
- 28. WPF (MVVM) 목록 상자에서 항목을 삭제합니다.
- 29. vb 스크립트를 사용하여 보낸 모든 항목을 삭제합니다.
- 30. jquery 계산기는 연산자 이전에 항목을 삭제합니다. jquery
5 분마다 삭제할 항목의 수는 얼마나됩니까? –
@IbrahimArief : 대다수, 아마도 수십만 명? 아니면이 항목을 자동으로 만료시키는 방법이 있습니까? –
그건 .. 거대 해. 공유 데이터를 자동으로 만료하는 유일한 방법은 Memcache에서 [만료] (https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/Expiration) 옵션을 사용하는 경우입니다. 당신은 [put operation] (http://bit.ly/10S6xve)을하지만, 당신의 데이터는 일시적 일 것입니다. 자주 비용이 많이 드는 수십만 개의 엔티티를 삭제하면 규모에 대해 확신 할 수 있습니까? –