2010-03-31 2 views
2

나는 꽤 특별한 최적화 문제에 직면 해있다.특정 MYSQL 문제에 대한 정규화되지 않은 대체?

저는 현재 4 개의 정규화 된 데이터 테이블을 가지고 있습니다.

수천 명의 사용자가 매 초마다 AJAX를 사용하여이 테이블에서 최신 정보를 가져옵니다.

내가 필요한 데이터의 하위 집합을 상대적으로 쉽게 예측할 수 있다는 것 ... 가장 최근의 100 개 정도의 항목이 네 개의 정규화 된 표에 있습니다.

나는 정규화를 연구하고있다. 그러나 아마도 더 쉬운 해결책이 있다고 생각한다.

필자는 매 초마다 하나의 SQL 쿼리를 실행하여 필요한 정보를 압축하고 임시 캐시 테이블에 저장 한 다음 모든 사용자 쿼리를이 테이블에서 가져올 수 있다고 생각했습니다. 이렇게하면 4 개의 테이블을 복잡한 결합으로 한 번만 실행 한 다음 사용자가 캐시 된 테이블에서 간단한 조회를 수행하면됩니다.

이것이 가능한지 정말 모르겠다. 이 제안이나 다른 제안에 대한 의견은 많은 도움이 될 것입니다.

감사합니다.

답변

3

memcache을 고용 할 수 있습니까?

DB 부하를 줄이는 데 도움이됩니다. 당신이 MySQL 버전 5.1.6을 실행하는 이상 당신이 Events을 활용할 수있는 경우

+0

+1 이것은 가장 간단하고 최상의 답변입니다. 데이터베이스를 피하는 것이 최선의 방법입니다. – ryeguy

+0

예, 아마도. 나는 그것에 익숙하지 않지만 그것을 조사 할 것이다. 감사! – Booker

2

는 :

CREATE EVENT e     
ON SCHEDULE 
EVERY 1 MINUTE     
DO 
INSERT INTO tempTable (`col1`,`col2`,`col3`) 
    SELECT `col1`,`col2`,`col3` 
    FROM table1 
    WHERE col1 = "value" 
0

비정규은 thinking의 결과해서는 안됩니다. 그러나 테스트. 문제 쿼리 란 무엇입니까? 가지고 계십니까?

다른 장비 (하드웨어, 웹 서버, 비즈니스 로직 레이어 등)가 이러한 트래픽을 처리 할 준비가 되었습니까? 또는 귀하의 질문은 상상력입니까?

1

쿼리 캐싱을 사용해 보셨습니까?

Select SQL_CACHE * from myTable inner join etc..... ; 

데이터가 자주 변경되는 경우 이는별로 도움이되지 않을 수 있습니다. (캐시는 데이터가 변경 될 때마다 자동으로 무효화됩니다.)

참고 : 데이터베이스 외부에서 캐시를 시도 할 수 있으면 항상 데이터베이스를 이동하십시오. 또한 쿼리 캐싱이 켜져 있는지 확인하려면 변수 SHOW VARIABLES LIKE %query_cache%을 확인해야 할 수도 있습니다.