모든 상황에 대한 포괄 규칙이 없습니다. 웹 사이트의 성능과 효율성에 영향을 미치는 많은 요소가 있습니다. 그래서 '최고의'싱글이 없습니다.
Magento와 같은 것을 보면 두 가지가 모두 동일합니다. 한편으로는 모든 EAV 구조가 추상화되어 있고 n 번째로 정규화 된 데이터 조각이 있습니다. 반면에 성능상의 이유로 플랫 테이블에서 미리 계산 된 값을 집계합니다. 여기에는 할인 금액, 기본 가격, 기본 수량 및 선택된 통화로 표시된 세금 등이 포함됩니다. 이전 상황은 유연성과 견고성 측면에서 가장 좋으며 플랫 테이블은 성능 측면에서 더 좋습니다.
일괄 계산을 처리 할 때 플랫 테이블을 사용하면 모든 것이 이미 완료되었으므로 분명히 빠릅니다. 그러나 커널 팬이 지적했듯이, 설정에 대한 변경은 모든 값의 대량 재 계산을 필요로 할 수 있습니다. 주문 내역과 같은 과거 데이터의 경우 사람들이 지불 한 실제 금액을 다시 계산하기를 원하지 않을 것이지만 최상의 솔루션을 결정할 때이를 수행 할 필요성을 고려해야합니다.
성능이 중요하고 계산을 실행하는 데 비용이 많이 든다면 때때로 값을 일괄 적으로 새로 고쳐야 할 수도 있다는 것을 알게되면 정보를 캐싱할지 여부를 결정할 수 있습니다.
그러나 성능 측면에서 중요하지 않거나 계산이 비싸지 만 자주 실행되지 않는 경우 응용 프로그램의 비즈니스 로직 처리 부분 즉 코드에 실제로 속하는 것처럼 데이터베이스에서 벗어나는 것이 더 깔끔합니다.
"최상의"을 정의하는 방법은 여러 가지가 있으므로 상황에 따라 다릅니다. 속도, 청결 함, 메모리 사용량, 프로세서 요구 사항, 디스크 공간 사용량, 개발 관리자가 정의한 임의의 데이터 구조에 맞게 필요성을 균형있게 조정하는 것만으로도 이러한 요소를 고려해야합니다.
실제 문제가 해결되지 않으면 투기가 실제로 주어질 수 있습니다. 좀 더 복잡한 상황이 있다면, 내 생각을 들여다보고 기꺼이 받아 들여야합니다.
편집 : 평이한 데이터 및 200,000 개가 넘는 제품이 포함 된 Magento 카탈로그 페이지는 페이지 캐싱을 사용하지 않고 약 10-20 초 내에로드됩니다. 플랫 데이터가 비활성화되고 EAV 구조가 사용되면 몇 분이 걸릴 것입니다. 저는 지금 일하고 있지 않기 때문에 프로파일 링 데이터를 편리하게 만들지는 못하지만, 실제 어플리케이션에서 단 하나 최고의 솔루션이 없다는 사실을 입증합니다.
[MySQL 대 PHP에서 계산하기] (0120-337-005) –
@DanLee, MySql에서 계산을 수행 중이며, 내 저장 중입니다. 다른 열의 값 – Namit
다른 열을 추가하면 업데이트 할 때 약 2 개의 테이블을 고려해야 만 가입 솔루션을 고수 할 수 있습니다. 이것은 지저분해질 수 있기 때문에 –