2016-07-28 1 views
0

이것이 내가 달성하려고 시도한 것입니다.Java를 사용하여 AS400 .MBR 파일을 플랫 파일로 읽기

우리는 선택 쿼리를 실행 한 후 DB2 데이터베이스에서 데이터를 읽는 GO-Anywhere라는 벤더 도구를 사용하여 파일을 작성하고 파일을 압축하여 ETL 도구가 수행 할 수있는 시스템으로 보내도록 프로세스가 진행 중입니다. 읽어.

JS는 JSCH를 사용하고 un-jaring을 사용하여 6.5GB 파일에서 위의 도구를 5 분 동안 거의 동시에 수행 할 수있었습니다. 그러면 이전 32 분에서 지금까지 27 분 동안 파일을 읽고 쓰는 시간이 줄어 듭니다.

그러나 우리는 더 나는 그 무언가가 무엇인지 거의 반 시간을 끌어 내릴 필요가있는 새로운 SLA 요구 사항을 충족하기 위해 약 13 홀수 분

.MBR을 읽을 수있는 내가 있었다 위에 수를 달성하기 위해 파일을 직접 작성하고 13 분 이내에 Linux 컴퓨터로 보내십시오. 그러나이 파일의 형식은 일반 텍스트가 아닙니다. Java를 사용하거나 SQL을 실행하지 않고 AS400 명령을 사용하여 .MBR 파일을 일반 텍스트 형식으로 변환하는 방법을 알고 싶습니다.

어떤 도움에 감사드립니다.

+0

글쎄, 우리는 "MBR 파일"이 무엇인지 또는 그것이 어떻게 포맷되어 있는지 알지 못합니다. 간단한 Google 검색 결과 .MBR (실제 파일 회원)은 컨테이너 일 뿐이므로 .MBR 지정에서 데이터 서식 지정 방법에 대해 아무 것도 언급하지 않는다고 생각합니다. 데이터 형식에 대한 기술적 인 설명을 찾아내어 .MBR에 저장하는 방법을 탐색해야합니다. –

+1

".MBR 파일"은 정확하게 파일이 아닙니다. 이는 DB2 파일 (또는 테이블)의 파티션과 더 유사합니다. DB2 테이블 정의를 모르면, 특히 SQL을 사용하지 않는 경우에 좋은 대답을 줄 수는 없습니다. 대답은 기술적으로 가능하지만 네이티브 API 지식을 가지고 프로그래밍하는 것이 좋습니다. 그리고 DB2 테이블 정의를 사용하더라도 SQL을 사용하지 않고 수행하는 것이 특별히 합리적이지 않을 수 있습니다. "일반 텍스트"는 잠재적으로 가장 까다로운 부분입니다. – user2338816

+0

그런 경우 DB2에서 기본 SQL을 실행하는 것 이외의 다른 방법으로 파일을 읽을 수 있습니까? –

답변

2

IBM i의 "FILE"이 Windows/Unix/Linux의 파일과 같다고 잘못 생각한 것입니다.

그렇지 않습니다.

IBM i의 다른 모든 오브젝트 유형과 마찬가지로 인터페이스가 잘 정의 된 오브젝트입니다.

* FILE 오브젝트의 특별한 경우에는 데이터베이스 테이블입니다. DB2 for i는 OS 상단에 설치된 애드온 DBMS가 아닙니다. DB2 for i는 단순히 OS에 통합 된 DBMS에 부여한 이름입니다. 사용자 프로그램은 Windows/Unix/Linux에서 파일로 할 수있는 것처럼 저장 공간을 직접 열 수 없습니다. OS가 제공하는 인터페이스를 따라 가야합니다.

레코드 수준 액세스 (RLA) 또는 SQL의 두 가지 인터페이스를 사용할 수 있습니다. 둘 다 Java 응용 프로그램에서 사용할 수 있습니다. RLA는 com.ibm.as400.access.AS400File 클래스에서 제공됩니다. SQL 액세스는 JDBC 클래스에 의해 제공됩니다.

RLA를 사용하면 한 번에 하나씩 레코드 세트를 처리하기 때문에 SQL이 최상의 성능을 제공합니다.

는 성능의 관점에서 사용할 수 JDBC properties 관련된 다양한 성능을 살펴 ..

을 가지고, 그것은 당신의 단일 프로세스가 완전히 즉, 시스템을 활용하는 것이 확률이 낮다. CPU 사용량은 100 %가 아니며 디스크 활동도 60-80 % 이상이 아닙니다.

그런 경우 가장 좋은 방법은 프로세스를 여러 프로세스로 나누는 것입니다. 각 프로세스를 선택한 레코드 집합으로 제한하는 방법이 필요합니다. 아마도 기본 키에 의한 분리. 레코드가 기본 키 순서가 아니면 오버 헤드가 추가됩니다. 테이블에 삭제 된 레코드가 없으면 RRN()을 사용하여 실제 순서대로 분리 할 수 ​​있습니다. 그러나 이전 버전의 OS에서 RRN()을 사용하려면 전체 테이블 검사가 필요하다는 경고를받습니다.

0

무슨 일이 일어나고 있는지 추측하는 것은 자택에서 재배 한 테이블 읽기 방법으로 압축을 풀지 않는 소스 테이블에 10 진수 필드가 압축되어 있다는 것입니다.

몇 가지 가능성이 있습니다.

  1. IBM i 팀이 10 진수로 표시된 모든 숫자 열이있는 소스 테이블에 대한보기를 작성하게하십시오. 또한 ETL에 필요하지 않은 열은 생략하십시오. 이러한 바이트를 이동하지 않아도 I/O가 줄어 듭니다. 그 위에 추출물을 수행하십시오. 참고 : 시스템에 이미 그러한보기가있을 수 있습니다.
  2. IBM i 팀이 적절한 색인을 작성하게하십시오. 종종 SQL 병목 현상을 적절한 인덱스로 완화 할 수 있습니다.
  3. ZIP 및 UNZIP을 사용하지 마십시오. raw 파일을 다른 시스템으로 보냅니다. 6GB에서도 기가비트 이더넷은 쉽게 처리 할 수 ​​있습니다.
  4. ETL 시스템에 ODBC 드라이버를로드하고 ETL 시스템에 사본을 보내지 않고 소스 테이블 (또는 해당 뷰)을 직접 읽도록하십시오.
  5. SLA 시간 제한은 어디에서 왔습니까? SLA에 '서브 초 응답 시간'이라고 표시되면 어떻게 하시겠습니까? 어떤 시점에서 SLA는 물리 법칙에 정의 된대로 현실의 일부 버전을 반영해야합니다. 나는 당신이 그 한계에 도달했다는 것을 말하는 것이 아닙니다 : 나는 당신이 그것에 대한 이론적 근거를 찾아야한다고 말하고 있습니다.
  6. IBM i 팀이 현재 패치 (PTF)인지 확인하십시오. IBM은 종종 PTF를 통해 성능 문제를 해결합니다.
  7. IBM i 팀에게 작업이 실행중인 서브 시스템에 충분한 메모리가 있는지 확인하십시오.
+0

감사합니다. –

+0

답변 중 하나라도 문제가 해결되면 답으로 '받아들입니다.' 그렇지 않다면 우리가 대답 할 수 있도록 질문을 편집하여 더 자세한 내용을 제공하십시오. –

+0

위의 Buck Calabro와 Charles에게 감사드립니다. 둘 다 대답 도움이, DB2는 수출이 도움이 될 것 같아요 빨리 그리고 데이터를 검색하는 자바를 통과하여 명령을 아래에 실행 델 select.csv 델 select * 로의 수출은 SCHMEA에서.표 **** CLI 오류 ***** SQLSTATE : 42601 네이티브 오류 코드 : -104 토큰 EXPORT가 유효하지 않습니다. 유효한 토큰 : (CL 끝내기는 무료 HOL D LOCK이 열린 상태로 전화를 겁니다. –