8

나는 다음과 같은 명령을 통해 MySQL 데이터베이스로 95기가바이트 CSV 파일 (MySQL은 5.1.36)을 업로드하려고 해요 :95 GB의 CSV 파일을 MySQL MyISAM 테이블에 업로드합니다. 데이터 infile : CSV 엔진을 대체할까요?

CREATE TABLE MOD13Q1 (
rid INT UNSIGNED NOT NULL AUTO_INCREMENT, 
gid MEDIUMINT(6) UNSIGNED NOT NULL , 
yr SMALLINT(4) UNSIGNED NOT NULL , 
dyyr SMALLINT(4) UNSIGNED NOT NULL , 
ndvi DECIMAL(7,4) NOT NULL comment 'NA value is 9', 
reliability TINYINT(4) NOT NULL comment 'NA value is 9', 
ndviquality1 TINYINT(1) NOT NULL , 
ndviquality2 TINYINT(1) NOT NULL , 
primary key (rid), 
key(gid) 
) ENGINE = MyISAM ; 

LOAD DATA INFILE 'datafile.csv' INTO TABLE MOD13Q1 FIELDS TERMINATED by ',' LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(gid, yr, dyyr, ndvi, reliability, 
ndviquality1, ndviquality2 
) ; 

나는 순간에 DOS를 통해이 스크립트를 실행 해요,하지만 데이터베이스 응답하지 않습니다. 작은 CSV 파일 (1.5GB)에서도 정상적으로 작동합니다. 이 파일 크기에서 작동합니까?

이 작업을보다 효율적으로/더 빠르게 수행하는 방법에 대한 권장 사항이 있습니까? 엔진 = CSV가 대안이 될까요? (색인 생성이 활성화되지 않았습니다. -> 쿼리가 너무 느리게 실행될 수 있습니까?)

업데이트 팁

감사합니다, 그것은했다!

mysql> LOAD DATA INFILE 'E:\\AAJan\\data\\data.csv' INTO TABL 
E MOD13Q1 
    -> FIELDS TERMINATED by ',' 
    ->  LINES TERMINATED BY '\r\n' 
    ->  IGNORE 1 LINES 
    ->  (gid, yr, dyyr, ndvi, reliability, 
    ->  ndviquality1, ndviquality2 
    -> ) ; 
Query OK, -1923241485 rows affected (18 hours 28 min 51.26 sec) 
Records: -1923241485 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> 

희망 사항은 데이터를 여러 조각으로 나누는 것을 피하는 데 유용합니다.

+0

@ Mark : tokyo cabinet은 키/값 DBM이므로 아무 것도 할 수 없습니다. IMHO – RageZ

답변

1

가져올 때 모든 제약 조건을 비활성화해야합니다. 그것과는 별개로 나는 그것이 제대로 작동해야한다고 생각하고 그것은 아마도 시간이 걸릴 것입니다.

3

쉬운 방법, 당신은 청크에서 데이터를 분할해야하고 ...

0

BCP를들을 가져옵니다? .................................. 오 기다려. 어쨌든 그것은 일괄 처리 일 것입니다. 덩어리가 필요해. 로그 세그먼트 공간을 너무 많이 차지하지 않도록해야합니다. 잠금 횟수 제한. 한 번에 100 만 개가 넘는 모든 것이 너무 많습니다. BCP의 가장 잘 알려진 배치 크기는 10,000 레코드입니다!

0

나는 RageZ와 Sarfraz의 대답에 동의하지만, 나는 뭔가를 추가해야합니다.

1. 데이터베이스 캐시를 늘리고 일부 mysql 옵션을 재구성하면 RAM 사용에 도움이 될 수 있습니다.

이것 좀 봐 :

Mysql Database Performance tuning

나는 당신이 write_buffer, read_buffer, query_cache_size 및 기타 RAM 및 I/O 관련 옵션을 집중한다고 생각합니다.

2. 더 빠른 저장 장치가 필요할 것입니다. 지금 무엇을 사용하고 계십니까?

큰 데이터베이스의 경우 - 빠르고 현대적인 하드 디스크로 RAID-5 어레이를 사용해야합니다.

구성에 따라 일상적인 작업에 충분할 수도 있지만 백업 및 크라이시스 상황은 어떻습니까?

이렇게 큰 데이터베이스를 만들거나 복원하는 것은 컴퓨터에서 너무 많은 시간이 걸리므로 간단한 삽입 가져 오기에는 18 시간이 필요합니다.

나는 95GB가 정말로 큰 텍스트 파일이라는 것을 알고 있지만 ... 나는 당신이 최대 2-3 시간 안에 이런 간단한 작업을 할 수있는 하드웨어를 사용해야한다고 생각한다.

0

MySQLTuner - 성능 및 안정성 향상을 위해 MySQL 구성을 돕고 권장 사항을 제공하는 Perl로 작성된 고성능 MySQL 튜닝 스크립트를 사용해 볼 수 있습니다.