About MongoDB

2016. 3. 15. 18:45BigDATA/mongoDB

반응형

이런..회사 github에서 적은 내용이 블로그로 포스팅하려는데..힘들군요 ㅠㅠ

마크다운도 안먹히는군요 ㄲㄲ


## Mongo DB site 

https://www.mongodb.com/


## Mongo DB란?

MongoDB stores data는 JSON과 같은 동적스키마형태의 문서들인데 다양한 구조를 가질수 있다.

MongoDB에서는 이러한 구조를 BSON이라고 부른다.

이해를 더 돕기 위해 아래의 MySql과 Mongo DB의 비교한 그림을 보자.





또한 각각의 특징을 살펴보자. 몽고DB site에 있는 내용이라서 그런지..어마무시하다 ㅋㅋ




음..MongoDB를 살짝 맛보자!




위의 내용으로 보면 api는 select를 logstash에서는 insert와 update가 일어나야하는데 가능여부는 찾아보아야 한다.

(현재 logstash에서 insert 즉, append되어지는 것을 확인, 또한 file change 이벤트를 받은 후에 동작 여부는 체크 해봐야한다.)

이러한 것을 해결하기 위해서 BSON형태의 구조와 이중화 정책등을 고려해야한다. #19 


## Mongo DB 설치(local)

더욱 더 이해도를 높이기 위해서 mongo db를 로컬에 설치를 해보겠습니다.

우선 아래의 그림을 통해 플랫폼과의 호환을 체킹한 뒤에 다운로드 받습니다.




``version : mongodb-osx-x86_64-enterprise-3.2.3.tgz``

``os : mac os 64bit``





`1) 원하는 곳에 압축을 해제 합니다.`

terrypark@localhost:~/kakao/program$ tar -xvf mongodb-osx-x86_64-enterprise-3.2.3.tgz


`2) 편의를 위해 심볼릭링크를 걸어줍니다.`

terrypark@localhost:~/kakao/program$ ln -s /Users/terrypark/kakao/program/mongodb-osx-x86_64-enterprise-3.2.3 /Users/terrypark/kakao/program/mongodb-3.2.3


`3) mongoDB에 필요한 디렉토리를 생성하여 줍니다.`

/Users/terrypark/kakao/program/mongodb-3.2.3

drwxr-xr-x   2 terrypark  staff     68  2 21 16:15 conf

drwxr-xr-x   2 terrypark  staff     68  2 21 16:15 data

drwxr-xr-x   2 terrypark  staff     68  2 21 16:15 log


`4) /conf 디렉토리 밑에 mongodb.conf 파일을 만들고 아래와 같이 설정 합니다.`

dbpath=/Users/terrypark/kakao/program/mongodb-3.2.3/data

logpath=/Users/terrypark/kakao/program/mongodb-3.2.3/logs/mongodb.log

logappend=true

verbose=true


#bind_ip=127.0.0.1

port=27017

fork=true


rest=true

#auth=true

#noauth=true


`5) mongoDB 실행`

terrypark@localhost:~/kakao/program/mongodb-3.2.3/bin$ ./mongod --config ../conf/mongodb.conf

2016-02-21T16:18:26.501+0900 I CONTROL  [main] ** WARNING: --rest is specified without --httpinterface,

2016-02-21T16:18:26.502+0900 I CONTROL  [main] **          enabling http interface

about to fork child process, waiting until server is ready for connections.

forked process: 83090

child process started successfully, parent exiting


`6) mongoDB Client 접속`

terrypark@localhost:~/kakao/program/mongodb-3.2.3/bin$ ./mongo localhost:27017

MongoDB shell version: 3.2.3

connecting to: localhost:27017/test

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

http://docs.mongodb.org/

Questions? Try the support group

http://groups.google.com/group/mongodb-user

Server has startup warnings:

2016-02-21T16:18:26.501+0900 I CONTROL  [main] ** WARNING: --rest is specified without --httpinterface,

2016-02-21T16:18:26.502+0900 I CONTROL  [main] **          enabling http interface

MongoDB Enterprise >


`MongDB Shutdown 시키기.`

MongoDB Enterprise > use admin

switched to db admin


MongoDB Enterprise > db.shutdownServer();

server should be down...

2016-02-21T16:22:26.487+0900 I NETWORK  [thread1] trying reconnect to localhost:27017 (127.0.0.1) failed

2016-02-21T16:22:26.487+0900 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused

2016-02-21T16:22:26.488+0900 I NETWORK  [thread1] reconnect localhost:27017 (127.0.0.1) failed failed


MongoDB Enterprise > exit

bye


`7) 브라우저로 콘솔 접속`

실행 옵션에 rest=true 로 준 경우에는 브라우저로 접속 가능.

http://localhost:27017/ 로 접속하게 되면 아래와 같은 메시지가 나옵니다.

It looks like you are trying to access MongoDB over HTTP on the native driver port.

1000을 더한 http://localhost:28017/로 접속을 하게 도면 아래와 같이 브라우저에 잘 접속하게 됩니다.





`8) MongDB Client Shell로 간단한 테스트를 해보자.`

MongDB의 느낌은 아래의 그림을 참고하도록 하자.





MongoDB Enterprise > use terry

switched to db terry


`insert'

MongoDB Enterprise > db.users.insert({name:"김세정", age:"21", company:"젤리피쉬", groups: ["프로듀스101", "가수"]})

WriteResult({ "nInserted" : 1 })


`select'

MongoDB Enterprise > db.users.find({name:"김세정"})

{ "_id" : ObjectId("56c96d9cfa1322ff062eaadb"), "name" : "김세정", "age" : "21", "company" : "젤리피쉬", "groups" : [ "프로듀스101", "가수" ] }


`update'

김세정이면

MongoDB Enterprise > db.users.update({name:"김세정"},{$set:{age:22}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })


김세정이면서 젤리피쉬 소속사인 경우

db.users.update({name:"김세정",company:"젤리피쉬"},{$set:{age:21}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })


`delete'

MongoDB Enterprise > db.users.remove({name:"김세정"})

WriteResult({ "nRemoved" : 1 })


## 참고 사이트

https://namu.wiki/w/MongoDB

https://www.mongodb.com/compare/mongodb-mysql

https://docs.mongodb.org/manual/reference/configuration-options/

https://docs.mongodb.org/manual/core/crud-introduction/

반응형