본문 바로가기

Infra14

MongoDB - (8) - 트랜잭션 트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 처리 단위이다. 트랜잭션의 중요한 특징은 작업이 성공하든 실패하든 부분적으로 완료되지 않는 점이다. (중도 실패시 롤백) 따라서 진정한 트랜잭션이 되려면 ACID 속성을 만족해야한다. Atomicity - 원자성 Consistency - 일관성 Isolation - 고립성 Durability - 영속성 몽고 DB는 이를 만족한다. 2023. 4. 22.
MongoDB - (7) - 집계 프레임워크 아래 aggregate로 companies collection에 name과 설립일자를 확인할 수 있다. db.companies.aggregate([ {$match : {founded_year: 2004}}, {$project : { _id: 0, name: 1, founded_year : 1 }} ]) aggregate는 집계 쿼리를 실행할때 호출하는 메서드로, 집계 파이프라인을 구현할 수 있는 메서드이고, 파이프라인은 도큐먼트를 요소로 포함하는 배열이다. limit을 추가한 코드를 보자. db.companies.aggregate([ {$match : {founded_year: 2004}}, {$limit : 5}, {$project : { _id: 0, name: 1, founded_year : 1 }.. 2023. 4. 22.
MongoDB - (6) - 인덱싱2 MongoDB에서는 무조건 인덱싱을 사용하는 것은 옳지 않다. 데이터의 일부를 조회할 때 가장 효율적이며 어떤 쿼리는 인덱스가 없는게 더 빠르다. 인덱스는 컬렉션에서 가져와야 하는 부분이 많을 수록 비효율 적이다. 왜냐면 인덱스를 하나 사용하려면 두 번의 조회를 해야하기 때문이다. 아쉽게도 인덱스가 도움이 될지 혹은 방해가 될지 알 수 있는 공식은 없다. 실제 데이터 크기 인덱스 크기 도큐먼트 크기 결과 셋 평균 크기 에 따라 다르기 때문이다. 쿼리의 30% 이상을 반환하는 경우 인덱스는 종종 쿼리 속도를 높인다. 하지만 이 수치는 2% ~ 60% 까지 다양한 양상을 띈다. 인덱스가 적합한 경우 큰 컬렉션 큰 도큐먼트 선택적 쿼리 컬랙션 스캔이 적합한 경우 작은 컬렉션 작은 도큐먼트 비선택적 쿼리 인덱스.. 2023. 4. 22.
MongoDB - (5) - 인덱싱 인덱스를 사용하면 빠른 속도로 쿼리할 수 있다. 인덱스를 사용하지 않는 쿼리를 Collection scan이라 하며, 서버가 컬렉션 전체를 뒤져 결과를 가져오는 것을 의미한다. 몽고 DB가 쿼리에 효율적으로 응답하게 하려면 애플리케이션의 모든 쿼리 패턴에 인덱스를 사용하는 것이 좋다. 인덱스는 조회 영역에 한하여 놀라운 차이를 가져오지만, 인덱싱된 필드를 변경하는 CRUD 중 CUD 작업은 모든 인덱스를 갱신하기 때문에 오래걸린다. 몽고 DB 인덱스는 기존 RDBMS와 거의 동일하게 작동한다. 예제를 살펴보자. 아래와 같이 쿼리를 진행한다고 하자, db.users.find().sort({"age" : 1, "username" : 1}) 위 쿼리는 먼저 age로 정렬한 뒤, username으로 정리하는데 .. 2023. 4. 21.