MySQL batch insert

CREATE TABLE t_user_logs (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(30) NOT NULL,
  action_ts TIMESTAMP NOT NULL,
  action_type VARCHAR(30) NOT NULL,
  KEY `idx_user_logs_uniq` (`username`,`action_ts`)
);

Upsert

INSERT INTO t_user_logs
  (username, action_ts, action_type)
VALUES
  ('user1', now(), 'LOGIN'), ('user2', now() 'LOGIN)
ON DUPLICATE KEY UPDATE
  action_type=VALUES(action_type);

Replace

REPLACE INTO t_user_logs
  ( username, action_ts, action_type)
VALUES
  ('user1', now(), 'LOGIN');

Insert ignore

대용량 넣을 때 반복데이터가 들어올 때가 간혹 있는 경우

INSERT IGNORE INTO t_user_logs
  (username, action_ts, action_type)
VALUES
  ('user1', '2000-01-01 11:30:10', 'LOGIN'), ('user2', '2000-01-01 11:30:11', 'LOGIN');

Insert Batch

ignore안하고 해도 됨

INSERT INTO t_user_logs   (username, action_ts, action_type) VALUES   ('user1', '2000-01-01 11:30:10', 'LOGIN'), ('user2', '2000-01-01 11:30:11', 'LOGIN');

참고

  • https://stackoverflow.com/questions/2714587/mysql-on-duplicate-key-update-for-multiple-rows-insert-in-single-query
  • https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/
  • https://www.techbeamers.com/mysql-upsert/
  • https://number1.co.za/mysql-insert-if-not-exists/

Apache Storm 사용기 -> 포기(Flink로 전환)

Clojure로 코어를 만들었다는데서관심을 가졌으나최신버전인 2.0.0에서는 Java로 컨버팅 되어 버렸다는 슬픈 소식

python, clojure, java, shell script 폴리글랏이라고 했으나python코드는 별로 쓸모없는 포인트만 먹고 있다. 빼버리면 좋겠는데
실행 파라미터체크하는 정도 코드만 있다. 스톰 토폴로지를 파이썬으로도 만들 수 있다고되어 있는 것 같은데… 별로 그럴 생각은 없어서..
이 부분을 제외하고 자바와 설정파일을 이용하는게 여러 환경에 배포하는데도 편리하고 좋을 것 같다

intellij로 열려고 하는데 잘 안열린다.uber-jar 돼지자르를 만들 때 사용하는 shade-deps로 인한 임포트오류가 발생

Storm에서 한개의 실행단위를 topology라고 하는데 이걸 로컬에서 실행테스트도 해보고 디버깅도 해보고 로그도 찍어보고 하고싶은데… 다 쉽지 않다.
유닛테스트, 로컬실행, 디버깅 환경부터 만들어야 뭘 제대로 쓸 수 있을 것 같다.

문서…
이것저것 써 있기는 한데
고인물파티같은 느낌
한국 커뮤니티도 없다.
Flink만 쓰는건가
인터페이스단위로 분석해놓은 문서조차 없다
튜토리얼이나 예제가 있긴한데 딱 맞는 분석사례만 있는게 아니니까.. 결국 분석해서 써야된다

코틀린도 그랬지만… 초기에는 불만이 많은 편이라
좀 더 써 봐야지 판단할 수 있겠다


프로젝트에 적용을 시도했으나

Flink로 전환하려고 한다

  • 유닛테스트 지원안됨
  • 연동테스트 지원안됨
  • 로컬 데몬이 자꾸 죽음
  • Flink보다 업데이트가 안되고 있음
  • Flink보다 커뮤니티가 약함
  • 1에서 2로 메이저 업데이트 되면서 도큐먼트 링크가 다 죽음(2버전이지만 invator나 마찬가지인 상태)
  • 실행스크립트에 파이썬이 혼용되는 등 불필요한 프로젝트 복잡도가 증가함.
  • ide에서 실행이 안됨(디버깅 불가. flink에서는 되는지는 모르겠다)
  • maven-shade와 fat-jar(uber-jar)사용으로 배포 불편.
    — 이게 java jar –classpath로 실행하면서 storm.jar와 {user-topology}.jar를 실행시켜서 shade도 필요하고 그런건데 굉장히 쨔증난다 .설계가 잘못됐다고 본다.
  • 마찬가지로 maven-shade와 fat-jar(uber-jar) 사용으로 ide에서 본 프로젝트가 열리지도 않음
    — 억지로 열려면 mvn package한 다음에 shade에서 생성된 jar를 ide에서 합치면 됨
    —- 이런 문제가 있으면 프로젝트를 분리해놓던가 해야될 것 같은데 개발진들 열의가 별로 없어보임. 메이븐 의존성도 다 옛날거라 kafka client 0.8.0이었나
  • 로깅이 잘 안되는걸 빼먹을 뻔 했군
    토폴로지 jar에 포함시켜놓을 수 있으면 좋겠는데 그런 부분이 잘 안되는 것 같다
  • 로컬테스트용과 리모트배포용 코드를 아예 따로 작성해야된다. 이건 진짜 문제있다. ifelse로 분기 할 수도 있지만… 좀 참기힘든 부분이자너

또 다른 선택지

  1. Apache Flink
  2. Apache Apex
  3. Apache Spark – Streaming
  4. Apache Heron
  5. Uber AthenaX
    https://github.com/uber/AthenaX

아파치에서만 몇개야…. Storm은 죽은 프로젝트다. Heron(Incubator)이 스톰 뒤를 이어서 개발중인 것으로 보인다.

관련기술

  1. Apache Druid
    https://druid.apache.org/
  2. Apache Calcite
    https://calcite.apache.org/

PostGIS 기초 사용법

PostGIS의 사용법은 그리 어려울게 없다.

그냥 데이터를 사용하기 위한 기반 지식이 많이 필요하다.

기술적으로 알아야 할 것은 geometry 인덱싱, st_프로시저 정도로 많지 않고 지도 데이터, 좌표계 변환 등의 지식을 많이 알아야한다.

설치

http://postgis.net/install/

 

인덱싱

 

ST_프로시저

많이 사용되는 것만 대강 기억하고 PostGIS doc를 찾아서 쓰면 된다.

https://postgis.net/docs/reference.html

 

ST_Intersects – 겹침

ST_Within – 완전포함

ST_Contains – 포함 within하고 비슷한데 확인필요

ST_Area – 넓이 구하기

ST_Buffer – 좀 넓게 잡기

초기데이터 설정

 

 

PostgreSQL 9.5 초기설정

기본설정은 버전이 변경되도 크게 바뀌지 않는다

설정파일

postgresql.conf

https://www.postgresql.org/docs/9.5/static/runtime-config-connection.html

pg_hba.conf

  • https://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

터미널접속

sudo -u postgres psql -U postgres -w

사용자 관리

GIS 분석 인프라 구성 – Ubuntu16.04, Postgresql9.5, PostGIS2.2

설치

설치는 별거 손댈게 없다.

서버에서 스크립트를 돌릴 일이 있을 수 있으니

설정

Postgresql

원격접속 가능하게 설정 – 필요한 경우

postgresql.conf

pg_hba.conf

개발테스트용이 아닌 서비스용이라면 초기 설정할 때만 오픈해놨다가 접근권한을 127.0.0.1이나 허용된 서버만으로 제한하도록 한다.

계정 설정

root 생성

Postgis

디비 생성후

postgis 설치가 완료되면

gis_db.public.spatial_ref_sys 테이블이 생성된다.

확인

select * from pg_catalog.pg_tables;

초기 데이터 준비

spatial_ref_sys에 표준 좌표계는 다 입력되어 있는편인데

공공기관에서 제공해주는 변태좌표계에 필요한 설정을 넣어준다.

id값이 충돌하지 않도록 주의.

 

GIS 너무 쉬운거 아니야?

아직 지옥문을 막 열었을 뿐.. 문이 닫히기 전에 돌아가라

 

RAW데이터를 수집해야한다.

 

공공기관의 데이터

정권이 바뀔때마다 지들 기분날 때 마다 데이터의 제공주체나 생산주체 담당자가 수시로 바뀌니 그때그때 확인을 해 봐야한다.

데이터 포맷 정보가 없는 경우도 많고 통일성도 없다.

따져도 소용없다. 그 사람들도 문제의식은 가지고 있는데.. 이게 장관급에서 프로젝트가 내려오지 않으면 어쩔 수 없는 부분이 있다. 여러 기관이 얽히고 얽혀서

데이터 제공 기관

행정표준코드 관리시스템 : https://www.code.go.kr/jsp/index.jsp

환경공간정보서비스 : https://egis.me.go.kr
생태자연도

국립생태원 : http://www.nie.re.kr/

국토환경정보센터 : http://www.neins.go.kr

국토지리원 : http://www.ngii.go.kr
수치지도, DEM(래스터)

국가공간정보포털 : http://www.nsdi.go.kr
연속지적도, 개별공시지가, 토지등급, 건물정보 …

주소, 행정동, 지적도, 건물정보, 등 넣어줘야하는데

국가교통정보센터 : http://www.its.go.kr/

교통정보공개서비스 : http://openapi.its.go.kr

기상청 : http://www.kma.go.kr

NASA 수치 데이터 : 한국 데이터는 없다고도 하고 잘 못 찾겠다.

GIS 관련 정보 2017

데이터 소스

국토지리정보원 www.niii.go.kr
기상청 www.kma.go.kr
환경공간정보서비스 https://egis.me.go.kr
국가수자원관리종합정보시스템 http://www.wamis.go.kr
도로명주소안내시스템 http://www.juso.go.kr
표준노드링크 http://nodelink.its.go.kr
– 지능형 교통체계 관리 시스템
부동산 공시지가 http://www.realtyprice.kr/notice
부동산 실거래가 http://rt.molit.go.kr/
서울지도 http://gis.seoul.go.kr
data.go.kr
한국전력
LURIS 토지이용규제서비스

통계지리정보서비스
https://sgis.kostat.go.kr/contents/shortcut/shortcut_05.jsp

학습/커뮤니티

공간정보중앙교육센터 https://necgis.go.kr
http://www.biz-gis.com/

데이터 변환

pdf to shp
cad to shp

관련툴 몰랐던거

QGIS – 지형분석
– wheel shade
– relief
– roughness index

QGIS2 3JS – 브라우저 연동

추가지식

http://www.nsdi.go.kr/?menuno=2926
http://www.dcvelocity.com/articles/20111128top_10_reasons_for_implementing_wms_wfm_together/

 

R로 GIS 이미지 만들기

https://github.com/Robinlovelace/Creating-maps-in-R

http://spatial.ly/wp-content/uploads/2013/12/intro-spatial-rl-3.pdf

 

gdal

http://www.gdal.org/gdal_grid.html

http://www.gdal.org/frmt_xyz.html

 

좌표 재투영/매핑

http://www.biz-gis.com/index.php?document_srl=51342&mid=GISFAQ

http://docs.qgis.org/2.2/ko/docs/training_manual/vector_analysis/reproject_transform.html

 

지적도 작업

“qgis 지적도 오차”

http://archjang.tistory.com/431

 

지형도 작업 – SHP,DEM

http://www.qgistutorials.com/ko/index.html

http://www.qgistutorials.com/ko/docs/credits.html

http://www.qgistutorials.com/ko/docs/working_with_terrain.html

http://www.qgistutorials.com/ko/docs/interpolating_point_data.html

http://www.qgistutorials.com/ko/docs/raster_mosaicing_and_clipping.html

http://www.qgistutorials.com/ko/docs/working_with_attributes.html

H2 Database – 관련정보

인메모리로 실행시켰을 때 접속할 수 있도록 하는 빈
주소 : http://localhost:8080/console

그런데 in-memory 실행 시킬때는 콘솔접속 하지말고 그냥 stand alone 실행시켜서 접속하는게 낫지 않나

in-memory connection info

MongoDB 특성 분석 01, 사용전 기능조사~ 에서 ~ 적용사례까지

개요

몽고디비는 처음 알게됐을 때 부터 써보고싶기는 했는데.. SI만 하다보니 쓸 기회가 없었다.
개인적으로 테스트용이나 회사에서 간단한 모듈을 만들 때 사용하긴 했지만, 제대로 분석을 해 보고 적용해본게 아니라서 깊이있는 지식은 없는 상태

사용목적

기술적으로 몽고디비가 꼭 필요한 상황은 아니라고 판단되지만… 나쁜 선택은 아닐 것 같아서 일단 적용 해 볼 생각이다.
저장할 데이터 : Crawling, Scrapping 데이터, 게시판 글, 댓글, GIS정보, GridFS를 이용한 이미지 저장

 

GIS 정보 관리
PostgreSQL의 PostGIS를 써도 되지만…. 내부정보가 아닌 사용자 데이터를 저장해야 한다. 서비스가 급성장하면서 데이터가 엄청나게 쌓일거라서 MongoDB를 쓸 수 밖에 없잖아

Crawling, Scrapping 데이터
텍스트 파일 저장

GridFS를 이용한 이미지 저장
이 부분은 써야할까? 모르겠다. 성능문제도… 별 생각없이봐도 문제가 잇겠지?
http://symplog.tistory.com/entry/MongoDB-MongoDB-GridFS-%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8
있다고하네…
그리고 cdn에 올리면 필요없는 부분 아닌가

몽고디비에 대해 잘 정리된 페이지
http://kkyunstory.tistory.com/65
이런 평가를 많이 보긴 했는데…

아몰랑 그냥 쓰다가 안되는거 한개씩 옮겨야겠다.

특성 ~~ 확인중

문서형 데이터베이스

데이터를 문서형태로 저장 – BSON을 이용하여 저장
BSON : JSON을 Binary 형태로 저장

장점

다양한 인덱스 제공
Sharding

 

인덱싱 방법

종류

Unique고유 인덱스
Sparse희소 인덱스 : Null인 경우 인덱스 생성하지 않음
다중 키 인덱스, 복합인덱스

주의점

롤백은 불가능
트랜잭션 안된다고 치고
인덱싱 걸면 디비 먹통

MSSQL2008 -> Oracle12c Sqldeveloper이용 데이터 대강이전

어쩌다 보니 어느패션업체의 디비 마이그레이션업무를 처리하게 됐다.
직접 말한것은 아니고 기획자를 통해서 한다리 건너서 협의가 이뤄져서 정확히는 모르겠지만
전달받기로는 마이그레이션이 쉬운게 아니라고 설명을 하면 “그냥 해주면 안되요?” 라는 반응을 보였다는 것 같다.

고객사에서는 마이그레이션을 그냥 파일 카피 정도로 생각하는 것 아닐까?
내가 갔으면 말도안되다는것을 좀 더 강하게 어필했을 것 같은데…

디비 전환 이유는 …. 정확히 전달받지는 못했지만 데이터를 보니까 이해가 갔다.
데이터 상태를 보니 속도가 매우 느렸을 것 같다.
검색도 하지 않을 것 같은 로그테이블이 동일한 데이터베이스에 수백기가 쌓여 있었다
MSSQL이 느리니까 짷좋은 오라클로 옮기면 빨라지겠지? 정도의 판단이 아니었을까

그리고 기왕 마이그레이션을 하기로 마음을 먹었으면 안쓰는 테이블이라던가 프로시저들을 파악해서 정리를 하면 좋을텐데…

대~애충 빨리 해다라고 하니 그럴 수 밖에…

마이그레이션은 툴을 이용해서 처리하기로 했다.
유료는 안 써봐서 모르겠고 이전에도 몇 번 돌려봤는데 특정 쿼리문은 번역도 안되고 테이블도 몇 개씩 빼먹고 하는 경우가 많았다.
각 데이터베이스에 의존적인 키워드를 사용하는 경우 오류도 발생하고

툴은 SqlDeveloper 4.1.5를 사용하기로 결정
(고객사에서 추가비용 지출을 저언혀 생각하지 않고 있어서)

SqlDevelop – Tools – Database – Third Party JDBC Driver에 추가

jtds-1.3.1-dist

이래저래 필요한 셋팅하고서 마이그레이션 실행
오류가 이것저것 많이 발생했는데 주로 발생하는 문제는 인코딩 오류, 쿼리오류
인코딩은 초반에 잡아줘서 해결했지만.. 쿼리는… 일부는 포기하고 넘어갔다.

MSSQL 2008 -> Oracle12c
결과 : 쓸데없는 테이블을 생성 해 놓는다. 마이그레이션 결과기록 테이블인가?
데이터는 제대로 옮겨지지 않는다. (뭘 잘못한 것 같진 않고 12는 아직 지원되지 않는것 같다)

MSSQL2008 -> Oracle11gr2
결과 : 테이블과 데이터는 잘 옮겨졌다

Oracle11gr2 -> Oracle12c
여기서는 자동화 툴이 안돌아가고 쿼리로 백업받은 후에 다시 올렸다.
덤프는 뭔가 호환이 안되는 것 같다.
이 방법으로 하는경우 Clob은 이전이 안된다. Oracle Clob은 쿼리 insert가 안되서 Varchar4000으로 변경할 수 있는 부분은 변경하고 안되는 부분은 python script를 이용해서 처리했다.

 

야매이전 완료 후

Function, Procedure – 거의 다 깨진다.
View – 거의못쓸지경.. 다 지우는게 나을 것 같다
Table-Clob제외하고는 정상

처참하네.. 마이그레이션이라고 할 수 있을까?
오류가 날 대 마다 거의 다 손으로 처리해야하지 않을까 싶다.

일 해 놓고도 미안한 상황이다
정식 프로젝트가 아니라 더 시간을 할애할 수는 없으니 대강 마무리할 수 밖에…

Oracle 디비 백업 – expdp

expdp system/oracle@orcl directory=MY_DATA_PUMP dumpfile=shopmall.dump logfile=shopmall.dump schemas=shopmalljob_name=shopmall001

이 명령을 실행시키면..

다음 경고가 뜨면서 처리되지 않는다.

 

1. 이미 처리중이던 녀석이 남아있으면 안될 수 있다고

이걸 확인 해 보라는데…

 

또 안되네

2. 스트림 풀 사이즈를 늘려보라는데

안된다

3. DBA 디렉토리 등록

 

아직안됨…디비 깨짔나

 

질문할만한사이트가…

http://www.gurubee.net/
http://www.dator.co.kr/
http://www.dbguide.net/
http://database.sarang.net/

 

몇가지 더 확인 필요해 보이는 부분

http://www.dba-oracle.com/t_ora_31623_job_not_attached_to_session_via_specified_handle.htm

http://theone79.tistory.com/837