2013-02-11 2 views
1

매일 가져 오는 대용량 데이터를 처리하기 위해 테이블을 설정하는 가장 좋은 방법에 대한 일반적인 질문이 있습니다. 매일 1000 개의 레코드가 포함 된 10 개의 csv 파일을 가져 오므로이 테이블이 빠르게 확장됩니다.대용량 데이터 가져 오기 용 테이블 구조

작은 또는 중간 int에서부터 30 자의 varchar에 이르는 15 개 열로 구성됩니다.

에는 ID 필드 없다 - 나는 기본 키를 형성하기 위해 6 열을 가입 할 수 있습니다 -이 내가 웹 전면을 통해이 데이터를보고해야 가져올 것 var에 숯 전체 길이 약 45

것 요약 수준에서 끝내기 때문에 가져온 후에 보고서 표를 만들어야합니다.

이 데이터에는 일별 가져 오기 - 날짜, 지역, 고객 등에서 반복되는 많은 필드가 있으며, 매일 열의 절반 만 레코드와 관련됩니다.

질문 :

  1. 나는 덤프 테이블로 즉시 하나 개의 테이블로 모두를 가져와야합니다.
  2. 나는 가져 오기
  3. 내가 사용해야 자동 INC 동안 고유 키를 얻기 위해 내가 할 수있는 가져 오기 프로세스를 통해 데이터를 변환하고
  4. 내가 열을 기반으로 id 필드를 형성해야 다른 테이블에서 가져 오기를 분할해야 id 필드.
  5. 이 이노 등 테이블의 어떤 종류를해야

내 두려움이 힘들어 그 빌드로 테이블을보고를 추출하는 것이 테이블에 데이터 과부하인가?

정말 도움이됩니다. 감사.

답변

1
  1. 갖는 자동 증가 (Autoinc) ID를 사용하면 ID를 구성하여 6 열을 UNIQ 인덱스를 가질 수 대개는
  2. 데이터 무결성을 보장하기 위해 필요하지 않는 것보다 더 도움이된다
  3. MySQL은 데이터베이스에있는 레코드의 수백만 꽤 편안 충분한 RAM이있는 경우
  4. 수백만 개의 레코드가 여전히 두려운 경우 - 매월 데이터를 다른 테이블에 집계하십시오. 할 수 없다면 - RAM을 더 추가하십시오.
  5. 성능을 저하시키지 않는 한 가져 오는 동안 최대한 많은 데이터를 변환하십시오. 이미 가져 왔을 때 데이터를 변환하면 MySQL 서버에 불필요한로드가 추가되고 그렇게하지 않을 경우 피해야합니다.
  6. MyISAM은 대개 UPDATEd가 너무 자주 발생하지 않는 종류의 데이터 (예 : percona의 XtraDB 엔진을 살펴 보았습니다.)를 따라 잡았으며 기본적으로 동일한 성능 향상 기능을 제공합니다. 슬기로운.

여기서 가장 중요한 점은 데이터 보존률을 정의하는 것입니다. 1 년에서 2 년 후에는 일일 해상도를 유지해야하는 경우는 거의 없습니다.

미래의 일일 해상도가 여전히 필요하다고 생각되는 경우 저해상도 프레임으로 집계하고 아카이브하십시오 (mysqldump> bzip은 매우 효율적입니다).

+0

감사합니다. 좋은 점 - 가져 오기 중에 주요 문제 인 ID를 추가하는 것이 어렵다고 생각합니다. 논리적으로 csv 데이터를 분해 할 수있는 방법을 볼 수 없으며 테이블에서 외래 키로 생성 된 ID를 사용할 수 있습니다. 또한 변환 프로세스에 추가됩니다. 나는 당신이 확실히 아카이빙 물건이라고 생각한다. – user1479891

관련 문제