단일 필드가있는 단일 테이블로 MySQL 데이터베이스를 작성하십시오. 그런 다음 파일을 데이터베이스로 가져 오십시오. 이를 통해 특정 라인을 쉽게 찾을 수 있습니다.
나는 아무것도 빨리 될 수 있다고 생각 (만약하지 않습니다 head
및 tail
이미 실패). 결국 줄을 찾으려는 응용 프로그램 n
은 n
개행 을 찾을 때까지 전체 파일을 찾아야합니다 . 일종의 조회 (파일에 대한 행 인덱스에서 바이트 오프셋까지)가 없으면 더 나은 성능을 얻을 수 없습니다.
MySQL 데이터베이스를 생성하고 데이터를 가져 오는 것이 얼마나 쉬운 지 감안할 때 이것이 실용적인 접근법이라고 생각합니다.
방법은 다음과 같습니다.
DROP DATABASE IF EXISTS helperDb;
CREATE DATABASE `helperDb`;
CREATE TABLE `helperDb`.`helperTable`( `lineIndex` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `lineContent` MEDIUMTEXT , PRIMARY KEY (`lineIndex`) );
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable (lineContent);
SELECT lineContent FROM helperTable WHERE ( lineIndex > 45000000 AND lineIndex < 45000100 );
/tmp/my_large_file
읽고 싶은 파일입니다.
각 줄에 탭으로 구분 된 값을 가진 파일을 가져 오는 올바른 구문은 다음과 같습니다.
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable FIELDS TERMINATED BY '\n' (lineContent);
이것의 또 다른 주요 장점은 나중에 다른 라인 세트를 추출하기로 결정한 경우 (물론 데이터베이스를 삭제하지 않는 한) 처리를 다시 몇 시간 기다릴 필요가 없다는 것입니다.