2009-11-20 6 views
1

ActiveRecord 유형의 레코드 객체를 여러 개 조작하는 데 문제가 있습니다 (복잡한 작업에서는 레코드가 추출되지만 같은 테이블에서 추출 됨). 그 사이에 해당 객체 세트를 전달하고 싶습니다. 컨트롤러 동작. 그래서 나는 몇 가지 해결책을 가지고 있지만 어떤 방법을 선택해야하는지에 대한 임금입니다. 간단하지만 더 못생긴 솔루션은 세션에 저장하는 것입니다. 하지만 세션에 설정된 대형 객체를 저장하면 분명히 빈번한 직렬화 및 비 직렬화 프로세스로 인해 애플리케이션 성능이 느려지는 것을 알 수 있습니다 (직렬화는 SOAP 및 바이너리 형식화와 같은 웹 서비스에서 시간이 많이 소요됩니다). 유망한 것으로 보이는 두 번째 옵션은 이러한 ActiveRecord 모델 객체를 모두 데이터베이스에 블로그로 저장하는 것이며, 하나의 쿼리로 모든 데이터를 검색하고 해당 데이터 세트로 필요한 작업을 수행 할 수 있습니다. 하지만 이진 객체 형식이므로 데이터베이스에서 객체를 가져온 후에 모든 객체를 반복하는 방법을 모르겠습니다. 호출 검사 메소드는 모든 속성과 값을 보여 주지만 나는 완전히 당황 스럽다. 누구나 ActiveRecord 모델 타입 객체를 단일 레코드 바이너리 객체로 저장하고 그것을 검색하고 데이터 세트를 거치는 방법을 말해 줄 수 있습니까? Base64와 같은 인코딩이 필요합니까? 마침내 원하는 결과를 memcached 얻을 것이라고 ?? 또는 적어도 이것을 해결할 수있는 링크?큰 ActiveRecord 객체를 바이너리 데이터로 처리하기

오랜 시간 동안 문의 해 주셔서 감사 드리며 미리 감사드립니다.

+0

Ajax 사용에 대해 생각해 보셨습니까? 나는 왜 당신이 얼룩을 지킬 필요가 있는지 알지 못해서 더 깊게 갈 수 있는지 모른다. –

답변

0

대답은, 나는 이것을 말하는 것이 싫지만, 아마 그 방법은 결함이있는 것일 것입니다. 이 정확한 데이터를 다시 쿼리하거나 BLOB 행을로드하고이를 직렬화 해제하는 데 더 많은 시간이 걸릴 것입니까? 내 생각 엔 인덱스 없이는 거의 같은 시간이 걸리지 만 인덱스를 사용하면 unserialize 호출없이 BLOB를로드 한 것보다 DB에서 전체 결과 세트를 더 빨리 얻을 수 있습니다.

어쩌면 내가 잘못 생각한 것일 수도 있지만 확실히 돌아 오는 데이터 양은 거의 동일하므로 db 시간의 큰 부분은 정확히 동일합니다.

Memcached는 분명히 여기에서 도움이 될 것입니다. 그러나 쿼리 캐시 (MySQL을 사용한다고 가정 할 때)가 도움이 될 것입니다. 두 가지 경우의 캐시가 개체에 맞게 충분히 크다고 가정하면 같은 방법에 대한 반복적 인 쿼리가 두 가지 방법 중 하나를 통해 빠르게 레이저로 반환되어야합니다.

하지만 세션에 저장하는 것이 좋지 않다는 것과 BLOB가 아마도 쿼리를 다시 수행하고 쿼리 캐시가 반환하도록하는 것과 거의 같을 것이라고 생각할 수도 있습니다.

그러나 모든 기반을 커버하기 위해 얼마나 많은 데이터가 돌아오고 얼마나 오래 돌아 왔는지, 얼마나 오랫동안 쿼리를 사용하고 있는지 알고 있습니까? 나는이 게시물이 실제로 성능에 관한 것 같지만 구현 세부 사항에 의해 흐려진다.

관련 문제