MongoDB (18) 썸네일형 리스트형 [MongoDB] 18. 데이터 모델링과 인덱스 - 인덱스 인덱싱 신문 기사를 노트에 스크랩할 때, 기사가 많아지면 원하는 기사를 쉽게 찾는 방법이 필요 노트의 맨 앞에서, 기사 제목과 페이지(가나다순)을 적은 "색인"을 만듬 제목을 모르고 기사 종류만 알고 있다면 색인을 사용하기 어려움 분야와 제목을 같이 색인에 활용하고 싶을 때는 "분야-기사제목-페이지 번호"로 색인을 만들면 됨. 많은 데이터를 분류하기 위해 색인을 만들 때는 어떤 순서로 만드느냐가 중요 아래 단계로 내려갈수록 범위가 좁아지는 것이 유용함 인덱스의 특징 인덱스가 없다면 모든 도큐먼트를 조회해야함 인덱스는 쿼리를 효율적으로 수행하게 함 새로운 도큐먼트가 생성/제거가 되면 인덱스도 함께 수정되어야 함. 속도의 저하 발생 가능성 단순 인덱스를 만들면 해당 필드를 조회할 때만 사용 가능 다수의 필드.. [MongoDB] 17. 데이터 모델링과 인덱스 - 데이터 모델링 데이터 모델링과 인덱싱 DB를 사용하는 환경에서 하드웨어 개선없이 성능을 개선하는 방법 데이터 모델링 업무 수행 시 발생하는 데이터를 정확하고 효율적으로 DB에 저장하기 위해 데이터 구조를 설계하는 과정 MongoDB의 특성을 고려하여 저장할 데이터의 구조를 정하는 작업 DBMS RDBMS MongoDB 설계 방식 테이블 설계 후 컬럼을 설계함 도큐먼트 설계 후 컬렉션을 설계 애플리케이션의 처리방안을 고려한 도큐먼트 구조를 어떻게 설계하느냐에 따라 데이터 "정합성(일관성)"과 "성능"에 큰 영향을 주게 되므로 이에 대한 정확한 이해가 필요함. 모델링 예시 - 게시판 각 게시판은 "이름"을 가진다. 게시판에 글을 쓰는 사용자는 "이름, 생년월일, 포인트"를 가진다. 각 게시글은 게시판에 작성 가능, "게시.. [MongoDB] 16. 집계명령어 - 트랜잭션 트랜잭션 읽기나 쓰기 작업이 가능한 DB 작업을 하나 이상 포함하는 DB의 "논리적 처리 단위" 애플리케이션에서 논리적 처리 단위의 일부로 여러 도큐먼트에 대한 읽기와 쓰기를 요구하는 상황 발생 가능성 트랜잭션의 중요한 특징 "성공하든 실패하든 부분적으로 완료하지 않는다." 특성 Atomicity(원자성) - 트랜잭션의 작업이 모두 적용되거나 아무 작업도 적용되지 않음. Consistency(일관성) - 트랜잭션에 성공하면 DB가 하나의 일관된 상태에서 새로운 일관된 상태로 이동 Isolation(독립성) - 여러 트랜잭션이 동시 실행될 때 트랜잭션이 다른 트랜잭션의 부분 결과를 보지 않도록 보장 Durability(지속성) - 트랜잭션이 완료되면 어떤 오류나 고장에도 변경된 값은 유지 MongoDB의 .. [MongoDB] 15. 집계명령어 - 다양한 연산자, 뷰 문자열 연산자 문자열 연산자 기능 $concat 두 개 이상의 문자열을 단일 문자열로 연결 $strcasecmp 대/소문자를 구분하지 않는 문자열 비교를 하며, 숫자를 반환 한다. $substrBytes 문자열의 부분 문자열을 만듦 $toLower 문자열을 모두 소문자로 $toUpper 문자열을 모두 대문자로 $concat db.text.aggregate([ { $project : {text:1,"concat":{$concat:["$text1","-","$text2"]}} } ]) $strcasecmp db.text.aggregate([ { $project : {text:1,"strcasecmp":{$strcasecmp:["$text1","$text2"]}} } ]) $substrBytes db.text.. [MongoDB] 14. 집계명령어 - 고급 스테이지, 여러가지 스테이지 누산기(accumulator) 객체 여러 도큐먼트에서 찾은 필드로 부터 값을 "계산"하는 객체이다. MongoDB 3.2 이전에는 $group 스테이지에서만 누산기 객체를 사용했지만, 이후에는 $project 스테이지에서도 배열안에서 작동한다. 원본 // 컬렉션 rating db.rating.find() $max 그룹에서 해당 필드의 최댓값을 반환 db.rating.aggregate([ { $group:{"_id":"$rating","max_user_id":{$max:"$user_id"}} } ]) $min 그룹 필드에서 해당 필드의 최솟값을 반환 db.rating.aggregate([ { $group:{"_id":"$rating","min_user_id":{$min:"$user_id"}} } ]) $s.. 이전 1 2 3 4 다음