ACID
(Atomicity, Consistency, Isolation, Durability) 특성을 가지고 있어 데이터의 일관성과 안전성을 보장한다.
key-value
, document
, graph
, column
등 다양한 데이터 모델ㅇ르 사용하여 데이터를 저장하고 관리한다.BASE
(Basically Available, Soft state, Eventually consistent) 특성을 가지며, 일관성을 포기하고 가용성과 성능을 높이는 것이 목적이다.BASE
특성을 가진다. 이를 통해 대용량 데이터 처리에 효과적인 분산 시스템을 구축할 수 있다.
hash
나 range
등의 방법으로 결정된다.
일반적으로 NoSQL 데이터베이스는 클러스터링(Clustering)을 지원하며, 클러스터 내의 모든 서버는 동일한 데이터를 저장하는 것이 아니라, 서로 다른 샤드(Shard)에 데이터를 저장
-> 데이터를 요청하는 클라이언트는 어느 서버에 요청을 보내야 하는지를 알아내야 함
이를 위해 NoSQL 데이터베이스는 분산 네임스페이스(Distributed Namespace)와 분산 라우터(Distributed Router)를 사용한다.
각 서버가 어떤 데이터를 담당하고 있는지를 기록하는 데이터베이스의 메타데이터 정보
-> 이 정보를 이용하여 클라이언트는 데이터를 요청할 때 분산 라우터에게 어느 서버에서 데이터를 가져와야 하는지를 요청하면, 분산 라우터는 적절한 서버를 찾아 응답합니다.
예를 들어, MongoDB에서는 분산 네임스페이스를 config 데이터베이스의 chunks 컬렉션에 저장하고, 분산 라우터로는 mongos 프로세스를 사용합니다. 클라이언트는 mongos 프로세스에 요청을 보내면, mongos는 분산 네임스페이스를 조회하여 어느 서버에 요청을 보내야 하는지를 결정하고, 요청을 처리하는 서버에 전달합니다.
NoSQL은 대체로 분산형 아키텍쳐를 사용하고, 이에 따라 데이터 일관성 유지를 위한 추가적인 처리 비용이 발생한다. 또, NoSQL은 일반적으로 eventual consistency
모델을 사용하는데, 이는 데이터의 일관성을 보장하는 대신, 업데이트된 데이터가 다른 노드에 도달하는 시간이 지연될 수 있다는 것을 의미한다. 따라서, NoSQL은 일관성보다는 가용성과 분산성에 중점을 둔 시스템으로, 데이터 일관성이 매우 중요한 경우에는 RDBMS보다는 부적합할 수 있다. 하지만, 데이터 업데이트가 매우 빈번하지 않거나, 빠른 읽기 속도가 필요한 경우에는 NoSQL이 적합할 수 있다.
데이터를 여러 노드에 분산해서 저장하고 처리하기 때문에, 병렬 처리를 이용하여 높은 읽기 처리량을 달성할 수 있다. 또한, 스키마가 유연하고, 복잡한 JOIN 연산이 필요하지 않기 때문에 읽기 쿼리가 간단하고 빠르다. 일부 NoSQL DB는 인덱싱이 매우 빠르게 처리되기 때문에 대량의 데이터에서도 빠른 검색 속도를 보장할 수 있다.
ACID
는 atomicity(원자성)
, consistency(일관성)
, isolation(고립성)
, durability(지속성)
의 약어로 데이터베이스 트랜잭션 처리의 안정성과 일관성을 보장합니다. 이는 모든 트랜잭션이 완료될 때까지 다른 트랜잭션에 영향을 주지 않고, 데이터 일관성을 유지하기 위해 사용됩니다. 예를 들어, 은행에서 계좌 이체를 하기 위해 사용되는 트랜잭션은 완료되기 전에 다른 트랜잭션에서 계좌 정보를 변경할 수 없습니다.BASE
는 Basically Available
, Soft state
, Eventual consistency
의 약어로 ACID와 반대로 일관성 보다는 가용성을 중시합니다. NoSQL에서는 모든 서버가 동일한 데이터를 가지고 있지 않을 수 있으며, 일부 서버에서는 데이터가 더 이상 최신 상태가 아닌 경우가 있을 수 있습니다. 이를 해결하기 위해 NoSQL은 일관성을 보장하느 ㄴ것이 아니라, 최종적으로 일관성을 유지하는 것을 목표로 합니다. 예를 들어, 소셜 네트워크에서 사용되는 NoSQL 시스템에서는 최신글이나 댓글을 모든 서버에서 즉시 사용할 필요가 없으며, 일부 서버에서는 조금 더 오래된 데이터를 제공해도 문제가 없습니다. key-value
스토어는 단순히 key-value 쌍으로 데이터를 저장하고 검색하기 때문에, 간단한 Get과 Put 연산만 제공합니다. Document
스토어는 JSON이나 XML과 같은 문서 형식으로 데이터를 저장하기 때문에, JSON 쿼리를 사용하여 데이터를 검색할 수 있습니다. Graph
스토어는 노드와 엣지를 사용하여 데이터를 저장하기 때문에, 그래프 쿼리 언어를 사용하여 복잡한 그래프 분석을 수행할 수 있습니다.