Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

NOSQL 이란?

2020. 12. 10. 11:06database

728x90

NoSQL 이란? (Not Only SQL)

RDBMS의 형태(관계형 데이터베이스)가 아닌 일관성 모델(비관계형 모델)을 이용하는 데이터 저장을 말합니다.

관계형 데이터베이스의 한계를 극복하기 위한 데이터 저장소의 새로운 형태로 수평적 확장성을 갖습니다.

 

RDBMS가 클라이언트/서버 환경에 맞는 데이터 저장기술이라면 NoSQL은 클라우드 환경에 맞는 저장기술 입니다.

대표적인 NoSQL

  • key-value Database (Riak, Redis,  Voldmort)
  • Document Database (MongoDB, CouchDB)
  • BigTable Database (Hbase, Casandra)
  • Graph Database (Sones, AllegroGraph)

 

  • 카산드라는 구글의 BigTable 컬럼 기반의 데이터 모델과 FaceBook에서 만든 Dynamo의 분산 모델을 기반으로  

Facebook에 의해 아파차 오픈소스로 공개된 분산 데이터 서비스입니다.

  • Hbase는 Cassandra와 마찬가지로 BigTable의 영향을 받은 대량 데이터를 효율적으로 다루기 위한 목적으로 개발된 NoSQL 데이터베이스입니다.

 

  • MongoDB는 10gen에서 개발된 높은 성능과 확장성을 가지고 있는 데이터베이스 입니다. 이는 C언어로 개발되었습니다.

MongoDB는 Document 지향 데이터베이스 시스템입니다.  JSON과 같은 동적 스키마 형태 사용에 따라 데이터 관계와 정해진 규격이 없습니다.

  • Redis는 “Remote Dictionary System”의 약자로 메모리 기반의 key – value 데이터베이스입니다.

다양한 데이터 구조체를 지원으로 Message Queue, Shared, momery, Remote Dictionary 용도로 사용 가능하며, 인스타그램, Line 메신져, StackOverflow, 등 여러 소셜 서비스에 사용되고 있습니다.

처리속도가 빠르며, 데이터 메모리가 +disk에 저장됩니다. 만료일을 지정하면 자동적으로 데이터가 삭제되며, 다양한 Data Type을 지원하는 장점이 있습니다.

 

NoSQL 장점

  • RDBMS에 비해 저렴한 비용으로 분산 처리와 병렬 처리가 가능.
  • 비정형 데이터 구조 설계로 설계 비용이 감소.
  • 관계형 데이터베스의 relation과 join 구조를 linking  과 embedded 로 구현하여 성능이 빠름.
  • Big Data 처리에 효과적.
    많은 서버로 확장이 가능.(데이터 중복이 생기더라도 테이블을 정규화 시키지 않아도 큰 테이블에 담아 저장)
  • 가변적인 구조로 데이터 저장이 가능.
  • Scale out 구조를 채택하여 서버 확장에 용이하며, 더 많은 데이터를 저장.
  • Document based(Schema-less)구조로 데이터 모델의 유연한 변화가 가능.
  • json 구조로 RDBMS 테이블 구조에 비해 데이터를 직관적으로 파악.
  • Auto Sharding을 지원.
    sharding 이란?
    단일의 논리적 데이터셋을 다수의 데이터베이스에 쪼개고 나누는 방법. 이런 방법으로 데이터베이스 시스템의 클러스터에서 큰 데이터셋을 저장하고 추가적인 요청을 처리할 수 있습니다. 샤딩은 데이터셋이 단일 데이터베이스에서 저장하기에 너무 클 때 필수적으로 사용됩니다.  이 부분은 다음 포스팅에서 자세히 알아볼게요.

 

NoSQL의 단점

  • 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능.
  • 많은 인덱스를 사용하려면 충분한 메모리가 필요. 인덱스 구조가 메모리에 저장.
  • 복잡한 join은 어려움(다양하고 복잡한 데이터 쿼리), document based 이기 때문에
  • NoSQL은 sharding 방식을 사용해서 큰 테이블을 여러 서버에 나누어 저장합니다.  fault tolerancy를 위해 데이터는 두개 이상의 서버에 저장됩니다. 어떤 데이터가 update되었을 때, NoSQL은 중복 저장된 서버들에 해당 update가 적용되기까지는 시간이 걸립니다.
  • RDBMS는 모든 서버를 update 되기전까지는 해당 데이터 또는 테이블에 lock을 걸어 읽기 금지를 합니다. 따라서 데이터에 대한 일관성이 보장됩니다. 하지만 NoSQL에서는 lock을 하게될 경우 느려지므로 RDBMS와 같은 lock을 하지 않습니다.
  • 데이터 일관성이 항상 보장되지 않음.
728x90