본문 바로가기

nosql

MongoDB : Backup & Restore 업무 중 MongoDB의 Database를 복제해야 하는 일이 생겼습니다. 그래서 다음과 절차를 갖고 진행했습니다. MongoDB 에서는 databaseCopy 라는 명령어를 제공해줍니다. 복제해야 할 Database 로 접속합니다. use DB명 그리고 다음 명령어로 복제를 수행합니다. db.copyDatabase('원본DB명' , '복제DB명') 그러나, Sharding 으로 구성하였을 경우 위 명령어로는 복제를 할 수 없습니다. 따라서 mongodump 와 mongorestore를 이용해야 합니다. 우선, dump 파일을 생성하겠습니다. mongodump 실행 포맷 mongodump --out /파일경로/파일명 --port 포트번호 -u관리자계정 -p관리자암호 --db .. 더보기
MongoDB : Too Many Open File 현상 현재 프로젝트에서 두 대의 서버로 MongoDB의 ReplicaSet를 구성하였습니다. 그런데, 운영 중 서버B에서 동작중인 RS1 Secondary가 죽기도 하고 .. 서버A에서 동작중인 RS1 Primary가 죽기도 하는 현상이 간헐적으로 발생하였습니다. MongoDB 로그를 분석 중, 여러 에러 코드가 있었지만 Too many file opens와 함께 Prefix로 [Error] 를 발견하였습니다. 우선 1차적인 조치로 이 것을 해결하기 위해 살펴보던 중 Linux에서 허용하는 open files가 4096으로 되어 있는 것을 보았습니다. 우선 이 값을 최대치로 높여주기 위핸 조치를 취했습니다. ulimit -a 로 현재 시스템에서의 수치 확인 ... open files 4096 max user .. 더보기
Mongodb : Linux 설치 가이드 tar 다운로드 https://www.mongodb.com/download-center#atlas 위 주소로 접속하여, 최신버전 다운로드 linux 서버로 파일 복사 압축 풀기 tar xzf mongodb-linux-x86_64-rhel70-3.4.2.gz 데이터 저장용 폴더 생성 mkdir -p /data/db 서버 시작 /[압축푼 경로]/mongodb-linux-x86_64-rhel70-3.4.2/bin/mongod --port 27017 --dbpath /data/db 인증을 주고자 할 경우는 /[압축푼 경로]/mongodb-linux-x86_64-rhel70-3.4.2/bin/mongod --port 27017 --dbpath /data/db -- auth 백그라운드로 실행할 경우는 /[압축푼 경.. 더보기
OpenSource MongoDB : (4) Aggregation Pipeline Optimization 명령어 (연산자) 실행 입출력 형태 $project reshape (1:1) 키를 지우거나 추가하기 $match filler (n:1) 필터링하기 $group aggregate (n:1) 합계 연산 $sort sort (1:1) 분류하기 $skip skips (n:1) 건너뛰기 $limit limits (n:1) 제한하기 $unwind normalize (1:n) tags:["red","blue","green"] -> tags:red, tags:green, tags:blue $out output (1:1) 출력하기 1. Pipeline Sequence Optimization 1) $project or $addFields + $match Sequence Optimization Before Optimizat.. 더보기
OpenSource MongoDB : (3) 집계 연산 - 집계동작 소개 집계 파이프라인 db.orders.aggregate( [ -- status field 가 "A" 인 것을 추출 { $match: { status: "A" } }, -- 그룹 식별 값은 "cust_id" field 로.. -- 그룹핑 된 document 들의 amount 값을 합친 것을 "total" field 로.. { $group: { _id: : "$cust_id", total : { $sum : "$amount" } } } ]) 파이프라인 연산자와 인덱스 $match, $sort 파이프라인 연산자들은 파이프라인의 시작점에 사용하는 경우 인덱스로서의 장점을 발휘합니다. 버전 2.4 이후로 도입된 $geoNear 파이프라인 연산자는 위치 인덱스의 장점을 갖습니다. 선점 필터링 (Ear.. 더보기
OpenSource MongoDB : (2) CRUD 연산 - CRUD 란? Create / Read / Update / Delete 를 의미합니다. Document 를 JSON 형태로 전달하면서 2진 JSON인 BSON 코드로 저장합니다. - MongoDB의 주요기능 Index MongoDB는 일반적인 쿼리 밑 업데이트 성능을 향상시키기 위해 인덱스를 완벽하게 지원합니다. 인덱스는 애플리케이션에서 데이터 구조를 효율적으로 관리하면서 컬렉션의 일정 부분을 view로 저장하도록 지원합니다. 1) Index 를 사용하는 이유 Index는 DB 테이블에 대한 처리 속도를 높여주는 자료 구조로서, 저장딘 자료에 대한 빠른 조회가 가능해집니다. Index는 Key-Field 형태를 가지며, 스캔을 거치지 않고 원하는 문서의 주소로 바로 이동하게 합니다. Collectio.. 더보기
New NoSQL & mongoDB : (6) Sharding System Sharding System 이란? Sharding 의 가장 큰 목적은 파티셔닝을 통한 데이터 분산 처리와 성능 향상을 위한 Load Balancing 입니다. 또한, 빅 데이터의 효율적 관리와 백업 및 복구 전략 수립을 위한 솔루션이기도 합니다. Sharding의 목적 데이터의 분산 저장 하나의 서버에 빅 데이터를 저장, 관리하는 것은 성능 저하 문제를 유발시킵니다. 따라서, 여러대의 서버를 통하 분산 처리했을 때 가장 이상적으로 작동할 수 있습니다. 빠른 성능 분산 처리는 여러 개의 프로세스가 여러 개의 CPU를 통해 동시 작업을 수행했을 때 가장 이상적이라 볼 수 있습니다. 데이터 백업과 복구 전략의 역할 하나의 서버에 빅 데이터를 저장, 관리했을 때 서버 장애가 발생한다면 어마어마한 데이터 유실이.. 더보기
New NoSQL & mongoDB : (5) Replica & ReplicasSet Master & Slave 서버 빅 데이터의 안정한 저장과 관리 그리고 복구가 수행되기 위해서는 적절한 백업 솔루션이 필요합니다. 리프리카와 리프리카 셋 기능은 빅데이터의 백업을 통해 안정성을 보장하기 위한 솔루션 중 하나 입니다. 리프리카 기능을 위해서는 마스터 노트와 슬레이브 노드가 필요하며, 슬레이브 노드는 최소 3대 이상을 권장합니다. ReplicaSets 마스터 서버와 슬레이브 서버의 관계는 원본 데이터베이스에 대한 복제 본 데이터베이스에 동일한 데이터를 하나 더 저장해 두는 관계를 의미합니다. 그런데, 실시간으로 마스터 서버에 대한 복구 작업을 수행하는 거나 슬레이브 서버를 즉시 사용할 수 있는 것은 아닙니다. 이를 위한 기능이 리프리카셋 입니다. 리프리카셋에서 실시간으로 사용되는 메인 서버를.. 더보기