0517 - 0523

0516 ~ 0520

제주도 여행

0521

MongoDB 인덱스

인덱스

  • 컬렉션내의 임의의 문서를 빠르게 접근하도록 하는 자료구조
  • 인덱스는 데이터 파일과는 별도의 파일에 저장됨
  • 검색 속도를 향상시키나 인덱스 저장 공간 필요
  • 삽입, 삭제, 수정 연산의 속도 저하

인덱스 구조

  • 엔트리구조 : <탐색키필드, 문서에 대한 포인터>
  • 엔트리들은 탐색 키 필드 값의 오름차순으로 정렬되어 있음

인덱스 생성 메소드 createIndex()

db.컬렉션명.createIndex(<키> , <옵션>)

  • <키>는 문서 형식 {키:1 or -1, ... }으로 명세 (1:오름, -1:내림)
  • <옵션>도 문서 형식 {키:값, ... }으로 명세

단일/복합 인덱스 (single/compound index) 생성

  • 단일 키 인덱스 (하나의 필드만 사용)
  • 복합 키 인덱스 (2개 이상의 필드를 사용)
  • 키의 순서가 중요함 db.mycol.createIndex({“deptname”:1, “year”:-1})

다중키 인덱스(multikey index)

  • 필드의 값이 배열(예, 취미)인 경우 생성되는 인덱스(별도 지정 불필요)
  • 배열의 각 요소마다 인덱스 엔트리 유지
  • 같은 배열에서 생성된 여러 엔트리들은 동일한 문서를 참조

0522

새로운 프로젝트를 준비하며…

게시판 프로젝트를 모두 마치고 이제는 제대로 된 아이디어를 담은 프로젝트를 시작하려고 한다.
분석과 설계에 많은 시간을 들여서 이 프로젝트로 성공해보고 싶다는 욕심이 생겼다.
우선은 기능을 확실히 정하고 어떤 프레임워크를 사용하여 프로젝트를 완성시킬지 고민해봐야겠다.
리액트를 사용할 수도 있으니 코딩테스트와 리액트 공부를 함께 진행하여 모든 상황에 대비해두어야겠다.

0523

Aggregation 프레임워크

3가지 유형의 집계 연산 기능 제공

  • 집계 파이프라인
  • 맵-리듀스 함수
  • 단순 목적 집계 메소드

집게 파이프 라인

  • 여러 단계를 거쳐 최종 결과 산출
  • 각 단계마다 다양한 파이프라인 작업 가능
  • ex) $project, $group, $match, $limit, $skip, $sort, 등 10개 연산자
    -> 각 단계의 출력결과가 다음 단계의 입력으로 제공

집계 프레임워크

db.mycol.aggregate([
  {$group : { _id : "$by_user“ , num_tutorial : {$sum : 1} }}
])

$group 연산자

  • 입력 문서의 by_user 필드를 기준으로 그룹화하고, 그 그룹의 by_user 필드의 값은 결과 출력 시 _id 필드 값으로 사용
  • _id 필드는 식별자 용 필드로 반드시 있어야 함(필드명 변경 불가)

$sum 연산자

  • 각 그룹에 대해 그 그룹에 속하는 문서가 있을 때 마다 num_tutorial 필드 값을 1씩 증가
  • 아래와 같은 뜻이다.
select by_user as _id, count(*) as num_tutorial
from mycol
group by by_user;

태그:

카테고리:

업데이트: