문제

저는 웹 사이트 방문자 분석과 비슷한 프로젝트를 진행하고 있습니다. 매일 평균 10,000 ~ 100,000 페이지의 페이지보기가있는 100 대 웹 사이트에서는 데이터 금액이 매우 커질 것입니다.

웹 사이트가있는 단일 테이블을 사용해야하거나 각 웹 사이트에 별도의 테이블을 사용해야합니까?

각각 별도의 테이블이있는 100 개의 웹 사이트를 통해 라이브 서비스를 변경하는 것은 큰 문제처럼 보입니다. 반면에 성능과 확장 성은 아마도 큰 데이터에 문제가 될 것입니다. 모든 제안, 의견 또는 조언이 가장 환영합니다.

도움이 되었습니까?

해결책

하나의 테이블은 어떻습니까 분할 웹 사이트 FK?

다른 팁

데이터를 감안할 때 가장 의미가있는 디자인을 사용한다고 말합니다.이 경우 하나의 큰 테이블.

레코드는 모두 동일한 열이 동일한 유형이므로 데이터베이스 정규화 관점에서 동일한 테이블에있는 것이 합리적입니다. 인덱스는 특정 행을 쉽게 선택할 수있게 해줍니다. 특히 전체 쿼리가 단일 인덱스의 데이터로 만족할 수있는 경우 (종종 경우가 될 수 있음).

방문자 분석에는 한 번에 많은 수의 행에서 작동하는 것 외에 다른 최적화 방법이없는 많은 작업이 필요합니다 (예 : 카운트, 합계 및 평균). 이와 같은 리소스 집약적 통계는 라이브를 가져 오기보다는 사전 계산 및 저장되는 것이 일반적입니다. 그것은 당신이 생각하고 싶은 것입니다.

데이터가 균일 한 경우 하나의 테이블로 이동하십시오. 여러 테이블이있는 모든 웹 사이트에서 선택 해야하는 경우 고통입니다. 그러나 충분한 스크립팅을 작성하면 여러 테이블로 수행 할 수 있습니다.

MySQL의 Merge Storage Engine을 사용하여 테이블 전체에서 선택을 선택할 수 있습니다 (그러나 좋은 성능을 기대하지 않고 열린 파일 수에 대한 Windows 하드 제한을 조심하십시오. Linux에서는 Ulimit을 사용하여 한도를 높일 수 있습니다. 창에서 할 수있는 방법이 없습니다).

나는 거대한 테이블을 여러 (수백)의 테이블로 부수고 Merge를 사용하여 선택했습니다. 나는 이것을했기 때문에 각 작은 테이블의 오프라인 생성과 최적화를 수행 할 수있었습니다. (예 : 최적화 또는 변경 테이블 ... 주문). 그러나 Select with Merge의 성능으로 인해 고유 한 사용자 정의 저장 엔진을 작성했습니다. (설명 http://blog.coldlogic.com/categories/coldstore/'Here에 설명)

단일 데이터 구조를 사용하십시오. 성능 문제가 발생하면 수평 파티셔닝이라고도하는 웹 사이트 ID로 테이블을 분할 할 수있는 많은 솔루션이 있습니다. 또는 복제를 사용할 수도 있습니다. 이것은 모두 읽기 대 쓰기의 비율에 달려 있습니다.

그러나 시작을 위해 물건을 간단하게 유지하고 적절한 인덱싱으로 하나의 테이블을 사용하십시오. 거래가 필요한지 여부를 결정할 수도 있습니다. MyISAM 또는 NDB (메모리 클러스터링)와 같은 다양한 MySQL 스토리지 엔진을 활용하여 성능을 높일 수 있습니다. 또한 캐싱은 데이터베이스에서로드를 오프로드하는 데 매우 좋은 역할을합니다. 대부분 읽고 쉽게 계산할 수있는 데이터는 일반적으로 캐시에 넣고 캐시는 데이터베이스로 이동하는 대신 요청을 제공하며 필요한 쿼리 만 데이터베이스로 이동합니다.

MySQL에 성능 문제가없는 한 하나의 테이블을 사용하십시오.

여기에 아무도 성과 질문에 대답 할 수 없습니다. 큰 테이블 하나가 충분한 지 여부에 관계없이 성능 테스트를 스스로 이해해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top