개요
데이터베이스 모델에 유연성을 주고, 보다 확장성이 높은 시스템을 주기 위한 시도로, 미리 정해진 구조가 없는 데이터베이스 시스템을 말한다. 이러한 시스템은 정확도보다는 확장 가능성 혹은 유연성에 보다 높은 효율을 보인다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다. 또, NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다.
이러한 데이터베이스 시스템은 범람하는 인터넷 상황에서 보다 효과적으로 정보를 저장하고 제공하기 위해서 페이스북, 구글 그리고 아마존과 같은 회사들에 의해 연구되는 것에서 시작하였다. (물론 No-SQL SQL이 아닌 DBMS)는 그전부터 존재했으나, 특별히 2009년 정보의 양이 폭팔적으로 증가하던 시기에 등장한 데이터베이스 시스템을 특별히 NoSQL로 지칭한다.
특징
- availability (finer control over availability)
- scale-out (easy for horizontal scaling to cluster machines)
- simplicity (simple in design and implmentation of
- non-relational
- flexible schema, or schema free
- replication support
- eventual consistency
- huge amount of data
NoSQL의 데이터 표현 방법
- Key-value store: key-value의 Dictionary로 데이터를 저장, 데이터 모델은 연관된 배열로 저장되며 (맵이나 딕션어리와 같은 자료구조 사용), 데이터는 키와 값으로 구현된다. 아마존의 Dynamo DB와 같은 경우가 이러한 구조로 표현되어 있다. 또한 Berkely DB, Oracle NoSQL, Riak, Redis와 같은 데이터 베이스 시스템이 key-value시스템으로 작동된다.
- Document store: 데이터가 단순히 JSON파일이나 XML과 같은 Document타입으로 저장된다. 이러한 표현형은 웹서비스에 매우 유리한 장접이 있기 때문에 대부분의 상용 웹사이트 구현에 사용된다. 또한 구현이 쉽다는 장점이 있다. MongoDB와 같은 데이터 베이스 시스템이 이러한 종류로 이루어지게 된다. MongoDB는 자유로운 schema를 바탕으로, 서로 다른 document가 공유된 필드를 가지고 있을 필요가 없을 정도로 flexible한 구현을 제공한다.
- Graph database: 모든 관계가 그래프로 표현됨
- Wide column store