RFC 25: 빨리 열기 (철회)
저자: 프랑크 바르메르담
연락처: warmerdam@pobox.com
상태: 철회 (#2957 티켓에서 향상된 몇몇 특정 사항을 위해서 철회되었습니다 – 이 RFC는 향후 재개될 수도 있습니다)
요약
이 문서는 다양한 메타데이터 및 지원 정보를 사용할 수 없을 수도 있는 경우에도 래스터 파일을 가능한 한 가장 빨리 열 수 있게 해주는 응용 프로그램 용 메커니즘을 제안합니다. 이 제안의 목적은 주로 수많은 래스터 파일을 담고 있는 카탈로그를 작업하는 응용 프로그램을 최적화하는 것입니다.
구현
“GDAL_FAST_OPEN” 환경설정 옵션을 YES로 설정해서 응용 프로그램이 빨리 열기 모드를 요청할 수 있도록 합니다. 이 환경설정 옵션의 기본값은 NO로 가정합니다. 이 옵션을 YES로 설정하는 경우 데이터셋 열기 속도를 최적화할 수 있도록 선택한 드라이버가 다르게 동작할 수 있습니다. 가속 옵션은 다음을 포함합니다:
좌표계 확정 건너뛰기 – 드라이버가 EPSG 검색을 하지 않을 수 있다면 특히 유용합니다.
지원하는 .aux.xml 파일, 월드 파일 및 기타 관련 파일 찾기를 건너뜁니다.
주로 필수 메타데이터가 일종의 카탈로그로 이미 제공된 경우 데이터셋으로부터 래스터를 빠르게 출력하기 위해 이 빨리 열기 모드를 사용할 것으로 예상됩니다. 때문에 빨리 열기 모드에서도 데이터셋이 밴드 목록, 밴드 데이터 유형, 그리고 오버뷰를 정확하게 반환하는 것이 필수입니다.
스레드 로컬 환경설정 옵션
멀티스레딩 응용 프로그램에서 GDALOpen()
을 호출하는 동안에만 활성화되는 전체 프로세스 수준 환경설정 옵션을 사용하는 것은 적절하지 않습니다. 특히 이런 환경설정 옵션이 동일 프로세스의 다른 스레드에 있는 GDALOpen()
메소드에 영향을 미치지 않을 것이라고 보장하기가 어렵기 때문입니다. 이 문제는 다른 환경설정 옵션에도 영향을 미칩니다. 이 문제를 해결하려면 “스레드 로컬” 환경설정 옵션을 설정하는 새 함수를 추가해야 합니다:
void CPLSetThreadLocalConfigOption( const char *pszKey, const char *pszValue );
일반 스레드 로컬 데이터 처리(CPLGetTLS() 등등)를 이용해서 이 메커니즘을 활성화할 것입니다.
CPLSetConfigOption()
이 모든 스레드에 적용될 환경설정 옵션을 계속 설정할 것이라는 사실을 기억해야 합니다. 먼저 CPLGetConfigOption()
이 스레드 로컬 값을 검색하고, 그 다음 전체 프로세스 수준 값을 검색하고, 그 다음 환경 수준의 값을 검색할 것입니다.
작업 계획
빨리 열기 모드에서 드라이버를 가속시키기 위해 당분간 다음과 같은 변경 사항을 적용할 것입니다:
GDALOpenInfo
가 디렉터리에 있는 모든 파일의 목록을 불러오지 않을 것입니다.GTIFF 드라이버가 좌표계를 수집하지 않을 것입니다.
프랑크 바르메르담이 GDAL 1.7.0버전 배포 시기에 맞춰 트렁크에 이 작업을 완료할 것입니다.
활용
당장 구현할 계획은 없지만, GDAL VRT 드라이버가 이 메커니즘을 활용하기에 적합한 후보일 것입니다.
이론적으로, MapServer도 타일 색인화 래스터에 대해 이 모드를 활용하면 좋을 것입니다 – MapServer가 래스터 카탈로그가 아닌 기저 래스터 파일로부터 나온 지리변환(geotransform)에 의존한다는 점을 제외하면 말입니다. MapServer는 또한 색상표와 NODATA 값을 사용할 수 있을 것이라고 가정합니다.
ArcGIS도 이 기능을 활용할 것으로 예상됩니다.
하위 호환성 문제점
알려진 하위 호환성 문제점은 없습니다. 하지만 빨리 열기 모드에서 어떤 지원 정보를 생략할 수 있는지에 대해 버전별로 정확하게 일관성을 지키지 않는 경우 상위 호환성 문제점이 발생할 수도 있습니다.
테스트
적절한 드라이버 테스트 스크립트에 빨리 열기 모드를 테스트하기 위해 예상한 정보를 폐기하고 유지하는지를 확인하는 스크립트를 추가할 것입니다.
문제점
.aux.xml 파일이 오버뷰 정보의 소스인 경우도 있기 때문에 잠재적으로 바람직한 .aux.xml 파일 무시가 불가능합니다.
색상표, NODATA 값 및 지리변형을 포함하는 모든 메타데이터를 잠재적으로 폐기하기 때문에, 이 모드는 카탈로그에 이런 정보를 저장하지 않는 MapServer 같은 응용 프로그램에는 유용하지 않습니다.
이 RFC는 필요하지 않은 드라이버를 건너뛰어서
GDALOpen()
을 가속시키는 방법을 논의하지 않습니다. 다만 그렇게 한다면 꽤 도움이 될 수도 있습니다.