사전에 엄격하게 정의된 DB schema를 요구하는 table 기반 데이터 구조
-> 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리
table 형식이 아닌 비정형 데이터를 저장할 수 있도록 지원
-> 데이터 중복으로 인해 데이터 update 시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많을 때 유리
NoSQL의 종류 Bigtable, DynamoDB, Cassandra, MongoDB
db.createCollection("student")
db.student.insert({"id": 2022394, "name": "Nossi", "class": ["Math", "Eng"]})
db.student.insert({"id": 2021921, "name": "Bob", "class": ["Eng"]})
db.student.find() // Fetch all students in JSON format
db.student.findOne({"id": 2022394}) // Find one matching student
db.student.remove({"name": "Nossi"}) // Delete matching students
db.student.drop() // Drops the entire collection
RDB (SQL) | NoSQL | |
---|---|---|
데이터 저장 모델 | table | json document / key-value / 그래프 등 |
개발 목적 | 데이터 중복 감소 | 애자일 / 확장가능성 / 유연성 |
예시 | Oracle, MySQL, PostgreSQL 등 | MongoDB, DynamoDB 등 |
Schema | 엄격한 데이터 구조 | 유연한 데이터 구조 |
⭐장점⭐ | - 명확한 데이터구조 보장 | - 유연하고 자유로운 데이터 구조 |
- 데이터 중복 없이 한 번만 저장 (무결성) | - 새로운 필드 추가 자유로움 | |
- 데이터 중복이 없어서 데이터 update 용이 | - 수평적 확장(scale out) 용이 | |
⭐단점⭐ | - 시스템이 커지면 Join문이 많은 복잡한 query가 필요 | - 데이터 중복 발생 가능 |
- 수평적 확장이 까다로워 비용이 큰 수직적 확장(Scale up)이 주로 사용됨. | - 중복 데이터가 많기 때문에 데이터 변경 시 모든 컬렉션에서 수정이 필요함 | |
- 데이터 구조가 유연하지 못함 | - 명확한 데이터구조 보장 X | |
⭐사용⭐ | - 데이터 구조가 변경될 여지가 없이 명확한 경우 | - 정확한 데이터 구조가 정해지지 않은 경우 |
- 데이터 update가 잦은 시스템 (중복 데이터가 없으므로 변경에 유리) | - Update가 자주 이루어지지 않는 경우 (조회가 많은 경우) | |
- 데이터 양이 매우 많은 경우 (scale out 가능) |