2011-07-28 4 views
5

간단한 성능 및 튜닝 이상의 성장을 시작한 웹 사이트를 운영하고 있습니다. MySQL을 백엔드로 사용하는 PHP 앱입니다. MySQL이 제대로 튜닝되고 코드가 최적화됩니다.관계형 데이터베이스에서 비 관계형 데이터베이스로의 비정규 화 데이터 모범 사례

것은 내가 일을 빠르게하기 위해 일종의 비정규 화를 사용할 수 있다는 것을 알고있다.

이베이 또는 아마존과 유사한 사이트가 있다고 가정합니다. 데이터베이스에 제품 관련 정보 (판매자, 제품을 구입 한 고객, 도시, 주 등)가 있습니다. 그것은 Relational DataBase의 여러 테이블이 될 것이므로 좋은 쿼리를 만들기 위해이 방법을 사용하는 것이 좋습니다. 그러나 예를 들어 홈 페이지의 경우 하나의 비정규 화 문서 (예 : MongoDB)를 사용할 수 있습니다. 이와 유사한 최신 제품과 모음, denormalied 될 수 :

products = { 
    { 
     id:13, 
     name:"Some product", 
     city:"aCity", 
     state:"aState", 
     price:"10" 
    }, 
    { 
     id:123, 
     name:"another product", 
     city:"aCity", 
     state:"aState", 
     price:"10" 
    } 
} 

이런 식으로, (모두가 참여 조인으로) 그 컬렉션을 대신 MySQL 데이터베이스를 조회 할 수 있으며, 상황이 정말 빨리 얻을 수 있습니다.

이제 여기에 질문이 있습니다. 언제 어떻게 데이터를 비정규 화합니까? 예를 들어 삽입 할 때 데이터를 비정규 화하려고 결정할 수 있습니다.

내 "create-product.php"(간단히 말해서). 나는 mysql을 위해 모든 "insert into"를 할 수있다. 그리고 나서 Mongo 콜렉션에 저장할 수있다.

아니면 그냥 서버에서 프로그램을 실행할 수 있습니다. 또는 최신 제품을 찾을 수있는 cron을 만드십시오.

이들은 모두 가능성이 있습니다. 너 뭐하니? 당신의 만기는 무엇입니까?

고마워요.

+0

간단한 캐시를 찾는 것처럼 보입니다. – hakre

+0

나는 그것을 해봤 다. 그러나 Mongo를 선호합니다. memcache만큼 빠르지는 않지만 지속성이 있습니다. 지금 당장 필요한 것입니다. 감사합니다 – santiagobasulto

+0

어떻게 chache의 백엔드를 mongo로 바꾸고 시도해 보시겠습니까? – hakre

답변

4

개념적으로 당신은 어떤 종류의 캐시를 만들고 있으며, 시간이 많이 걸릴 것입니다. 따라서 영구 캐시에서 로딩하는 것이 합리적이라는 가정하에 지속적으로 유지하려고합니다. 실제 DB로 돌아가는 것보다 빠릅니다.

HTML 페이지 조각 또는 JSON 문자열 캐싱, 영구 메모리가 아닌 내결함성이있는 분산 메모리 내 캐시 사용과 관련하여 몇 가지 변형이 있습니다.

모든 캐싱 솔루션에 대한 큰 의문은 "얼마나 오래된 것일까?"입니다. 24 시간이 경과 된 일부 데이터의 경우에는 별 문제가되지 않습니다. 예를 들면 다음과 같습니다. 최신 리뷰, 일부 일괄 업데이트 만 가능합니다. 좀 더 긴급한 정보를 얻으려면 좀 더 신속한 업데이트가 필요하지만 실제로는 너무 많은 추가 처리를 주류에 두지 않으려 고합니다. 예를 들어 캐시를 업데이트하기를 기다리고 있기 때문에 고객에게 느린 구매 경험을 제공하는 것은 부끄러운 일입니다. 이 경우 큐에 "여기에 업데이트가 있습니다."라는 메시지가 표시되거나 "현재 항목이 오래되었습니다."라는 메시지가 나타나면 캐시에서 여유 공간을 선택하고 필요할 경우 새로 고칠 수 있도록합니다.

+0

+1 메시지 대기열에 대해, 그리고 일반적으로 좋은 답변입니다. –

+0

정말 좋은 대답 djna. 고마워. – santiagobasulto

관련 문제