반응형
이번에 토이 프로젝트를 만들기 앞서 NoSQL에 대해 이야기가 나왔다.
대용량 데이터를 처리하는데 쓴다... 정도로만 알고 있어서 한 번 정리해보기로 한다.
NoSQL이란?
- 비관계형 데이터베이스 (<-> RDBS: 관계형 데이터베이스)
- ACID 특성을 제공하지 않음
- 확장성, 가용성, 높은 성능
- 데이터 저장 및 검색을 위해 특화된 매커니즘 제공
- = No SQL, Not Only SQL, Non-Relational Operational Database, ...
🔻 ACID란?
더보기
데이터베이스 트랜잭션의 안전한 수행을 보장하기 위한 성질
Atomicity; 원자성
- 각 트랜잭션들이 단일 단위로 취급하도록 보장
- 트랜잭션 연산이 DB 모두에 반영되도록 commit 또는 전혀 반영되지 않도록 rollback
- 모든 명령은 반드시 완벽히 수행되어야 함
(오류나 일부만 수행 시 트랜잭션 전부 취소)
Consistency; 일관성
- 시스템이 가진 고정 요소의 상태는 트랜잭션 수행 전후가 같아야 함
Isolation; 독립성; 격리성
- 병행 실행하는 경우 하나의 트랜잭션이 실행하는 중에 다른 트랜잭션 연산이 낄 수 없음
- 수행 중인 트랜잭션은 완료 전까지 다른 트랜잭션에서 결과를 참조할 수 없음
Durability; 영속성; 지속성
- 성공적으로 완료된 트랜잭션 결과는 시스템이 고장나도 영구적으로 반영됨
1. Multiple 쿼리
- 쿼리 하나로 모든 데이터를 검색하기 보다는 원하는 데이터 검색을 위해 여러 쿼리 수행이 일반적임
- NoSQL 쿼리들은 전통적인 SQL 쿼리들보다 빠르므로 추가적인 쿼리 비용도 수용할 수 있음
- 💡 굉장히 많은 수의 쿼리를 꼭 필요로 한다면 2, 3 방안이 더 적합
2. 캐싱, 복제, 비정규화 데이터
- 외래키를 저장하는 것보다는 외래 값을 모델 데이터와 함께 저장하는 것이 일반적
- ex: 각 블로그들의 코멘트들은 사용자 ID와 함께 사용자 이름이 포함될 수 있음.
-> 다른 조회 없이 사용자 이름에 쉽게 액세스되면 좋음.
❓ 만약, 사용자 이름이 변경된다면? DB의 여러 위치에서 변경해야 함.
💡 write보다 read가 일반적일 때 더 효율이 좋음
3. 중첩 데이터
- 문서형 DB를 제외하고는 collections의 수에 비해 더 많은 데이터를 넣는 것이 일반적
- ex: 블로그 게시글 내의 댓글을 저장하도록 선택해 한 번의 검색으로 모든 댓글 조회
💡 단일 문서 내에 특정 작업에 필요한 모든 데이터가 포함
NoSQL의 종류
Type | NoSQL DB |
Key–value cache | Apache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, Infinispan, Memcached, Redis, Velocity |
Key–value store | Azure Cosmos DB, ArangoDB, Aerospike, Couchbase, Redis |
Key–value store (eventually consistent) |
Azure Cosmos DB, Oracle NoSQL Database, Dynamo, Riak, Voldemort |
Key–value store (ordered) |
FoundationDB, InfinityDB, LMDB, MemcacheDB |
Tuple store | Apache River, GigaSpaces |
Object database | Objectivity/DB, Perst, ZopeDB |
Document store | Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, Qizx, RethinkDB, Elasticsearch |
Wide Column Store | Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google Cloud Datastore, HBase, Hypertable, |
Native multi-model database |
ArangoDB, Azure Cosmos DB, OrientDB, MarkLogic |
Key-Value store
- associative array (map이나 dictionary 같은) 사용
- key-value 쌍으로 나타냄
- 다른 유형의 DB로는 불가능한 범위까지 수평 확장 가능
Document store
- JSON, XML 등 형태로 표시
- 문서를 나타내는 고유한 key를 통해 DB에서 주소 지정됨
Graph
- 유한한 수의 관계로 연결된 요소로 구성된 그래프로 표현되는 데이터를 위해 설계
- 소셜 네트워킹, 로드맵, 사기 감지 등
+ 프로젝트 적용 건에 대해...
실시간으로 반응을 확인하는 좋아요 기능이 있어서 도입하면 좋을 것 같다는 생각이 들었다.
NoSQL을 찾다보니 처음 사용해보는 사람들은 MongoDB나 Redis를 자주 사용하는 것 같다.
MongoDB는 문서 데이터베이스라 JSON와 유사한 형태로 데이터를 저장되는 것도 장점인 것 같다.
Redis와 Mongo DB를 함께 사용해서 Redis는 데이터를 캐시에 저장하고 Mongo DB는 디스크에 저장하는 형식도 있는 것 같은데.. 해당 부분에 대해서는 팀원들과 논의 후 결정 해야겠다.
참고
- 시나공 정보처리기사 필기
- en.wikipedia - NoSQL
반응형
'Develop > CS' 카테고리의 다른 글
[MySQL] SQL 오류: Data truncation: Incorrect string value ... (2) | 2021.12.03 |
---|---|
세션과 Redis (0) | 2021.11.29 |
What is Hosting? 호스팅이란? (0) | 2021.10.28 |
브라우저의 동작 원리 (0) | 2021.10.07 |
페이스북이 멈췄다? (DNS와 BGP에 대해) (0) | 2021.10.05 |