SlideShare una empresa de Scribd logo
1 de 32
MONGODB 와 공간정보
Dr.Jiyoon Kim
발표순서
 고민의 단계
 비교의 단계
 배움의 단계
 갈무리
1. 고민의 단계
이 발표를 하기전에 5년 전 기억을 거슬러 올라갑니다.
5년 전 저는 해양 관련 IT 시스템을 개발하게 되었습니다.
- 해상에서 수신되는 선박의 위치,
해양기상,항해 표지 정보를
실시간으로 수집하여 전자해도위에
표출 되는 시스템
- 시기적으로 조금씩 다르긴 하지만
데이터가 너무 많이 쌓이기 때문에
한달에 한번씩 데이터를 삭제해야
할 정도 였음
- 점점 관련 시스템이 늘어나서
시스템 마다 각각의 요구사항을
반영하기 위해 뷰를 만들게
되었습니다.
- 자연스레 성능이슈와 튜닝해야하는
포인트가 늘어났습니다.
당시의 이슈
• 예산부족으로 서버 증설 과 SW 신규구매(MS-SQL)가 불가 (성명불상의 놀고있는 서버는 몇 대 있었음)
• 데이터 스키마의 변경이 자주 이루어지고 다양한 서비스와 시스템을 위해 뷰 테이블을 다수 만들어야
했음
• 비정형으로 들어오는 데이터를 스키마로 재정의 하는 게 쉬운 일이 아니었음 (기상 정보나
레이다이미지)
• 하루에도 어마어마한 데이터의 인서트 및 업데이트가 이루어지고 있어서 데이터베이스 부하가 있었음
• C/S 시스템을 WEB으로 전환하기 위한 계획이 있었음
• 단기간의 개발기간을 고려 해야 했음
엔지니어로써 의 고민
시스템을 SCALE UP(하드웨어성능을 높일것인지) 할것인지 SCALE OUT(분
산처리) 할것인지 ?
대용량 데이터가 들어 왔을 때 분산부하처리를 어떻게 효율적으로 할 것인지?
다양하고 빈번한 요구사항이 들어왔을 때 스키마를 변경할것인지 아니면
어플리케이션단위의 방안을 세워야할지?
그러면서 공간정보를 DBMS 상에서 관리가 가능해야 할 것 같다.
시스템 아키텍쳐 의 문제
기존의 RDBMS 상에서도 scaleout은 가능하나 관리 와 개발 리소스가 많이 듬
대용량 데이터의 처리
• 대용량 읽기쓰기에 있어서 적정한 인덱스 정책을 세우면 큰 문제 없음. 그러나 빅데이터
시대에 들어오면서 인덱싱 정책을 다양하게 세울 수 있어야 함
• 퍼포먼스를 상향하려면 분산부하처리가 가능해야 하고 디스크 기반보다는 메모리에서
처리할 수 있는 방안수립이 필요
• 대량의 반복적인 insert 동작의 사용이 있는 경우 operation 장애가 없어야 함
다양한 요구사항에 대한 대응
• 스키마 변경에 대하여 계속적인 작업은 결국 IT 시스템의 질저하로 이어짐
• XML, JSON 등은 이러한 스키마 변경에 대한 적절한 대안
{
"name" : “aliasgis",
"age" : 45,
“job" : “Developer“
}
{
"name" : "David Oh",
"age" : 24,
"major" : "Japanense“
}
그래서 택한 것이 MongoDB!!
MONGODB란
• mongoDB는 C++로 짜여진 오픈소스 데이터베이스이다. 문서지향(Document-Oriented)적이
며 뛰어난 확장성과 성능을 가지고 있음
• NOSQL 기반이며 문서기반의 데이터 베이스 구조를 가짐
• 다양한 인덱싱을 제공하며, AUTOSHADING 기능을 제공하여 자동으로 데이터를 분산하여
저장하며, 하나의 컬렉션처럼 사용가능
• 간단한 설정만으로도 데이터 복제를 지원. 가용성 향상.
• Commercial Support : 10gen에서 관리하는 오픈소스
• 기본적인 공간정보 기능을 지원
2. 비교의 단계
MONGODB의 사용시 기술적고민
• NOSQL 기반이므로 기존의 SQL Query를 바꿔야 한다.
 학습의 양이 그리 많지는 않음. 오히려 코딩은 간결해짐 (Query문 xml file로 별도관리하거나
stringbuffer를 사용하는 것보다는)
사실 부딪혀보면 해결된 문제 (SQL 문과 유사함)
 관리자 들이나 개발자들이 보수적인 개발문화를 가지고 있다면 어려울 수도
• 공간정보 의 기능을 잘 지원 할 수 있는가?
 여타 DBMS 에 비해 공간함수가 많이 부재 한 것은 사실
 허나 요구사항과 비교해 보았을 때 적정하면 사용가능
다른 NOSQL기반 DB와의 비교
종류 장점 단점
Cassandra -대량으로 쓰기가 발생하는 서비스에 좋음
-확장성이 뛰어남
- Scale-Out 원활함
-최소 3대 이상 구성(클러스터 환경)
-복잡한 조건 검색 불가
-데이터 갱신 및 입력시 Atomic한 처리가 힘듬
Mongodb -스키마 없이 사용 가능
-1분 단위로 Flushing하는 Write back 방식을 사
용하므로 Write 성능 강함
-Read시에는 memory mapped file 방식차용 하
여 신속한 검색속도
-다양한 기능 제공
-JOIN이나 트랜잭션 처리가 불가능
-디스크에 쓰기가 비동기식으로 이루어진다. 경우에 따라
데이터가 유실될 가능성도 있다.
HBase -하둡 기반에서 동작하고 다양한 하둡 의
도구들과 상호 운영성이 좋음
-데이터 일관성 보장 우수(상대적)
-5대 미만에서는 사용할 수 없다(대규모 전용)
-성능이 좋진 않다 (상대적)
(출처:https://academy.datastax.com/planet-cassandra/nosql-performance-benchmarks)
MONGODB는 RDBMS와의 비교하여 퍼포먼스를
어느정도 낼 수 있는가?
속도 MONGODB(index) POSTGIS(index) MS-SQL(index)
POINT(1000개당 연산속도:단위 ms) 16(14) 23(22) 24(23)
POINT(2000개당 연산속도:단위 ms) 43(26) 47(43) 48(44)
POINT(10000개당 연산속도:단위 ms) 101(93) 187(167) 192(189)
POLYGON(10000개당 연산속도: 단위
ms)
13907(9174) 12983(9090) 12401(11404)
- 다른 RDBMS 와 비교 하였을 때 비교우위에 있는 항목도 많음 (동일서버/OS 에서 테스트)
3. 익힘의 단계
- 공간정보추가/조회
- 공간연산 및 공간인덱싱
- 오픈소스 제품과의 연동
공간정보 추가/조회하기
• 애초에 모든 문제 중 가장 큰 문제는 mongodb에 공간정보를 insert하고,select 할수있는냐 가 관건이었으나
 NOSQL 기반 하의 Geojson 포맷으로 서비스가 가능 했음
Example) scheme명칭.command
db.ogckoreaplaces.insert({ name: '부경대 대연캠퍼스', location: { type: 'Point',
coordinates: [
129.103065834, 35.13478282
]
}
})
Example) 부경대 대연동 캠퍼스에서 반경 5km 건물을 찾아주세요
db.ogckoreaplaces.find({
location: {
$geoWithin: {
$centerSphere: [[129.103065834, 35.13478282], 5 / 6378.1]
}
}
})
- 쿼리에 km단위로 하려면 라디언단위에서 변환해야 함
공간연산
POSTGIS 나 다른 여타 DBMS 에서 지원 하는 공간연산 기능 중 within,
intersect 등을 지원(4가지)
1) $geoIntersects =ST_INTERSECTS
2) $geoWithin = ST_WITHIN
3) $near = ST_ClosetPoint
4) $nearSphere = ST_3DClosetPoint
공간연산
POSTGIS 나 다른 여타 DBMS 에서 지원 하는 공간연산 기능 중 within,
intersect 등을 지원(4가지)
1) $geoIntersects =ST_INTERSECTS
2) $geoWithin = ST_WITHIN
3) $near = ST_ClosetPoint
4) $nearSphere = ST_3DClosetPoint
공간표현방식
• $box: 좌표 쌍을 사용하여 사각형 상자를 지정
• $center: $geowithin의 평면형상 함수 사용시에 쿼리 할 중심점과 원을 지정
• $centerSphere : $geowithin의 구면형상 함수 사용시에 쿼리 할 중심점과 원을 지정
• $geometry : geojson 형식의 모든 형식을 표현
• $polygon: 좌표정보들을 다각형형태로 표현
• $maxdistance
• $mindistance
공간정보지원 타입
• Geojson 타입에서 지원하는 공간정보 타입을 모두 지원 함
공간인덱스는 지원하나?
• 2dsphere 인덱스라는 방식을 지원 함
• 인덱스가 있는 필드는 항상 좌표 쌍 혹은 Geojson 방식의 데이터가 있어야 함
• 모든 Geojson 객체 타입에서 사용이 가능 함 (버전 2.0 이상)
• 사용방법은 매우 자동화되어서 MBR 바운더리 계산도 필요없음
db.collection(객체명).createIndex( { <location field> : "2dsphere" }
거리연산
최대 거리 및 최소거리 두가지를 함수로 지원 함(기본은
- $maxDistance
- $minDistance (2d Sphere 인덱스속성이 있어야만 사용가능)
{ $nearSphere: {
$geometry: { type: 'Point’,
coordinates: [126.86611, 36.114444] },
$maxDistance: ,
$minDistance: } }
오픈소스를 활용한 연동
• DBMS 상에서 공간정보를 다룰 때 두가지 의 고민
- 어떻게 파일을 DB로 전환 시킬 것인지?
- 서비스는 어떻게 해야 할지
- 사실 다른 DBMS에 비하여 지원은 부족하나 길은 있음
오픈소스를 활용한 연동
• 사실 Geojson 타입이어서 쉽게 mongodb 플러그인 이나 3rd party tool 이 많
을 것으로 생각되나 의외로 잘 지원 되지 않음
• QGIS 에서 도 직접적인 연결은 되지 않으나 Pyqgis 코드를 활용한다면 연결은
가능
• Geoserver는 전용 플러그인이 존재 하므로 연동이 가능
• openlayers 의 경우 geojson 을 drawing 가능하므로 연동이 가능
SHP 파일을 MONGODB에 적용하기 위한 팁
1. Ogr2Ogr 에서 Geojson 으로 바꿈
$ ogr2ogr -f GeoJSON -t_srs crs:84 point.geojson point.shp
2. Mongoimport 사용
C:Program FilesMongoDBServer4.2bin>mongoimport --db dev -c points --file "points.json" --
type json
2019-10-07T23:54:17.530+0900 connected to: mongodb://localhost/
2019-10-07T23:54:17.763+0900 1 document(s) imported successfully. 0 document(s) failed to
import.
3. 평면 인덱스 사용
db.sfsweeproutes.ensureIndex({"geometry":"2dsphere"})
지오서버에서의 연동 (GEOSERVER)
• Geoserver 에서 mongodb plugin 활용가능 함(2.15버전 이상)
4. 갈무리 단계
MONGODB 도입 시 고려사항
• 아키텍쳐 확장은 확실히 강점으로 빅데이터 기반하의 시스템에서는 도입 고려 할 만 함
• 아직은 GIS 시스템에서 필요로 하는 공간 함수가 부족하며 THIRD Party 툴의 지원이 부족
함
• 정합성이 떨어지므로 트랜잭션이 필요한 경우에는 부적합 (ex. 금융, 결제, 회원정보 등)
-> 자주 변경이 이루어지는 데이터가 아니라면 좋은 성능 발휘
• 그러나 간단한 공간정보 관련 open API를 만들 시에는 매우 쉽게 개발이 가능 함(node.js,
spring )
• 향후에 계속적인 오픈소스 진영에 PUSH를 받는다면 좋은 무기가 될 수 있음
• 또한 공간정보 덕후 들에게는 좋은 장난감이 될 수 있음

Más contenido relacionado

La actualidad más candente

Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개흥배 최
 
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹 : WoW 랭킹 서비스 wowz.kr를 사례로
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹: WoW 랭킹 서비스 wowz.kr를 사례로디스크 기반 Skip list를 사용한 대용량 실시간 랭킹: WoW 랭킹 서비스 wowz.kr를 사례로
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹 : WoW 랭킹 서비스 wowz.kr를 사례로Seok-ju Yun
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기beom kyun choi
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스kidoki
 
Ir termproject 201716422(marco lee)
Ir termproject 201716422(marco lee)Ir termproject 201716422(marco lee)
Ir termproject 201716422(marco lee)MyeunggyuLee
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종민철 정민철
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)Minchul Jung
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기JangHyuk You
 
WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석정주 김
 
Cubrid Inside 5th Session 3 Migration
Cubrid Inside 5th Session 3 MigrationCubrid Inside 5th Session 3 Migration
Cubrid Inside 5th Session 3 MigrationCUBRID
 
An introduction to hadoop
An introduction to hadoopAn introduction to hadoop
An introduction to hadoopMinJae Kang
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료BOMI KIM
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoMatthew (정재화)
 

La actualidad más candente (20)

Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹 : WoW 랭킹 서비스 wowz.kr를 사례로
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹: WoW 랭킹 서비스 wowz.kr를 사례로디스크 기반 Skip list를 사용한 대용량 실시간 랭킹: WoW 랭킹 서비스 wowz.kr를 사례로
디스크 기반 Skip list를 사용한 대용량 실시간 랭킹 : WoW 랭킹 서비스 wowz.kr를 사례로
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
 
Ir termproject 201716422(marco lee)
Ir termproject 201716422(marco lee)Ir termproject 201716422(marco lee)
Ir termproject 201716422(marco lee)
 
InfiniFlux 성능 지표
InfiniFlux 성능 지표InfiniFlux 성능 지표
InfiniFlux 성능 지표
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기
 
WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석
 
Cubrid Inside 5th Session 3 Migration
Cubrid Inside 5th Session 3 MigrationCubrid Inside 5th Session 3 Migration
Cubrid Inside 5th Session 3 Migration
 
An introduction to hadoop
An introduction to hadoopAn introduction to hadoop
An introduction to hadoop
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
 
Hdfs
HdfsHdfs
Hdfs
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 

Similar a Mongodb and spatial

(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)InBum Kim
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPgDay.Seoul
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo dbMinho Kim
 
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1승빈이네 공작소
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem종석 박
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료shanka2
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeSANG WON PARK
 

Similar a Mongodb and spatial (20)

(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ff
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo db
 
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
 
PostGIS 시작하기
PostGIS 시작하기PostGIS 시작하기
PostGIS 시작하기
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflake
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 

Más de Jiyoon Kim

Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021Jiyoon Kim
 
Qgis에서 GPS 연동
Qgis에서 GPS 연동Qgis에서 GPS 연동
Qgis에서 GPS 연동Jiyoon Kim
 
Python qgis advanced
Python qgis advancedPython qgis advanced
Python qgis advancedJiyoon Kim
 
Pyqgis 기초편
Pyqgis 기초편Pyqgis 기초편
Pyqgis 기초편Jiyoon Kim
 
osgeo 봄 세미나 -R
osgeo 봄 세미나 -Rosgeo 봄 세미나 -R
osgeo 봄 세미나 -RJiyoon Kim
 
웃는동안 배우는 Qgis
웃는동안 배우는 Qgis웃는동안 배우는 Qgis
웃는동안 배우는 QgisJiyoon Kim
 
웃으면서Python
웃으면서Python웃으면서Python
웃으면서PythonJiyoon Kim
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나Jiyoon Kim
 
Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기Jiyoon Kim
 

Más de Jiyoon Kim (9)

Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021
 
Qgis에서 GPS 연동
Qgis에서 GPS 연동Qgis에서 GPS 연동
Qgis에서 GPS 연동
 
Python qgis advanced
Python qgis advancedPython qgis advanced
Python qgis advanced
 
Pyqgis 기초편
Pyqgis 기초편Pyqgis 기초편
Pyqgis 기초편
 
osgeo 봄 세미나 -R
osgeo 봄 세미나 -Rosgeo 봄 세미나 -R
osgeo 봄 세미나 -R
 
웃는동안 배우는 Qgis
웃는동안 배우는 Qgis웃는동안 배우는 Qgis
웃는동안 배우는 Qgis
 
웃으면서Python
웃으면서Python웃으면서Python
웃으면서Python
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나
 
Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기
 

Mongodb and spatial

  • 2. 발표순서  고민의 단계  비교의 단계  배움의 단계  갈무리
  • 4. 이 발표를 하기전에 5년 전 기억을 거슬러 올라갑니다.
  • 5. 5년 전 저는 해양 관련 IT 시스템을 개발하게 되었습니다. - 해상에서 수신되는 선박의 위치, 해양기상,항해 표지 정보를 실시간으로 수집하여 전자해도위에 표출 되는 시스템 - 시기적으로 조금씩 다르긴 하지만 데이터가 너무 많이 쌓이기 때문에 한달에 한번씩 데이터를 삭제해야 할 정도 였음 - 점점 관련 시스템이 늘어나서 시스템 마다 각각의 요구사항을 반영하기 위해 뷰를 만들게 되었습니다. - 자연스레 성능이슈와 튜닝해야하는 포인트가 늘어났습니다.
  • 6. 당시의 이슈 • 예산부족으로 서버 증설 과 SW 신규구매(MS-SQL)가 불가 (성명불상의 놀고있는 서버는 몇 대 있었음) • 데이터 스키마의 변경이 자주 이루어지고 다양한 서비스와 시스템을 위해 뷰 테이블을 다수 만들어야 했음 • 비정형으로 들어오는 데이터를 스키마로 재정의 하는 게 쉬운 일이 아니었음 (기상 정보나 레이다이미지) • 하루에도 어마어마한 데이터의 인서트 및 업데이트가 이루어지고 있어서 데이터베이스 부하가 있었음 • C/S 시스템을 WEB으로 전환하기 위한 계획이 있었음 • 단기간의 개발기간을 고려 해야 했음
  • 7. 엔지니어로써 의 고민 시스템을 SCALE UP(하드웨어성능을 높일것인지) 할것인지 SCALE OUT(분 산처리) 할것인지 ? 대용량 데이터가 들어 왔을 때 분산부하처리를 어떻게 효율적으로 할 것인지? 다양하고 빈번한 요구사항이 들어왔을 때 스키마를 변경할것인지 아니면 어플리케이션단위의 방안을 세워야할지? 그러면서 공간정보를 DBMS 상에서 관리가 가능해야 할 것 같다.
  • 8. 시스템 아키텍쳐 의 문제 기존의 RDBMS 상에서도 scaleout은 가능하나 관리 와 개발 리소스가 많이 듬
  • 9. 대용량 데이터의 처리 • 대용량 읽기쓰기에 있어서 적정한 인덱스 정책을 세우면 큰 문제 없음. 그러나 빅데이터 시대에 들어오면서 인덱싱 정책을 다양하게 세울 수 있어야 함 • 퍼포먼스를 상향하려면 분산부하처리가 가능해야 하고 디스크 기반보다는 메모리에서 처리할 수 있는 방안수립이 필요 • 대량의 반복적인 insert 동작의 사용이 있는 경우 operation 장애가 없어야 함
  • 10. 다양한 요구사항에 대한 대응 • 스키마 변경에 대하여 계속적인 작업은 결국 IT 시스템의 질저하로 이어짐 • XML, JSON 등은 이러한 스키마 변경에 대한 적절한 대안 { "name" : “aliasgis", "age" : 45, “job" : “Developer“ } { "name" : "David Oh", "age" : 24, "major" : "Japanense“ }
  • 12. MONGODB란 • mongoDB는 C++로 짜여진 오픈소스 데이터베이스이다. 문서지향(Document-Oriented)적이 며 뛰어난 확장성과 성능을 가지고 있음 • NOSQL 기반이며 문서기반의 데이터 베이스 구조를 가짐 • 다양한 인덱싱을 제공하며, AUTOSHADING 기능을 제공하여 자동으로 데이터를 분산하여 저장하며, 하나의 컬렉션처럼 사용가능 • 간단한 설정만으로도 데이터 복제를 지원. 가용성 향상. • Commercial Support : 10gen에서 관리하는 오픈소스 • 기본적인 공간정보 기능을 지원
  • 14. MONGODB의 사용시 기술적고민 • NOSQL 기반이므로 기존의 SQL Query를 바꿔야 한다.  학습의 양이 그리 많지는 않음. 오히려 코딩은 간결해짐 (Query문 xml file로 별도관리하거나 stringbuffer를 사용하는 것보다는) 사실 부딪혀보면 해결된 문제 (SQL 문과 유사함)  관리자 들이나 개발자들이 보수적인 개발문화를 가지고 있다면 어려울 수도 • 공간정보 의 기능을 잘 지원 할 수 있는가?  여타 DBMS 에 비해 공간함수가 많이 부재 한 것은 사실  허나 요구사항과 비교해 보았을 때 적정하면 사용가능
  • 15. 다른 NOSQL기반 DB와의 비교 종류 장점 단점 Cassandra -대량으로 쓰기가 발생하는 서비스에 좋음 -확장성이 뛰어남 - Scale-Out 원활함 -최소 3대 이상 구성(클러스터 환경) -복잡한 조건 검색 불가 -데이터 갱신 및 입력시 Atomic한 처리가 힘듬 Mongodb -스키마 없이 사용 가능 -1분 단위로 Flushing하는 Write back 방식을 사 용하므로 Write 성능 강함 -Read시에는 memory mapped file 방식차용 하 여 신속한 검색속도 -다양한 기능 제공 -JOIN이나 트랜잭션 처리가 불가능 -디스크에 쓰기가 비동기식으로 이루어진다. 경우에 따라 데이터가 유실될 가능성도 있다. HBase -하둡 기반에서 동작하고 다양한 하둡 의 도구들과 상호 운영성이 좋음 -데이터 일관성 보장 우수(상대적) -5대 미만에서는 사용할 수 없다(대규모 전용) -성능이 좋진 않다 (상대적)
  • 17. MONGODB는 RDBMS와의 비교하여 퍼포먼스를 어느정도 낼 수 있는가? 속도 MONGODB(index) POSTGIS(index) MS-SQL(index) POINT(1000개당 연산속도:단위 ms) 16(14) 23(22) 24(23) POINT(2000개당 연산속도:단위 ms) 43(26) 47(43) 48(44) POINT(10000개당 연산속도:단위 ms) 101(93) 187(167) 192(189) POLYGON(10000개당 연산속도: 단위 ms) 13907(9174) 12983(9090) 12401(11404) - 다른 RDBMS 와 비교 하였을 때 비교우위에 있는 항목도 많음 (동일서버/OS 에서 테스트)
  • 18. 3. 익힘의 단계 - 공간정보추가/조회 - 공간연산 및 공간인덱싱 - 오픈소스 제품과의 연동
  • 19. 공간정보 추가/조회하기 • 애초에 모든 문제 중 가장 큰 문제는 mongodb에 공간정보를 insert하고,select 할수있는냐 가 관건이었으나  NOSQL 기반 하의 Geojson 포맷으로 서비스가 가능 했음 Example) scheme명칭.command db.ogckoreaplaces.insert({ name: '부경대 대연캠퍼스', location: { type: 'Point', coordinates: [ 129.103065834, 35.13478282 ] } })
  • 20. Example) 부경대 대연동 캠퍼스에서 반경 5km 건물을 찾아주세요 db.ogckoreaplaces.find({ location: { $geoWithin: { $centerSphere: [[129.103065834, 35.13478282], 5 / 6378.1] } } }) - 쿼리에 km단위로 하려면 라디언단위에서 변환해야 함
  • 21. 공간연산 POSTGIS 나 다른 여타 DBMS 에서 지원 하는 공간연산 기능 중 within, intersect 등을 지원(4가지) 1) $geoIntersects =ST_INTERSECTS 2) $geoWithin = ST_WITHIN 3) $near = ST_ClosetPoint 4) $nearSphere = ST_3DClosetPoint
  • 22. 공간연산 POSTGIS 나 다른 여타 DBMS 에서 지원 하는 공간연산 기능 중 within, intersect 등을 지원(4가지) 1) $geoIntersects =ST_INTERSECTS 2) $geoWithin = ST_WITHIN 3) $near = ST_ClosetPoint 4) $nearSphere = ST_3DClosetPoint
  • 23. 공간표현방식 • $box: 좌표 쌍을 사용하여 사각형 상자를 지정 • $center: $geowithin의 평면형상 함수 사용시에 쿼리 할 중심점과 원을 지정 • $centerSphere : $geowithin의 구면형상 함수 사용시에 쿼리 할 중심점과 원을 지정 • $geometry : geojson 형식의 모든 형식을 표현 • $polygon: 좌표정보들을 다각형형태로 표현 • $maxdistance • $mindistance
  • 24. 공간정보지원 타입 • Geojson 타입에서 지원하는 공간정보 타입을 모두 지원 함
  • 25. 공간인덱스는 지원하나? • 2dsphere 인덱스라는 방식을 지원 함 • 인덱스가 있는 필드는 항상 좌표 쌍 혹은 Geojson 방식의 데이터가 있어야 함 • 모든 Geojson 객체 타입에서 사용이 가능 함 (버전 2.0 이상) • 사용방법은 매우 자동화되어서 MBR 바운더리 계산도 필요없음 db.collection(객체명).createIndex( { <location field> : "2dsphere" }
  • 26. 거리연산 최대 거리 및 최소거리 두가지를 함수로 지원 함(기본은 - $maxDistance - $minDistance (2d Sphere 인덱스속성이 있어야만 사용가능) { $nearSphere: { $geometry: { type: 'Point’, coordinates: [126.86611, 36.114444] }, $maxDistance: , $minDistance: } }
  • 27. 오픈소스를 활용한 연동 • DBMS 상에서 공간정보를 다룰 때 두가지 의 고민 - 어떻게 파일을 DB로 전환 시킬 것인지? - 서비스는 어떻게 해야 할지 - 사실 다른 DBMS에 비하여 지원은 부족하나 길은 있음
  • 28. 오픈소스를 활용한 연동 • 사실 Geojson 타입이어서 쉽게 mongodb 플러그인 이나 3rd party tool 이 많 을 것으로 생각되나 의외로 잘 지원 되지 않음 • QGIS 에서 도 직접적인 연결은 되지 않으나 Pyqgis 코드를 활용한다면 연결은 가능 • Geoserver는 전용 플러그인이 존재 하므로 연동이 가능 • openlayers 의 경우 geojson 을 drawing 가능하므로 연동이 가능
  • 29. SHP 파일을 MONGODB에 적용하기 위한 팁 1. Ogr2Ogr 에서 Geojson 으로 바꿈 $ ogr2ogr -f GeoJSON -t_srs crs:84 point.geojson point.shp 2. Mongoimport 사용 C:Program FilesMongoDBServer4.2bin>mongoimport --db dev -c points --file "points.json" -- type json 2019-10-07T23:54:17.530+0900 connected to: mongodb://localhost/ 2019-10-07T23:54:17.763+0900 1 document(s) imported successfully. 0 document(s) failed to import. 3. 평면 인덱스 사용 db.sfsweeproutes.ensureIndex({"geometry":"2dsphere"})
  • 30. 지오서버에서의 연동 (GEOSERVER) • Geoserver 에서 mongodb plugin 활용가능 함(2.15버전 이상)
  • 32. MONGODB 도입 시 고려사항 • 아키텍쳐 확장은 확실히 강점으로 빅데이터 기반하의 시스템에서는 도입 고려 할 만 함 • 아직은 GIS 시스템에서 필요로 하는 공간 함수가 부족하며 THIRD Party 툴의 지원이 부족 함 • 정합성이 떨어지므로 트랜잭션이 필요한 경우에는 부적합 (ex. 금융, 결제, 회원정보 등) -> 자주 변경이 이루어지는 데이터가 아니라면 좋은 성능 발휘 • 그러나 간단한 공간정보 관련 open API를 만들 시에는 매우 쉽게 개발이 가능 함(node.js, spring ) • 향후에 계속적인 오픈소스 진영에 PUSH를 받는다면 좋은 무기가 될 수 있음 • 또한 공간정보 덕후 들에게는 좋은 장난감이 될 수 있음