2010-02-17 7 views
2

내가 아직 구현하지 못한 생각이 있습니다. 왜냐하면 나는 두려움이 있습니다. 잘못된 트리를 짖고 있을지도 모릅니다. 주로 주제에 대한 인터넷 검색 결과가 거의 나타나지 않기 때문입니다.데이터베이스 내 Memoization - 좋은 생각이십니까? 어떤 경험?

기본적으로 시간이 많이 걸리는 서브 쿼리가 있기 때문에 대부분 느린 SQL 쿼리가 있습니다. 예를 들어, 그들은 "10-15 세 사이의 소년이 타고 빨갛게 달린 자전거를 셀 수 있습니다."라고 말합니다. 이것은 모든 자전거를 통해 흘러 드는 것처럼 비싸지 만 최종 결과는 하나의 숫자입니다. 그리고, 제 경우에는 그 숫자가 100 %가 될 필요는 없습니다.

이러한 종류의 문제에 대한 궁극적 인 해결책은 이러한 순열을 사전 캐시하기 위해 OLAP 기반 엔진을 적용하는 것입니다. 그러나 필자의 경우에는 많은 메트릭을 중심으로 데이터를 조각 내고 다듬 으려하지 않고, 다른 프로세스/데이터 저장소를 실행하면서 내 아키텍처를 복잡하게 만들지 않아도됩니다.

내 아이디어는 기본적으로 데이터베이스에서 이러한 하위 쿼리를 메모하는 것이 었습니다. 나는 "BicycleStatistics"라고 불리는 테이블을 가지고있을 수 있으며 위의 하위 쿼리의 출력을 입력과 출력의 이름 값 쌍으로 저장할 수 있습니다.

예 이름 : "c_red_g_male_a_10-15"값 : 235

그리고 쿼리가 실행으로 해당 테이블에 해당 값을 memoizes 메커니즘을 가지고있다.

아무도이 상황에 있었고 비슷한 시도가 있었습니까? 내가 생각하기에 이것과 같은 해결책은 "당신의 DB에 많은 RAM을 던져서 데이터베이스가 그것을 처리하게하는 것"이 ​​중요하다. (A) 나의 데이터베이스는 내가 편리하게 던질 수있는 RAM의 양보다 크다. (B) 데이터베이스가이 통계에 대한 정확한 번호를 얻을 수 있도록 보장 할 것입니다. 위와 같이 큰 승리를 얻으려면 하루 또는 이틀이 지나치는 숫자를 사용하는 것이 좋습니다.

의견/피드백 보내 주셔서 감사합니다. 당신의 DBMS가 그들을 지원하는 경우 톰

+1

쿼리 계획을보고 쿼리가 너무 느린 이유를 확인한 적이 있습니까? 비효율적 인 메소드 (예 : JOIN 대신 상관 된 부속 조회)를 사용 중이거나 어딘가에 색인이 누락되었을 수 있습니다. –

+1

"이런 종류의 문제에 대한 궁극적 인 해결책"- 먼저 쿼리 작업량에 적합한 인덱스가 있는지 확인하는 것입니다. –

+0

실제로 쿼리가 인덱스를 완전히 사용하는지 확인하는 데 많은 시간을 할애했습니다. 위에서 사용하고있는 예제는 다소 고안된 것이지만, 내 경우에는 몇 백만 개의 자전거를 가지고있는 것처럼 보입니다 ... 그리고 나는 여러 번 자전거를 돌릴 수 있도록 크기를 조정하려고합니다. –

답변