본문 바로가기

mongodb

MongoDB : String-List to Concat-String 시간이 없어서.. 간략하게 적어봅니다. String으로 구성된 List를 하나의 필드안에 구분자를 주어 묶어야 하는 일이 생겼습니다. { // DB 기준으로 테이블, 컬럼 리스트를 생성 $group: { _id: "$dbNm", tableList: { $addToSet: "$tableNm" }, columnList: { $addToSet: "$columnNm" } }, // reduce & concate 을 이용하여 List를 Concate String 으로 변환 $project: { dbNm: "$_id", tableNm: { $reduce: { input: "$tableList", initialValue: "", in: { $concat: ["$$value", "_", "$$this"] } } }, .. 더보기
MongoDB : Limit, Sort 여러번 사용 특정 데이터를 검색하기 위해 limit 와 sort를 여러번 사용해야할 때가 있습니다. 기본적인 Mongo API를 이용해서 시도해보았습니다. 기록된 데이터중 최근 1000건의 데이터 중 가장 마지막 일자의 데이터를 찾는 것이 목표입니다. Criteria criteria = new Criteria(); Query query = new Query(); criteria.and("creDatm").gt(startDate); query.addCriteria(criteria); query.with(Sort.by(Direction.ASC, "creDatm")); query.limit(1000); query.with(Sort.by(Direction.DESC, "creDatm")); query.limit(1); Sql.. 더보기
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.. 더보기