Database(14)
-
MongoDB - 백업하고 복구하기(mongodump&mongorestore)
이번에 다루어볼 내용은 몽고디비에서 데이터를 백업하고 복구하는 방법이다. 백업하기(덤프, dump) 몽고디비가 설치되어 있다면, mongodump라는 명령어로 몽고디비 데이터를 백업할 수 있다. > mongodump --host 127.0.0.1 --port 27017 위 명령으로 데이터를 백업한다면, 현재 디렉토리에 /dump 디렉토리가 생기고 이 디렉토리 밑에 데이터가 복구되어 있다.(DB 별로 폴더가 생겨있고, 그 폴더안에 BSON으로 데이터가 백업되어 있다.) > mongodump --out ~/mongo_backup --host 127.0.0.1 --port 27017 --out 옵션으로 데이터 백업의 디렉토리 위치를 정해줄 수 있다. > mongodump --out --host 127.0.0...
2020.08.16 -
DB - MongoDB 맵리듀스(Map Reduce)
몽고디비 서버에서도 다른 대용량 분산 NoSQL DBMS처럼 맵리듀스 기능을 제공한다. 맵리듀스와 유사한 집계(Aggregations)기능도 제공하지만 더욱 복잡한 패턴의 분석은 맵리듀스 기능이 필요 할 수도 있다. 몽고디비의 맵리듀스는 자바스크립트 언어의 문법을 사용하여 구현한다. 즉, 내부적으로는 자바스크립트 엔진을 이용한다는 뜻이다. 몽고디비가 현재까지 SpiderMonkey, V8 등의 자바스크립트 엔진을 사용했지만 현재는 SpiderMonkey 엔진을 기본으로 사용한다. 두 엔진의 차이가 여기서 이야기할 내용은 아니지만 간단히 아래와 같은 차이를 갖는다. V8 엔진은 멀티 프로세스 방식이며, SpiderMonkey는 단일 프로세스 내에서 멀티 스레드로 작동한다. 어찌됬든 몽고디비에서 성능이 더 ..
2019.09.21 -
DB - MongoDB FindAndModify 란?
MongoDB에서는 여러 명령을 하나의 트랜잭션으로 묶어서 사용할 수 없다. 그 이유는 몽고디비는 단일 문서 단위의 트랜잭션만 지원되기 때문이다. 이때문에 변경 직전이나 직후의 문서 데이터를 확인하기란 쉽지 않다. 사실 일반적으로 응용 프로그램에서 변경 직후의 데이터는 자신이 직접 변경한 데이터이므로 크게 필요없을 수 있지만, 변경 직전의 데이터를 확인하는 기능은 필요할 수 있다. 이러한 기능을 제공하기 위해서 몽고디비는 FindAndModify라는 명령을 제공한다. 해당 명령은 검색 조건에 일치하는 문서를 검색하고, 그 문서를 변경하거나 삭제하는 후속 오퍼레이션을 설정할 수 있다. > db.collection.findAndModify({ query:, sort:, remove:, update:, new..
2019.09.19 -
DB - MongoDB OperationFailed Sort operation used more than the maximum 33554432 bytes of Ram.
해당 예외는 정렬시 사용되는 메모리 크기에 관한 예외이다. find로 데이터를 조회한 후에 sort()를 통해서 정렬을 할때, 만약 인덱스를 이용해서 정렬을 수행할 수 있을 때는 메모리 크기와 크게 관계가 없지만, sort() 옵션이 인덱스를 사용할 수 없을 때는 MongoDB 서버가 쿼리를 실행하는 도중에 퀵소트를 실행해서 find 명령의 결과 도큐먼트를 정렬한 다음 클라이언트에게 응답한다. 이때 정렬을 위한 추가적인 큰 메모리 공간이 필요하다. 몽고디비 서버는 기본값으로 정렬을 수행할때 사용할 수 있는 메모리값이 대략 32MB이다. 즉, 아주 큰 결과 도큐먼트들을 정렬할 때는 해당 값(32MB)을 초과하여 위와 같은 예외를 발생시킬 수 있다. 이렇게 메모리 공간이 부족해서 정렬을 수행하지 못하는 경우..
2019.09.19 -
DB - MongoDB Insert Ordered 옵션은?
MongoDB의 Insert 문은 2개의 인자가 들어간다. 첫번째 인자는 삽입할 문서, 두번째 인자는 선택적인 옵션이다. 여기서 오늘 알아볼 것은 두번째 인자중 ordered에 대해서 알아볼 것이다. 우선 몽고디비에서는 디폴트로 ordered가 true인 상태에서 삽입을 수행한다. ordered가 true라는 것은 무슨 뜻일까? 만약 삽입하는 문서가 단일 문서가 아니고, insertMany를 사용하여 여러 문서를 한번에 삽입하는 상황을 생각해보자. 만약 ordered가 true라면 싱글 스레드로 삽입하려는 여러개의 문서(배열)를 명시된 순서대로 하나씩 삽입할 것이다. 순서가 중요한 상황이라면 유용할 것이다. 하지만 ordered가 false라면 멀티스레드로 여러 문서를 병렬로 삽입한다. 그렇다면 당연히 ..
2019.09.19 -
DB - MongoDB Text Search(본문 검색)
MongoDB는 문자열 내용의 텍스트 검색을 수행하는 쿼리를 지원한다. 텍스트 검색을 수행하기 위해 몽고디비는 텍스트 인덱스와 $text 연산자를 사용한다.(View는 텍스트 검색을 지원하지 않는다.) 예제 진행을 위해 아래 문서들을 삽입한다. 1 2 3 4 5 6 7 8 9 db.stores.insert( [ { _id: 1, name: "Java Hut", description: "Coffee and cakes" }, { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, { _id: 3, name: "Coffee Shop", description: "Just coffee" }, { _id: 4, name: "Clothes Clothe..
2019.09.16