나는 여러 카운터 캐시가있는 db 스키마를 사용하고 있습니다. 카운터 캐시를 여러 테이블에 분산시키는 대신 모든 다양한 카운터 캐시가있는 user_counters라는 테이블을 갖고 싶습니다. 대부분 사용자와 동일한 ID가되지 않습니다, 관련 사용자에 대한 UserCounter 기록을레일 카운터 캐시
def update_user_counter(column, user_id)
UserCounter.increment_counter(column, user_id)
end
을하지만 :이 같은 방법으로 서비스 객체에서 이러한 캐시를 업데이트 할 것입니다. 제가하고 싶은 것은 다음과 같습니다 :
def update_user_counter(column, user_id)
UserCounter.increment_counter(column, UserCounter.where('user_id = "#{user_id}"')
end
나는 이것을 어떻게 할 수 있습니까? 감사!!
호기심 : 왜? 새로운 코드를 작성하는 데 심각한 기술적 빚이 있습니다. 따라서이 스키마는 어떤 이점을 제공합니까? – Matchu
좋은 질문 ...이 user_counters 테이블에는 많은 페이지 뷰에서 사용되는 약 10 개의 카운터 캐시 열이 있습니다. 따라서 10 개의 개별 쿼리를 실행하여 10 개의 캐시 된 카운터 값을 얻는 대신 1 개의 쿼리를 실행할 수 있습니다. 다른 캐싱 전략 (예 : memcached)이 없기 때문에 가장 효율적인 대체 접근 방식처럼 보입니다. –
데이터베이스 내부에서 트리거를 사용하여 이것을 구현할 생각이십니까? 그래, 그래, 레일스는 데이터베이스에 어떤 논리가 있어야한다고 생각하지 않지만 때로 레일스는 어리 석고 짧다. –