파일에서 데이터베이스로 데이터를로드하는 성숙한 코드 본문이 있습니다. 몇 가지 파일 형식이 있습니다. 그것들은 모두 고정 너비 필드입니다.Perl의 고정 폭 데이터 처리 속도를 높이려면 어떻게해야합니까?
코드의 일부는 Perl unpack()
함수를 사용하여 입력 데이터의 필드를 패키지 변수로 읽습니다. 비즈니스 로직은 이러한 필드를 '사람이 읽을 수있는'방식으로 참조 할 수 있습니다.
파일 읽기 코드는 파일을 읽기 전에 한 번 형식 설명에서 생성됩니다. 스케치 형태에서
는, 생성 된 코드는 다음과 같습니다
while (<>) {
# Start of generated code.
# Here we unpack 2 fields, real code does around 200.
($FIELDS::transaction_date, $FIELDS::customer_id) = unpack q{A8 A20};
# Some fields have leading space removed
# Generated code has one line like this per affected field.
$FIELDS::customer_id =~ s/^\s+//;
# End of generated code.
# Then we apply business logic to the data ...
if ($FIELDS::transaction_date eq $today) {
push @fields, q{something or other};
}
# Write to standard format for bulk load to the database.
print $fh join('|', @fields) . q{\n} or die;
}
코드를 프로파일 링 시간의 약 35 %가 압축을 풀고에서 소비와 최고의 공간 스트립 것을 알 수있다. 남은 시간은 데이터의 유효성을 확인하고 변형하고 출력 파일에 쓰는 데 소요됩니다.
런타임의 1 ~ 2 % 이상 소요되는 비즈니스 로직의 단일 부분이없는 것처럼 보입니다.
질문은 - 언 패킹과 공간 제거에서 조금 더 빠른 속도를 낼 수 있습니까? 가급적이면 FIELDS 패키지 변수를 참조하는 모든 코드를 리팩터링하지 않아도됩니다.
편집 :이 차이를 만드는
경우
$ perl -v
This is perl, v5.8.0 built for PA-RISC1.1
압축 해제의 왼쪽에 패키지 변수 목록을 사용하는 것이 최적 일 수 있는지 알고 싶습니다. –