라벨이 java인 게시물 표시

[java] runon jdbc 라이브러리

이미지
  개요 https://github.com/runonio/stock 과 같은 runon의 프로젝트를 보면 직접 개발한 jdbc를 사용합니다. 관련 라이브러리를 개발한 시기는 대략 2013년 쯤으로 기억하는데 이때에는 mybatis 가 유행하던 시기로 지금 많이 사용하는 jpa 가 국내에서 잘 사용되지 않던 때였습니다. 수백만 단위의 데이터를 불러와서 수억건의 row 를 저장하는 일들이 있었는데 프레임웍에서 동작하는것보다 low level 까지 들어가서 조작하고 싶어서 제작 하였습니다. 오픈소스로 제공되는 라이브러리 입니다. https://github.com/runonio/commons modules -> jdbc 에서 사용할 수 있습니다. 그당시 상황 항상 사용되는 2천만 가량의 row 데이터가 있고, 이 row 데이터를 기반으로 매일 수백만건의 문서를 분석해야 하는 일이 있었습니다. 당시에는 분석결과 또한 오라클 엑사데이터에 구성하길 원하는 금융권이 많아서 대량 select 도중 데이터를 받는기능, 대량 insert 관련된 부분이 필요한 시점이었습니다. 그래서 2천만 가량의 row 는 싱글턴으로 메모리 인덱스 구조를 생성하여 미리 올려놓고 활용하는 형태로 개발을 하였는데 복잡한 쿼리가 필요 없을때가 많았고 불러온 이후에 java 객체로 변환하는 과정이 귀찮고, 단순쿼리를 짜는것도 귀찮아서 개발 하였습니다. 또 당시는 dump, link 권한이 없는 상태에서 db 데이터를 이관시키는 일 oracle -> mysql, mysql -> oracle, oracle -> mssql 등으로 서로 다른 db 시스템으로 이관시키는 일등이 많이 생기는 시기였는데 이러한 경우에 중간에 jdbc를 이용해서 프로그램 적으로 편하게 옮길 필요가 있었습니다. 이러한 상황에서 사용 DB를 설계하기전에 아래처럼 도메인 헤드별 타입을 정의하고, 용어사전을 만들어서 사용하는 경우가 많았는데 당시에는 이러한 규칙이 잘 지켜지지 않으면 데이터 품질평가 점수가 좋지 ...

[java] 파일 라인수 얻기, 특정라인 빨리 읽기 (빠른 라인처리)

  개발을 하던중 데이터 시스템을 제작할 일이 생겨서 java 로 복잡하지 않은 시스템을 만들기로 하였습니다. 아래와같이 간단한 설계를 진행하였고 .. 데이터는 json object 단위로 파일의 한라인에 입력 병렬 접근이 가능하게 하기위해 파일을 설정한 용량으로 나누어서 생성 각 데이터의 인덱스는 파일경로, 라인위치로 지정함 위 요건들을 충족하기 위해서 빠른 속도로 파일 라인수를 읽고 특정라인을 빨리 읽어오는 부분이 필요하게 되었습니다. 소스 https://github.com/runonio/commons modules -> commons 에서 사용할 수 있습니다. int count = FileUtil . getLineCount ( filePath ); String lineValue = FileUtil . getLine ( filePath , 77 ) 성능비교 성능 비교에 사용한 소스 //java.io 패키지 사용 try ( BufferedReader br = new BufferedReader ( new InputStreamReader ( new FileInputStream ( file ), charSet ))){ String line ; while (( line = br . readLine ()) != null ) { } } catch ( IOException e ){ throw new IORuntimeException ( e ); } //java.nio 패키지 사용 try ( Stream < String > lines = Files . lines ( Paths . get ( path ), StandardCharsets . UTF_8 )) { //noinspection OptionalGetWithoutIsPresent return lines . skip ( lineIndex ). findFirst (). get (); } catch ( IOExceptio...