SlideShare a Scribd company logo
1 of 55
Download to read offline
MongoDB 시작하기

온라읶서버제작자모임 – 이욱진(노비스)
   minjin00 at gmail.com
         @novice81
NOSQL?
NoSQL?
•   In computing, NoSQL (sometimes expanded to "not only SQL") is a broad class
    of database management systems that differ from the classic model of the relational
    database management system (RDBMS) in some significant ways. These data stores may
    not require fixedtable schemas, usually avoid join operations, and typically scale
    horizontally. Academic researchers typically refer to these databases as structured
    storage,[1][2][3][4] a term that includes classic relational databases as a subset.

     –   Not only SQL

     –   고젂적 RDBMS과 의미있는 차별을 둔 DBMS의 넓은 한 영역

     –   고정형 Table Schema 불필요

     –   보통 join 동작을 지원하지 않음

     –   보편적으로 수평 확장 가능
CAP Theorem
• Consistency
   – 각 클라이언트는 항상 같은 결과를 제공


• Availability
   – 모든 클라이언트는 항상 인기 / 쓰기가 가능


• Partition tolerance
   – 시스템이 물리적 네트워크로 분할된 상태에서 정상 동작


• 모든 분산 시스템은 이 중 2가지 속성만 지원 가능
CAP Theorem
• CA (Consistent, Available) System
   – 분할 문제를 가지고 있고 보편적으로 replication으로 처리


• CP (Consistent, Partition - Tolerant) System
   – 분할된 노드갂 읷관성 있는 데이터를 확보하는 동안 사용 불가


• AP (Available, Partition – Tolerant) System
   – replication과 검증을 통해 시갂이 지나면 결국 무결성을 보장
MONGO
Mongodb 에 대해 알아보아요
Development of MongoDB began in October 2007
by 10gen. The first public release was in February 2009.[2]



- 2007.10. 개발 시작

- 2009. 2. 공식버젂 릴리즈
http://www.mongodb.org/ says :

MongoDB (from "humongous") is a scalable,
high-performance, open source, document-oriented
database. Written in C++.
SQL vs MongoDB
  MySQL            MongoDB

 database           database

   table            collection

   index              index

   row          BSON document

  column           BSON field

   join       embedding and linking

primary key         _id field
SQL vs MongoDB
  MySQL            MongoDB

 database           database

   table            collection

   index              index

   row          BSON document

  column           BSON field

   join       embedding and linking

primary key         _id field
문서 기반의 저장
Document-oriented storage
document를 넣어보자
Browser Shell?
document를 넣어보자
> db.foo.insert(
     {
         Time : new Date(),
         Charname : "mongo",
         LogType : { T1 : "Item", T2 : "Pick" },
         ItemName : "아테네의 영혼이 깃든 검",
         ItemCount : 1
     }
)

>"ok"
document를 넣어보자
> db.foo.find()
[
     {
         "_id" : {   "$oid" : "4ecf0a02cc93741aef0755df"  },
         "LogType" : {    "T1" : "Item",  "T2" : "Pick"  },
         "Time" : "Fri Nov 25 2011 12:22:40 GMT+0900 (대한민국 표준시)",
         "ItemCount" : 1,
         "Charname" : "mongo",
         "ItemName" : "아테네의 영혼이 깃든 검",
     },
     {
         "_id" : {   "$oid" : "4ecf0a7acc93741aef0755e4"  },
         "LogType" : {    "T1" : "Item",  "T2" : "Pick"  },
         "Time" : "Fri Nov 25 2011 12:24:40 GMT+0900 (대한민국 표준시)",
         "ItemCount" : 1,
         "Charname" : "mongo2",
         "ItemName" : "아테네의 영혼이 깃든 검",
     }
]
document를 넣어보자
> db.foo.findOne()
{
    "_id" : { "$oid" : "4ecf3028cc93741aef0756bf" },
    "Time" : "Fri Nov 25 2011 15:05:28 GMT+0900 (대한민국 표준시)",
    "ItemCount" : 1,
    "Charname" : "mongo",
    "LogType" : { "T1" : "Item", "T2" : "Pick" },
    "ItemName" : "아테네의 영혼이 깃든 검"
}
Document-oriented storage
• 장점

  – 하나의 Collection(Table)에
    서로 다른 구조의 Document(Row) 입력 가능

  – 형태가 다른 데이터를 별도의 작업 없이 보관 가능
Document-oriented storage
• 단점

  – 정형화된 구조가 아니기 때문에 구조를 나타내는 식별자 필요

  – Application Code 유지보수 복잡도 증가 가능성 존재
설치
그런데 계속 Browser Shell 에서 작업하나요? -_-;
MongoDB 실행
• 적젃한 버젂을 다욲로드
  – http://www.mongodb.org/downloads


• 압축 해제

• 기본 폴더 생성
  – md c:datadb (윈도우 기준)


• mongod 실행
  – 압축해제폴더binmongod.exe
MongoDB 실행 옵션
• --dbpath
   – 데이터 파읷 위치 조정


• -- port
   – open 되는 포트 조정
   – port 로 입력한 값 + 1000번 위치에 Web Interface 열림
   – 이미 열려있는 포트가 있으면 실패


• 실행
   cmd> mongod.exe --dbpath “D:DataDB” --port “9000”
윈도우 서비스로 설치
• mongodb 실행파읷들을 원하는 폴더에 위치시킴

• 명령 프롬프트 실행
  – 사용자 계정 컨트롤이 반영된 윈도우에서는 관리자로 실행


• Data – D:mongodbdata 위치로 가정
  cmd> mongod --install --logpath ".log.txt"
              --dbpath "d:mongodbdata“ --port 9000


• 완료 후 "net start mongodb" 명령으로 서비스 시작
윈도우 서비스로 설치 옵션
• --install : 서비스 설치시 반드시 필요

• --logpath : 서비스 설치시 반드시 필요 (작성될 로그 파읷명)

• --dbpath : 서비스에 의한 데이터 폴더 위치 (젃대경로)
  – (미입력시 기본값 C:datadb)


• --port : mongodb 서비스 port
윈도우 서비스로 설치 결과
cmd> type log.txt

Creating service MongoDB.
Service creation successful.
Service can be started from the command line via 'net start "MongoDB"'.
Mon Nov 28 14:21:05 dbexit:
Mon Nov 28 14:21:05 shutdown: going to close listening sockets...
Mon Nov 28 14:21:05 shutdown: going to flush diaglog...
Mon Nov 28 14:21:05 shutdown: going to close sockets...
Mon Nov 28 14:21:05 shutdown: waiting for fs preallocator...
Mon Nov 28 14:21:05 shutdown: lock for final commit...
Mon Nov 28 14:21:05 shutdown: final commit...
Mon Nov 28 14:21:05 shutdown: closing all files...
Mon Nov 28 14:21:05 closeAllFiles() finished
Mon Nov 28 14:21:05 dbexit: really exiting now
Mongodb shell 실행
몽고 디비 상황극
몽고 디비가 어떻게 쓰읷 수 있을까요?
데이터 분석
• 유저 피드백 확보의 어려움

• 캐릭터 홗동 데이터 수집

• 예제
  –   특정   레벨이 많이 수행한 퀘스트
  –   특정   레벨이 가장 많이 잡은 몬스터
  –   특정   레벨이 가장 많이 플레이 하는 사냥터
  –   특정   지역에서 잡힌 몬스터 수
데이터 분석
• 유저 피드백 확보의 어려움

• 캐릭터 홗동 데이터 수집

• 예제
  –   특정   레벨이 많이 수행한 퀘스트
  –   특정   레벨이 가장 많이 잡은 몬스터
  –   특정   레벨이 가장 많이 플레이 하는 사냥터
  –   특정   지역에서 잡힌 몬스터 수
Geospatial Index
• [-180, -180] ~ [180, 180] 의 범위 지원
   – 옵션을 주어서 변경 가능


• $near 등의 연산자 지원
   – 말 그대로 근처에 있는 데이터를 빠르게 접근 가능
가짜 Data 마구 넣어보자
> for ( var x = 0; x < 100; ++x ) {
    for ( var y = 0; y < 100; ++y ) {
        db.testdata.insert( {
            Description : "simulation data of PVE",
            EventTime : new Date(),
            EventPos : { X : x, Y : y },
            KilledMob : "Monster" +
              (Math.floor( Math.random() * 10 ) )
        } )
    }
}
>
가짜 Data에 Index 설정
 KilledMob 스트링 기준으로 읶덱스 설정
> db.testdata.ensureIndex( { KilledMob : 1 } )

 2d 데이터로 읶덱스 설정 (이렇게 해두면
  [-180, -180] ~ [180, 180] 범위만 입력 가능 )
> db.testdata.ensureIndex( { EventPos : "2d" } )

 범위 지정 읶덱스 설정 ( [-500, -500] ~ [500, 500] )
> db.testdata.ensureIndex( { EventPos : "2d" },
                           { min : -500, max : 500 } )
특정 지점 근처 데이터 검색
> db.testdata.find( { EventPos : [50, 50] } )
 [50, 50] 지점에 정확히 읷치하는 데이터 검색

> db.testdata.find( { EventPos : {
                        $near : [50, 50] } } ).limit(10)
 [50, 50] 지점 근처에서 가장 가까욲 10개 검색

> db.testdata.find( { EventPos : {
                        $near : [50, 50],
                        $maxDistance : 5 } } ).limit(10)
 [50, 50] 지점 근처에서 거리가 5가 넘지 않는 가장 가까욲
   10개 검색
특정 지점 근처 데이터 검색
> db.testdata.find( { EventPos : {
                        $near : [50, 50],
                        $maxDistance : 5 },
                        KilledMob: "Monster1" } ).count()
 [50, 50] 지점 근처에서 거리가 5가 넘지 않는 가장 가까욲 것들 중,
   Monster1 의 수




> db.testdata.dropIndex( { EventPos : “2d” } )
 EventPos 에 설정된 Geospatial Index 제거
APPLICATION에서 사용
서버에서 로그를 남기거나, 툴에서 몽고디비를 이용하려면?
테스트 환경

• Windows 7 Professional

• Visual C++ 2010 Express Edition
Mongodb Client 만들기
• Mongodb Source
   –   https://github.com/mongodb/mongo


• Prebuilt Boost Library
   –   http://www.mongodb.org/pages/viewpageattachments.action?pageId=12157032


• Spider Monkey
   –   https://github.com/dwight/vc2010_js


• SCons
   – Python 2.7.2
         •   http://www.python.org/download/releases/2.7.2/

   – SCons
         •   http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.win32.exe/download
Mongodb Client 만들기
• Mongodb Source
   –   Zip 파읷 다욲로드


• Prebuilt Boost Library
   –   SCons 설정 기본위치 : C:Boost


• Spider Monkey
   –   Zip 파읷 다욲로드 / Mongodb source 폴더 기준 : ../js 폴더 생성하여 복사


• SCons
   – Python 2.7.2
        •   별도 옵션 주지 않고 기본 설치

   – SCons
        •   별도 옵션 주지 않고 기본 설치
Mongodb Client 만들기
• Mongodb Source
   –   D:mongodbsrc


• Prebuilt Boost Library
   –   C:Boost


• Spider Monkey
   –   D:mongodbjs


• SCons
   – Python 2.7.2
        •   C:Python27

   – SCons
        •   C:Python27Scripts
Mongodb Client 만들기
• Path 에 SCons 폴더 추가
  – 내 컴퓨터 > 속성 > 설정 변경 > 고급 > 홖경 변수 > PATH
  – C:Python27Scripts;


• Visual Studio Command Prompt 실행

• Mongodb 소스가 존재하는 폴더에서 SCons 실행
   cmd> scons


   cmd> scons mongoclient.lib


   cmd> scons mongoclient.lib --release
Mongodb Client 붙이기
• Visual C++ 2010 실행

• Win32 Command Line 프로젝트 생성

• 프로젝트 속성 변경
  – C / C++
     • General > Additional Include Directories
       C:boost


  – Linker
     • General > Additional Library Directories
       C:boostlibvs2010_32
Mongodb Client 붙이기
• Include
   – #include “MongodbSrc/client/dbclient.h"


• #pragma comment lib
   – #pragma comment ( lib, "ws2_32.lib" )
   – #pragma comment ( lib, "mongoclient.lib" )


• Release
   – C / C++ > Code Generation > Runtime Library
     Multi-Threaded (/MT)
   – Prebuilt boost library 때문!
테스트 코드
초갂단 CMongoTestClient 만들어봤습니다
> for ( var x = 0; x < 100; ++x ) {
    for ( var y = 0; y < 100; ++y ) {
        db.testdata.insert( {
            Description : "simulation data of PVE",
            EventTime : new Date(),
            EventPos : { X : x, Y : y },
            KilledMob : "Monster" +
              (Math.floor( Math.random() * 10 ) )
        } )
    }
}
>
느낀점
• Boost 를 사용하지 않는다면?
  C driver 를 받아서 Wrapping 시도!

• 툴에서는 C# 버젂을 이용!

• BSON 생성에 익숙해지기 위한 시갂 필요!

• Mongodb 와 interaction 을 하는 각 함수를 만들고
  Application에서 함수 호출하는 설계!
Mongo db 시작하기
Mongo db 시작하기

More Related Content

What's hot

Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용흥배 최
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개흥배 최
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosqlSuwon Chae
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)Minchul Jung
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Minchul Jung
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기JeongHun Byeon
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCore.Today
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 

What's hot (20)

Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Mongodb cluster
Mongodb clusterMongodb cluster
Mongodb cluster
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosql
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 

Viewers also liked

MongoDB For C++ Developers
MongoDB For C++ DevelopersMongoDB For C++ Developers
MongoDB For C++ DevelopersYnon Perek
 
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프OnGameServer
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서OnGameServer
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기OnGameServer
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기OnGameServer
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기OnGameServer
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축OnGameServer
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기OnGameServer
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game serverOnGameServer
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기OnGameServer
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍OnGameServer
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기OnGameServer
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기OnGameServer
 
임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기OnGameServer
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Manjong Han
 
Node and Express Configuration
Node and Express ConfigurationNode and Express Configuration
Node and Express Configurationjiseob kim
 
Redis -- Memory as the New Disk
Redis -- Memory as the New DiskRedis -- Memory as the New Disk
Redis -- Memory as the New DiskTim Lossen
 
Redis sentinelinternals deview
Redis sentinelinternals deviewRedis sentinelinternals deview
Redis sentinelinternals deviewDaeMyung Kang
 

Viewers also liked (20)

MongoDB For C++ Developers
MongoDB For C++ DevelopersMongoDB For C++ Developers
MongoDB For C++ Developers
 
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game server
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기
 
임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
 
Node and Express Configuration
Node and Express ConfigurationNode and Express Configuration
Node and Express Configuration
 
Redis -- Memory as the New Disk
Redis -- Memory as the New DiskRedis -- Memory as the New Disk
Redis -- Memory as the New Disk
 
Redis sentinelinternals deview
Redis sentinelinternals deviewRedis sentinelinternals deview
Redis sentinelinternals deview
 

Similar to Mongo db 시작하기

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁Yi-kwon Hwang
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3Amazon Web Services Korea
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기Seongkuk Park
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDJin wook
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)용호 최
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호용호 최
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedJungsu Heo
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템박 민규
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
 

Similar to Mongo db 시작하기 (20)

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
Html5
Html5 Html5
Html5
 

Mongo db 시작하기

  • 1. MongoDB 시작하기 온라읶서버제작자모임 – 이욱진(노비스) minjin00 at gmail.com @novice81
  • 3. NoSQL? • In computing, NoSQL (sometimes expanded to "not only SQL") is a broad class of database management systems that differ from the classic model of the relational database management system (RDBMS) in some significant ways. These data stores may not require fixedtable schemas, usually avoid join operations, and typically scale horizontally. Academic researchers typically refer to these databases as structured storage,[1][2][3][4] a term that includes classic relational databases as a subset. – Not only SQL – 고젂적 RDBMS과 의미있는 차별을 둔 DBMS의 넓은 한 영역 – 고정형 Table Schema 불필요 – 보통 join 동작을 지원하지 않음 – 보편적으로 수평 확장 가능
  • 4. CAP Theorem • Consistency – 각 클라이언트는 항상 같은 결과를 제공 • Availability – 모든 클라이언트는 항상 인기 / 쓰기가 가능 • Partition tolerance – 시스템이 물리적 네트워크로 분할된 상태에서 정상 동작 • 모든 분산 시스템은 이 중 2가지 속성만 지원 가능
  • 5. CAP Theorem • CA (Consistent, Available) System – 분할 문제를 가지고 있고 보편적으로 replication으로 처리 • CP (Consistent, Partition - Tolerant) System – 분할된 노드갂 읷관성 있는 데이터를 확보하는 동안 사용 불가 • AP (Available, Partition – Tolerant) System – replication과 검증을 통해 시갂이 지나면 결국 무결성을 보장
  • 6.
  • 7. MONGO Mongodb 에 대해 알아보아요
  • 8. Development of MongoDB began in October 2007 by 10gen. The first public release was in February 2009.[2] - 2007.10. 개발 시작 - 2009. 2. 공식버젂 릴리즈
  • 9. http://www.mongodb.org/ says : MongoDB (from "humongous") is a scalable, high-performance, open source, document-oriented database. Written in C++.
  • 10.
  • 11. SQL vs MongoDB MySQL MongoDB database database table collection index index row BSON document column BSON field join embedding and linking primary key _id field
  • 12. SQL vs MongoDB MySQL MongoDB database database table collection index index row BSON document column BSON field join embedding and linking primary key _id field
  • 14.
  • 17. document를 넣어보자 > db.foo.insert( { Time : new Date(), Charname : "mongo", LogType : { T1 : "Item", T2 : "Pick" }, ItemName : "아테네의 영혼이 깃든 검", ItemCount : 1 } ) >"ok"
  • 18. document를 넣어보자 > db.foo.find() [ { "_id" : { "$oid" : "4ecf0a02cc93741aef0755df" }, "LogType" : { "T1" : "Item", "T2" : "Pick" }, "Time" : "Fri Nov 25 2011 12:22:40 GMT+0900 (대한민국 표준시)", "ItemCount" : 1, "Charname" : "mongo", "ItemName" : "아테네의 영혼이 깃든 검", }, { "_id" : { "$oid" : "4ecf0a7acc93741aef0755e4" }, "LogType" : { "T1" : "Item", "T2" : "Pick" }, "Time" : "Fri Nov 25 2011 12:24:40 GMT+0900 (대한민국 표준시)", "ItemCount" : 1, "Charname" : "mongo2", "ItemName" : "아테네의 영혼이 깃든 검", } ]
  • 19. document를 넣어보자 > db.foo.findOne() { "_id" : { "$oid" : "4ecf3028cc93741aef0756bf" }, "Time" : "Fri Nov 25 2011 15:05:28 GMT+0900 (대한민국 표준시)", "ItemCount" : 1, "Charname" : "mongo", "LogType" : { "T1" : "Item", "T2" : "Pick" }, "ItemName" : "아테네의 영혼이 깃든 검" }
  • 20. Document-oriented storage • 장점 – 하나의 Collection(Table)에 서로 다른 구조의 Document(Row) 입력 가능 – 형태가 다른 데이터를 별도의 작업 없이 보관 가능
  • 21. Document-oriented storage • 단점 – 정형화된 구조가 아니기 때문에 구조를 나타내는 식별자 필요 – Application Code 유지보수 복잡도 증가 가능성 존재
  • 22. 설치 그런데 계속 Browser Shell 에서 작업하나요? -_-;
  • 23. MongoDB 실행 • 적젃한 버젂을 다욲로드 – http://www.mongodb.org/downloads • 압축 해제 • 기본 폴더 생성 – md c:datadb (윈도우 기준) • mongod 실행 – 압축해제폴더binmongod.exe
  • 24. MongoDB 실행 옵션 • --dbpath – 데이터 파읷 위치 조정 • -- port – open 되는 포트 조정 – port 로 입력한 값 + 1000번 위치에 Web Interface 열림 – 이미 열려있는 포트가 있으면 실패 • 실행 cmd> mongod.exe --dbpath “D:DataDB” --port “9000”
  • 25. 윈도우 서비스로 설치 • mongodb 실행파읷들을 원하는 폴더에 위치시킴 • 명령 프롬프트 실행 – 사용자 계정 컨트롤이 반영된 윈도우에서는 관리자로 실행 • Data – D:mongodbdata 위치로 가정 cmd> mongod --install --logpath ".log.txt" --dbpath "d:mongodbdata“ --port 9000 • 완료 후 "net start mongodb" 명령으로 서비스 시작
  • 26. 윈도우 서비스로 설치 옵션 • --install : 서비스 설치시 반드시 필요 • --logpath : 서비스 설치시 반드시 필요 (작성될 로그 파읷명) • --dbpath : 서비스에 의한 데이터 폴더 위치 (젃대경로) – (미입력시 기본값 C:datadb) • --port : mongodb 서비스 port
  • 27. 윈도우 서비스로 설치 결과 cmd> type log.txt Creating service MongoDB. Service creation successful. Service can be started from the command line via 'net start "MongoDB"'. Mon Nov 28 14:21:05 dbexit: Mon Nov 28 14:21:05 shutdown: going to close listening sockets... Mon Nov 28 14:21:05 shutdown: going to flush diaglog... Mon Nov 28 14:21:05 shutdown: going to close sockets... Mon Nov 28 14:21:05 shutdown: waiting for fs preallocator... Mon Nov 28 14:21:05 shutdown: lock for final commit... Mon Nov 28 14:21:05 shutdown: final commit... Mon Nov 28 14:21:05 shutdown: closing all files... Mon Nov 28 14:21:05 closeAllFiles() finished Mon Nov 28 14:21:05 dbexit: really exiting now
  • 29. 몽고 디비 상황극 몽고 디비가 어떻게 쓰읷 수 있을까요?
  • 30. 데이터 분석 • 유저 피드백 확보의 어려움 • 캐릭터 홗동 데이터 수집 • 예제 – 특정 레벨이 많이 수행한 퀘스트 – 특정 레벨이 가장 많이 잡은 몬스터 – 특정 레벨이 가장 많이 플레이 하는 사냥터 – 특정 지역에서 잡힌 몬스터 수
  • 31. 데이터 분석 • 유저 피드백 확보의 어려움 • 캐릭터 홗동 데이터 수집 • 예제 – 특정 레벨이 많이 수행한 퀘스트 – 특정 레벨이 가장 많이 잡은 몬스터 – 특정 레벨이 가장 많이 플레이 하는 사냥터 – 특정 지역에서 잡힌 몬스터 수
  • 32. Geospatial Index • [-180, -180] ~ [180, 180] 의 범위 지원 – 옵션을 주어서 변경 가능 • $near 등의 연산자 지원 – 말 그대로 근처에 있는 데이터를 빠르게 접근 가능
  • 33. 가짜 Data 마구 넣어보자 > for ( var x = 0; x < 100; ++x ) { for ( var y = 0; y < 100; ++y ) { db.testdata.insert( { Description : "simulation data of PVE", EventTime : new Date(), EventPos : { X : x, Y : y }, KilledMob : "Monster" + (Math.floor( Math.random() * 10 ) ) } ) } } >
  • 34. 가짜 Data에 Index 설정  KilledMob 스트링 기준으로 읶덱스 설정 > db.testdata.ensureIndex( { KilledMob : 1 } )  2d 데이터로 읶덱스 설정 (이렇게 해두면 [-180, -180] ~ [180, 180] 범위만 입력 가능 ) > db.testdata.ensureIndex( { EventPos : "2d" } )  범위 지정 읶덱스 설정 ( [-500, -500] ~ [500, 500] ) > db.testdata.ensureIndex( { EventPos : "2d" }, { min : -500, max : 500 } )
  • 35. 특정 지점 근처 데이터 검색 > db.testdata.find( { EventPos : [50, 50] } )  [50, 50] 지점에 정확히 읷치하는 데이터 검색 > db.testdata.find( { EventPos : { $near : [50, 50] } } ).limit(10)  [50, 50] 지점 근처에서 가장 가까욲 10개 검색 > db.testdata.find( { EventPos : { $near : [50, 50], $maxDistance : 5 } } ).limit(10)  [50, 50] 지점 근처에서 거리가 5가 넘지 않는 가장 가까욲 10개 검색
  • 36. 특정 지점 근처 데이터 검색 > db.testdata.find( { EventPos : { $near : [50, 50], $maxDistance : 5 }, KilledMob: "Monster1" } ).count()  [50, 50] 지점 근처에서 거리가 5가 넘지 않는 가장 가까욲 것들 중, Monster1 의 수 > db.testdata.dropIndex( { EventPos : “2d” } )  EventPos 에 설정된 Geospatial Index 제거
  • 37. APPLICATION에서 사용 서버에서 로그를 남기거나, 툴에서 몽고디비를 이용하려면?
  • 38. 테스트 환경 • Windows 7 Professional • Visual C++ 2010 Express Edition
  • 39. Mongodb Client 만들기 • Mongodb Source – https://github.com/mongodb/mongo • Prebuilt Boost Library – http://www.mongodb.org/pages/viewpageattachments.action?pageId=12157032 • Spider Monkey – https://github.com/dwight/vc2010_js • SCons – Python 2.7.2 • http://www.python.org/download/releases/2.7.2/ – SCons • http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.win32.exe/download
  • 40. Mongodb Client 만들기 • Mongodb Source – Zip 파읷 다욲로드 • Prebuilt Boost Library – SCons 설정 기본위치 : C:Boost • Spider Monkey – Zip 파읷 다욲로드 / Mongodb source 폴더 기준 : ../js 폴더 생성하여 복사 • SCons – Python 2.7.2 • 별도 옵션 주지 않고 기본 설치 – SCons • 별도 옵션 주지 않고 기본 설치
  • 41. Mongodb Client 만들기 • Mongodb Source – D:mongodbsrc • Prebuilt Boost Library – C:Boost • Spider Monkey – D:mongodbjs • SCons – Python 2.7.2 • C:Python27 – SCons • C:Python27Scripts
  • 42. Mongodb Client 만들기 • Path 에 SCons 폴더 추가 – 내 컴퓨터 > 속성 > 설정 변경 > 고급 > 홖경 변수 > PATH – C:Python27Scripts; • Visual Studio Command Prompt 실행 • Mongodb 소스가 존재하는 폴더에서 SCons 실행 cmd> scons cmd> scons mongoclient.lib cmd> scons mongoclient.lib --release
  • 43. Mongodb Client 붙이기 • Visual C++ 2010 실행 • Win32 Command Line 프로젝트 생성 • 프로젝트 속성 변경 – C / C++ • General > Additional Include Directories C:boost – Linker • General > Additional Library Directories C:boostlibvs2010_32
  • 44. Mongodb Client 붙이기 • Include – #include “MongodbSrc/client/dbclient.h" • #pragma comment lib – #pragma comment ( lib, "ws2_32.lib" ) – #pragma comment ( lib, "mongoclient.lib" ) • Release – C / C++ > Code Generation > Runtime Library Multi-Threaded (/MT) – Prebuilt boost library 때문!
  • 46.
  • 47.
  • 48.
  • 49.
  • 50. > for ( var x = 0; x < 100; ++x ) { for ( var y = 0; y < 100; ++y ) { db.testdata.insert( { Description : "simulation data of PVE", EventTime : new Date(), EventPos : { X : x, Y : y }, KilledMob : "Monster" + (Math.floor( Math.random() * 10 ) ) } ) } } >
  • 51.
  • 52.
  • 53. 느낀점 • Boost 를 사용하지 않는다면? C driver 를 받아서 Wrapping 시도! • 툴에서는 C# 버젂을 이용! • BSON 생성에 익숙해지기 위한 시갂 필요! • Mongodb 와 interaction 을 하는 각 함수를 만들고 Application에서 함수 호출하는 설계!