• nosql : mongoDB
    • RDB 와 nosql차이는?
    • 어떤 점이 좋은가?
    • monogoDB가 RDB를 대신할 수 있는건 아님
    • api 준비해야함 : 내장 X
    • driver준비할때 api도 같이 사용할 수 있음
    • 5개 부족하면 다시 붙일 수 있음
  • RDB
    • 테이블 늘릴려면 컴퓨터 성능을 높여야 함

 

mongoDB

  • 도큐먼트 데이터베이스
    • 도큐먼트 : mongoDB가 데이터를 저장하는 최소 단위
      • 필드와 쌍으로 구성됨
      • 관계를 갖는 중첩 도큐먼트와 배열을 사용하여 1개의 도큐먼트로 표현 가능
    • 데이터 입출력
      • JSON형식의 도큐먼트 사용
    • 데이터 저장
      • 이진 포맷으로 인코딩한 BSON 형식의 도큐먼트로 변환되어 저장됨
  • 테이블을 만들지 않음
  • 콜랙션이라는 것을 만듦
      mongoDB RDB
    스키마 - 컬럼 얼마든지 원하는대로 만들 수 있음
    - key, value쌍으로 저장
    - 테이블 구조 없음
    - 문서 작성 규칙 
    - 같은 필드라도 데이터 타입이 다를 수 있음
    (비정형 스키마)
    - 이미 만들어져 있는 컬럼에 대해서만 가능
    - 갑자기 컬럼 추가 못함 (정형데이터)
    - 똑같은 컬럼 구조여야함
    - 데이터 구조 미리 정함

    SQL NOSQL SQL
      - 저장되어 있는 형식을 지정하지 않는다. 
    - free
    - 중복 최소화시 여러개의 테이블 나눠서 저장
    - 테이블간에 관계 있음
    서버 확장 - 서버 확장 시 붙이면 됨 - 서버 확장 시 전체 복사해야함 
    트랜젝션 - 트랜젝션 불가능
    - 성능을 더 크게 생각함
    - 트랜젝션 가능 (은행업무)
    - 다른 유저들은 commit할 때까지 볼 수 없음
    - jdbc는 자동 커밋
    JOIN - Join 지원 X
    - 임베디드 방식 or 레퍼런스 방식의 도큐먼트 구조 사용하고 나서 애플리케이션에 조인해야함
    - join 지원 O
      컬렉션 사용 테이블 사용
      도큐먼트
  • 유연성
    • 도큐먼트를 바꾼다고 해서 특별히 할 일은 없다. 
  • 확장성
    • 서버 확장 가능
    • 백업 안 해도 됨
    • 가져다 붙이면 됨
  • 고성능
    • 대용량 처리 성능 뛰어남
    • 일관성
    • 트랜젝션 포기
  • 가용성
    • 데이터 저장할 때, 4개의 머신 묶어놓은 것을 클러스터라고 함
    • 마스터가 데이터 저장할 때, 슬레이브가 여러곳에 복제해서 저장
    • 단일 컴퓨터 환경 X
    • 장애가 생기더라도 쓰는 데이터는 읽고 쓰는 거 지장 X
  • 스케일링에 좋다
    • 성능을 키우는데 적합하다.
    • 스케일 아웃 
      • 그냥 붙이는 것, 
      • 환경설정 해줘야함
  • 데이터 저장시 BSON형식으로 저장해서 사용함

 

  BSON JSON
  - json 데이터를 이진 형식으로 인코딩한 포맷
(인코딩 디코딩 필요)
-javascript에서 객체 생성시 사용하는 표현식
포맷 형식 - 컴퓨터가 이해할 수 있는 이진포맷 - 인간이 쉽게 이해할 수 있는 텍스트 형식
검색 속도 - 검색속도 빠름 - 데이터 검색 전 파싱 필요
-> 검색 속도 느림
이진 데이터 타입 지원 - 날짜 및 이진 데이터 타입 지원함 - 날짜 및 이진 데이터 타입 지원 X

데이터 조작어 ( DML )

insert

// mongoDB
db.member.insert({no : "C001", age : 45, status : "A"})
//관계형 DB
insert into memeber(no, age, status) values('C001', 45, 'A')
  1. db : 현재 사용준인 db 참조하는 내장 변수
    • 내장 변수 : 선언하지 않아도 사용 가능
  2. member : 컬렉션 이름 
  3. insert : 하고자 하는 작업
  4. 한 덩어리의 JSON형식 컨텐츠가 하나의 도큐먼트가 된다. 
    • 몇개가 될 수 있는지 제한 없다. 
    • 키 : 필드
    • no필드, age 필드, status 필드
    • 필드 명에 더블인용부호 안 줘도 된다. 
      • 근데 진짜 JSON은 줘야함

 

update (수정)

// mongoDB
db.member.update({age : {$gt : 25}}, {$set : {status : "C"}}, {multi : true})
  • {multi : true} → 다중, 모두 다
  • {multi : false} → 최초 하나만 바꿈
  • {$gt : 25} 네임 벨류
    • $gt : 연산자 (크다 연산자)
    • key에는 일반 문자형만 올 수 있어서
  1. 아규먼트 찾은거
  2. 어떻게 업데이트 할 것인가
  3. 추가적으로 전달하는 부가정보 (옵션)
//관계형 DB
updete memeber set status = 'C' where age > 25

 

삭제

// mongoDB
db.member.remove({no : "C001"})
  • 필드명이 C001인 것을 삭제해라
//관계형 DB
delect from member where no = 'C001'

 

조건에 해당하는 JSON 객체 안 주면 ALL이 된다. 

 


스키마

  mongoDB 관계형 DB
스키마 생성   - 어떤 컬럼 정의하는지 미리 정함
- 데이터구조 미리 정함
데이터입력 - 비정형 Data
- 집어 넣고 싶은 도큐먼트 사양 그때 그때 마음대로
유연하다.
- 정형 Data
- 컬럼 사양 맞춰줘야함
스키마조회 스키마 없음 스키마(테이블 구조)정해져 있음
장점 스키마 선업없이 도큐먼트에 필드 추가 및 삭제 자유로움 컬럼 사양에 맞춰야함
단점 전체 도큐먼트 조사해야함 스키마 선언 후 , 정형화 구조에 맞춰야만 데이터 입력가능

 


실습

use 데이터 베이스 이름

- 없으면 새로 만들어줌 

db

- 현재 사용하고 있는 db 뭐냐

show dbs

- 도큐먼트 한개도 없으면 온전한 db가 될 수가 없다.

 

db.book.insert({"name":"python","price":10000})
  • book 컬렉션 먼저 만들어주고
  • 그 안에 도큐먼트 넣어줌

 

show collections

현재 안에 있는 컬렉션들을 보여달라

 

db.book.find()

// 가격이 낮은 순
db.book.find().sort({"price":1})  


// 가격이 높은 순
db.book.find().sort({"price":-1})


// 가격이 높은 순 - 여러개 설정
db.book.find().sort({"price":-1,"name":1})

// 이름이 자바스크립트인 서적만 꺼내라
db.book.find({"name":"javascript"})

// 자바로 시작하는 친구 
db.book.find({"name" : {"$regex":"^java"}})

//가격이 8000넘는 친구 
db.book.find({"price" : {"$gt":8000}})

//가격이 8000보다 작거나 같은
db.book.find({"price" : {"$lte":8000}})
  • 데이터 일치
    • 연산자 : regex
    • ^ : 시작하는 문자
      • ^java : 자바로 시작하는
    • $ : 끝나는 문자
    • . : 개행식을 제외한 모든 문자
  • 연산
    • lt : 미만
    • lte : 이하
    • gt : 초과
    • gte : 이상
//메서드 전부 다 나옴
db.book.help()

 

//	첫번째 아규먼트 아무것도 없는 것 -> 안 주면 안됨
//	name필드는 꺼내, price는 빠짐 (name만 꺼내고, id는 언급 안 하면 무조건 나옴)
db.book.find({},{'name':1})

//	id는 안 뽑고 싶다 (따로 언급 안 한건 모두 0이 됨) 
db.book.find({},{'name':1,'_id':0})


//	꺼내고 싶은 것 true로 
db.book.find({},{'name':true})
  • 아무것도 설정 안 해주면 0임
  • 1이나 true와 같음
db.book.find({price : {$lt : 10000}},{name : true, price : true, _id : false})
  • 첫 번째 아규먼트는 where절과 비슷
  • 두번째는 select와 비슷

 

db.book.find({}, {'name':0, _id:0})
  • 언급한 필드가 다 false이면 다 true라고 인식함
  • 위의 코드 name, _id빼고 price나옴 

'study > JAVA 전문가' 카테고리의 다른 글

[mongoDB] 날짜 데이터  (0) 2021.12.24
[mongoDB] 2  (0) 2021.12.23
[mysql] 연습문제 2  (0) 2021.12.22
[sql] roll back 연습문제  (0) 2021.12.21
[JDBC] 방명록  (0) 2021.12.21

+ Recent posts