david's daily developer note

Oracle BulkLoading 개념. 본문

Develop (kids)

Oracle BulkLoading 개념.

mouse-david 2010. 10. 19. 20:41
728x90
Oracle에서는, 질의를 통해서가 아니라, 그 보다 낮은 단계에서 직접 대용량 데이터를 넣을 수 있게 끔 BULK LOADING을 지원한다.


INSERT엔 무슨 문제가 있나? 없다,하지만...

대부분의 경우, 테이블로 새로운 데이터를 추가하기 위해 기존에 해왔던 방법은 INSERT문장이다. 그러나 대용량 데이터 로딩은 성능에 대한 당면과제를 안고 있는 데 이것은 각 레코드나 레코드 셋을 위한 분리된 문장을 보내는 전통적인 방법보다는 스트리밍 기술을 사용하는 것으로 가장 잘 대처를 할수 있다는 것이다. 
당신이 INSERT 문장을 보낼 때, 당신은 효과적으로 문장들의 배치나 각 문장의 데이터 값과 선형 메타데이터를 보낸다. 스트리밍에서는 당신은 데이터 값들의 연속적인 스트림에 따른 메타데이터를 한번에 보낸다. 스트리밍으로 작업 시는 서버는 각 칼럼을 위한 데이터 타입에 따라서 한번에 내부구조(버퍼 같은)를 만들 준비를 할 수 있다. 그리고 그 스트림에 데이터들이 전송되는 동안 구조들 내부로 값들을 계속 받아들인다. INSERT문장으로 작업 시는 서버는 각 문장을 위해 초기 과정을 반복해야 한다. INSERT 문장이 서버내부적으로 구조를 만드는데 보다 적은 비용을 들이기 위해 실행계획을 재 사용할 수 있음에도 불구하고 하나의 스트림 구조는 하나의 문장기반의 데이터 로딩 구조보다는 항상 좋은 성능을 보인다. 출처 - http://mystop.tistory.com/191


공간 데이터는 일반 적인 데이터에 비해서 크다. 각 레코드의 크기는 작을 수 도 있으나,, 모든 레코드의 수는 매우 많다.

또한, 공간이란 정보의 특성상.. 기존 정보를 유지해야 하며, 기존 정보와 새로운 정보를 모두 활용하는 정책이 시스템 개발 효율에 영향을 미친다. 이런 관점에서,, 그 어마어마한 데이터를 Insert 질의를 통해서 넣고 있다면,, 답답한 일이다.


벌크 로딩이 유용할 것이다. 


문법 같이 자세한 내용은 메뉴얼을 보쟈. 

http://www.oracle.com/technetwork/indexes/documentation/index.html


간단하게, *.ctl , *.dat 파일을 만든다. *.ctl은 삽입될 데이터베이스의 스키마를 형식에 맞게 작성한것이며, *.dat는 벌크 로딩할 데이터다.

실행은 아래와 같이 Oracle 서버가 설치된 커멘드 창에서, sqlldr 명령어와 아이디/비번 실행할 ctl파일을 적는다. 


C:\> sqlldr ID/Passward control = c:\bulk.ctl



소수점아래 약 10자리정도의 실수형으로 구성된 POINT정보다 

759개의 데이터... 가 1초정도.

728x90

'Develop (kids)' 카테고리의 다른 글

listener.ora , tnsnames.ora  (0) 2010.11.02
PostgreSQL CRUD Query Simple Example  (0) 2010.10.26
[TwiterAPI] 2. Twitterizer Class  (0) 2010.10.07
[TwiterAPI] 1. 권한 인증.  (0) 2010.10.07
Oracle 11g Spatial 스키마, 인덱스 생성 SQL.  (0) 2010.08.27