본문으로 이동

NoSQL

위키백과, 우리 모두의 백과사전.

NoSQL(원래 의미: non SQL 또는 non relational)[1] 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, 수평적 확장성, 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다. 또, NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다.[2][3]

이러한 접근의 동기는 다음을 포함한다: 설계의 단순성, 머신들의 클러스터에 대한 더 단순한 수평 확장(관계형 데이터베이스의 문제),[4] 이용성에 대한 더 세밀한 통제. NoSQL 데이터베이스에 의해 사용되는 자료 구조(예: 키-값, 와이드 컬럼, 그래프, 도큐먼트)들은 관계형 데이터베이스에서 기본적으로 사용되는 것들과는 다르며 일부 작업들은 NoSQL에서 속도가 더 빠른 편이다. 주어진 NoSQL 데이터베이스의 특정한 적합 여부는 해결해야 하는 문제에 따라 다르다. NoSQL 데이터베이스에 쓰이는 자료 구조들은 관계형 데이터베이스 테이블보다 "더 유연한" 것으로 간주되기도 한다.[5]

수많은 NoSQL 스토어들은 이용성, 파티션 내구성, 속도의 선호로 (CAP 정리 측면에서) 일관성을 타협한다. NoSQL 스토어를 채용하는 데 생기는 장벽에는 저급의 쿼리 언어의 사용(SQL 사용 대신. 예: 테이블을 경유하여 애드혹 조인-join을 수행하는 기능이 부족), 표준화된 인터페이스의 부족, 기존 관계형 데이터베이스의 상당한 개선이 포함된다.[6] 대부분의 NoSQL 스토어는 진정한 ACID 트랜잭션이 결여되어 있으나 마크로직, 에어로스파이크, 페어컴(FairCom) c-treeACE, 구글 스패너(기술적으로 NewSQL 데이터베이스이긴 하지만), Symas LMDB, OrientDB 등의 일부 데이터베이스들은 이를 염두에 두고 설계하였다.

그 대신, 대부분의 NoSQL 데이터베이스들은 "궁극적인 일관성" 개념을 제공함으로써 데이터베이스의 변경사항이 모든 노드에 "궁극적으로"(일반적으로 밀리초 내) 전파되므로 데이터에 대한 모든 쿼리들이 즉각 업데이트된 데이터를 반환하지 않을 수 있고 정확하지 않은 데이터를 읽는 결과가 발생할 수 있는데 이 문제를 스테일 리드(stale read)라고 부른다.[7] 게다가 일부 NoSQL 시스템들은 손실된 쓰기(write)와 기타 형태의 데이터 손실을 보이는 경우도 있다.[8] 일부 NoSQL 시스템들은 로그 선행 기입과 같은 개념들을 제공하여 데이터 손실을 막는다.[9] 여러 데이터베이스를 거치는 분산 트랜잭션 처리의 경우 데이터 일관성은 NoSQL과 관계형 데이터베이스에게 훨씬 더 큰 도전이 된다. 현행의 관계형 데이터베이스들 조차도 데이터베이스 스팬을 위한 참조 무결성 제약(referential integrity constraint)을 허용하지 않는다.[10] 분산 트랜잭션 처리를 위해 ACID 트랜잭션과 X/Open XA 표준을 모두 준수하는 시스템들도 일부 있다.

역사

[편집]
NoSQL 이니셔티브의 최초의 시각적 표현.[11]

카를로 스트로찌(Carlo Strozzi)는 1998년 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 오픈 소스 관계형 데이터베이스를 NoSQL이라고 명명했다.[12] 스트로찌는 현재의 NoSQL 운동이 “전반적인 관계형 모델에서 점차 멀어지고 있으므로” NoREL로 부르는 것이 더 적절하다고 언급했다.[13]

2009년 초에 라스트 FM의 요한 오스칼손(Johan Oskarsson)이 오픈 소스 분산 데이터베이스를 논하기 위한 미트업 행사를 조직하면서, 이와 같은 데이터베이스를 NoSQL이라고 불렀다.[14] 고전적인 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID 제공을 주로 시도하지 않은 수많은 비관계형, 분산 데이터 자료 공간의 등장에 따라 이 이름이 사용되었다.[15]

NoSQL 데이터베이스의 예

[편집]

NoSQL 데이터베이스를 분류하는 접근 방식은 분류와 하위 분류와 함께 다양하다. 다양한 접근 방식으로 인해 비관계형 데이터베이스를 포괄적으로 파악하는 데에는 어려움이 있다. 그럼에도 동의할만한 수준의 기본적인 분류는 데이터 모델에 기반을 둔다. 이 가운데 몇 가지와 이들이 가진 프로토타입은 다음과 같다:

스티븐 옌은 자신의 블로그의 글 "NoSQL is a Horseless Carriage"에서 NoSQL 데이터베이스들을 다음과 같이 분류했다.[16]

용어연관 데이터베이스
KV StoreKeyspace, Flare, SchemaFree, RAMCloud, Oracle NoSQL Database (OnDB)
KV Store - Eventually consistentDynamo, Voldemort, Dynomite, SubRecord, Mo8onDb, DovetailDB
KV Store - HierarchicalGT.m, Cache
KV Store - OrderedTokyoTyrant, Lightcloud, NMDB, Luxio, MemcacheDB, Actord
KV CacheMemcached, Repcached, Coherence, Hazelcast, Infinispan, EXtremeScale, JBossCache, Velocity, Terracotta
Tuple StoreGigaspaces, Coord, Apache River
Object DatabaseZopeDB, DB40, Shoal
Document StoreCouchDB, Cloudant, Couchbase, MongoDB, Jackrabbit, XML-Databases, ThruDB, CloudKit, Prsevere, Riak-Basho, Scalaris
Wide Columnar StoreBigTable, HBase, Apache Cassandra, Hypertable, KAI, OpenNeptune, Qbase, KDI

성능

[편집]

벤 스코필드는 여러 유형의 NoSQL 데이터베이스의 등급을 다음과 같이 평가했다:[17]

데이터 모델성능확장성유연성복잡성기능
키-값 스토어높음높음높음없음가변적 (없음)
컬럼 지향 스토어높음높음준수낮음최소
도큐먼트 지향 스토어높음가변적 (높음)높음낮음가변적 (낮음)
그래프 데이터베이스가변적가변적높음높음그래프 이론
관계형 데이터베이스가변적가변적낮음준수관계대수

성능과 확장성 비교는 종종 YCSB 벤치마크를 통해 이루어진다.

ACID 및 JOIN 지원

[편집]

ACID 속성(원자성, 일관성, 고립성, 지속성) 또는 JOIN 동작을 지원하는 것으로 문서에 표현되어 있는 경우 지원으로 표기된다. 그러나 이 기준에는 대부분의 SQL 데이터베이스와 비슷한 방식으로 완전히 지원할 필요는 없다.

데이터베이스ACIDJOIN
Aerospike예아니요
Apache Ignite예예
ArangoDB예예
Amazon DynamoDB예아니요
Couchbase예예
CouchDB예예
IBM Db2예예
InfinityDB예아니요
LMDB예아니요
MarkLogic예예[nb 1]
MongoDB예예[nb 2]
OrientDB예예[nb 3]
  1. ↑ Joins do not necessarily apply to document databases, but MarkLogic can do joins using semantics.[18]
  2. ↑ MongoDB did not support joining from a sharded collection until version 5.1.[19]
  3. ↑ OrientDB can resolve 1:1 joins using links by storing direct links to foreign records.[20]

같이 보기

[편집]

참조

[편집]
  1. ↑ http://nosql-database.org/ 보관됨 2018-12-26 - 웨이백 머신 "NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable"
  2. ↑ “NoSQL (Not Only SQL)”. NoSQL database, also called Not Only SQL
  3. ↑ Fowler, Martin. “NosqlDefinition”. many advocates of NoSQL say that it does not mean a "no" to SQL, rather it means Not Only SQL
  4. ↑ Leavitt, Neal (2010). “Will NoSQL Databases Live Up to Their Promise?” (PDF). 《IEEE Computer》.
  5. 1 2 Vogels, Werner (2012년 1월 18일). “Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications”. All Things Distributed. 2017년 3월 6일에 확인함.
  6. ↑ Grolinger, K.; Higashino, W. A.; Tiwari, A.; Capretz, M. A. M. (2013). “Data management in cloud environments: NoSQL and NewSQL data stores” (PDF). Aira, Springer. 2014년 1월 9일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 8일에 확인함.
  7. ↑ “Jepsen: MongoDB stale reads”. 《Aphyr.com》. 2015년 4월 20일. 2017년 3월 6일에 확인함.
  8. ↑ “Large volume data analysis on the Typesafe Reactive Platform”. 《Slideshare.net》. 2017년 3월 6일에 확인함.
  9. ↑ Fowler, Adam. “10 NoSQL Misconceptions”. 《Dummies.com》. 2016년 7월 31일에 원본 문서에서 보존된 문서. 2017년 3월 6일에 확인함.
  10. ↑ “No! to SQL and No! to NoSQL | So Many Oracle Manuals, So Little Time”. 《Iggyfernandez.wordpress.com》. 2017년 3월 6일에 확인함.
  11. ↑ Sargolzaei Javan, Morteza; Mohanna, Farahnaz (2009). 〈Multi Dimensional and Flexible Model for Databases〉. 《Innovations and Advances in Computer Sciences and Engineering》. Springer. 159–164쪽.
  12. ↑ Lith, Adam; Jakob Mattson (2010). “Investigating storage solutions for large data: A comparison of well performing and scalable data storage solutions for real time extraction and batch insertion of data” (PDF). Göteborg: Department of Computer Science and Engineering, Chalmers University of Technology. 70쪽. 2011년 5월 12일에 확인함. Carlo Strozzi first used the term NoSQL in 1998 as a name for his open source relational database that did not offer a SQL interface[...]
  13. ↑ “NoSQL Relational Database Management System: Home Page”. Strozzi.it. 2007년 10월 2일. 2010년 3월 29일에 확인함.
  14. ↑ “NoSQL 2009”. Blog.sym-link.com. 2009년 5월 12일. 2011년 7월 16일에 원본 문서에서 보존된 문서. 2010년 3월 29일에 확인함.
  15. ↑ Mike Chapple. “The ACID Model”. 2016년 12월 29일에 원본 문서에서 보존된 문서. 2013년 10월 27일에 확인함.
  16. ↑ A Yes for a NoSQL Taxonomy. High Scalability (2009-11-05). Retrieved on 2013-09-18.
  17. ↑ Scofield, Ben (2010년 1월 14일). “NoSQL - Death to Relational Databases(?)”. 2014년 6월 26일에 확인함.
  18. ↑ “Can't do joins with MarkLogic? It's just a matter of Semantics! - General Networks”. 《Gennet.com》. 2017년 3월 3일에 원본 문서에서 보존된 문서. 2017년 3월 6일에 확인함.
  19. ↑ “Sharded Collection Restrictions”. 《docs.mongodb.com》. 2020년 1월 24일에 확인함.
  20. ↑ “SQL Reference · OrientDB Manual”. 《OrientDB.com》. 2020년 1월 24일에 확인함.

추가 문헌

[편집]

외부 링크

[편집]