{{위키데이터 속성 추적}}
'''NoSQL'''(원래 의미: non SQL 또는 non relational)<ref>http://nosql-database.org/ {{웨이백|url=http://nosql-database.org/ |date=20181226094304 }} "NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable"</ref> 데이터베이스는 전통적인 [[관계형 데이터베이스]] 보다 덜 제한적인 [[일관성 모델]]을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, [[확장성|수평적 확장성]], 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 [[스루풋]]과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 [[빅데이터]]와 [[실시간 웹]] 애플리케이션의 상업적 이용에 널리 쓰인다. 또, NoSQL 시스템은 [[SQL]] 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다.<ref>{{웹 인용|url=http://searchdatamanagement.techtarget.com/definition/NoSQL-Not-Only-SQL|title=NoSQL (Not Only SQL)|quote=NoSQL database, also called Not Only SQL}}</ref><ref>{{웹 인용| url = http://martinfowler.com/bliki/NosqlDefinition.html | title = NosqlDefinition | first = Martin | last = Fowler | authorlink = Martin Fowler | quote = many advocates of NoSQL say that it does not mean a "no" to SQL, rather it means Not Only SQL }}</ref>

이러한 접근의 동기는 다음을 포함한다: 설계의 단순성, 머신들의 [[클러스터 컴퓨팅|클러스터]]에 대한 더 단순한 [[확장성|수평 확장]](관계형 데이터베이스의 문제),<ref name="leavitt">{{저널 인용|first=Neal |last=Leavitt |title=Will NoSQL Databases Live Up to Their Promise? |journal=[[IEEE Computer]] |year=2010 |url=http://www.leavcom.com/pdf/NoSQL.pdf}}</ref> 이용성에 대한 더 세밀한 통제. NoSQL 데이터베이스에 의해 사용되는 자료 구조(예: 키-값, 와이드 컬럼, 그래프, 도큐먼트)들은 관계형 데이터베이스에서 기본적으로 사용되는 것들과는 다르며 일부 작업들은 NoSQL에서 속도가 더 빠른 편이다. 주어진 NoSQL 데이터베이스의 특정한 적합 여부는 해결해야 하는 문제에 따라 다르다. NoSQL 데이터베이스에 쓰이는 자료 구조들은 관계형 데이터베이스 테이블보다 "더 유연한" 것으로 간주되기도 한다.<ref name=":1">{{웹 인용|last=Vogels |first=Werner |url=http://www.allthingsdistributed.com/2012/01/amazon-dynamodb.html |title=Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications |publisher=All Things Distributed |date=2012-01-18 |accessdate=2017-03-06}}</ref>

수많은 NoSQL 스토어들은 이용성, 파티션 내구성, 속도의 선호로 ([[CAP 정리]] 측면에서) [[일관성]]을 타협한다. NoSQL 스토어를 채용하는 데 생기는 장벽에는 저급의 쿼리 언어의 사용(SQL 사용 대신. 예: 테이블을 경유하여 애드혹 조인-join을 수행하는 기능이 부족), 표준화된 인터페이스의 부족, 기존 관계형 데이터베이스의 상당한 개선이 포함된다.<ref>{{웹 인용
| url         = http://www.journalofcloudcomputing.com/content/pdf/2192-113X-2-22.pdf
| title       = Data management in cloud environments: NoSQL and NewSQL data stores
| first1 = K. | last1 = Grolinger | first2 = W. A. | last2 = Higashino | first3 = A. | last3 = Tiwari | first4 = M. A. M. | last4 = Capretz
| date = 2013
| publisher   = Aira, Springer
| accessdate  = 8 Jan 2014
}}</ref>
대부분의 NoSQL 스토어는 진정한 [[ACID]] 트랜잭션이 결여되어 있으나 [[마크로직]], [[에어로스파이크 데이터베이스|에어로스파이크]], 페어컴(FairCom) [[c-treeACE]], 구글 [[스패너 (데이터베이스)|스패너]](기술적으로 [[NewSQL]] 데이터베이스이긴 하지만), Symas [[Lightning Memory-Mapped Database|LMDB]], [[OrientDB]] 등의 일부 데이터베이스들은 이를 염두에 두고 설계하였다.

그 대신, 대부분의 NoSQL 데이터베이스들은 "궁극적인 일관성" 개념을 제공함으로써 데이터베이스의 변경사항이 모든 노드에 "궁극적으로"(일반적으로 밀리초 내) 전파되므로 데이터에 대한 모든 쿼리들이 즉각 업데이트된 데이터를 반환하지 않을 수 있고 정확하지 않은 데이터를 읽는 결과가 발생할 수 있는데 이 문제를 스테일 리드(stale read)라고 부른다.<ref>{{웹 인용|url=https://aphyr.com/posts/322-call-me-maybe-mongodb-stale-reads |title=Jepsen: MongoDB stale reads |website=Aphyr.com |date=2015-04-20 |accessdate=2017-03-06}}</ref> 게다가 일부 NoSQL 시스템들은 손실된 쓰기(write)와 기타 형태의 [[데이터 손실]]을 보이는 경우도 있다.<ref>{{웹 인용|author= |url=http://www.slideshare.net/MartinZapletal/zapletal-martinlargevolumedataanalytics |title=Large volume data analysis on the Typesafe Reactive Platform |website=Slideshare.net |date= |accessdate=2017-03-06}}</ref> 일부 NoSQL 시스템들은 [[로그 선행 기입]]과 같은 개념들을 제공하여 데이터 손실을 막는다.<ref>{{웹 인용|last=Fowler |first=Adam |url=http://www.dummies.com/how-to/content/10-nosql-misconceptions.html |title=10 NoSQL Misconceptions |website=Dummies.com |date= |accessdate=2017-03-06}}</ref> 여러 데이터베이스를 거치는 [[분산 트랜잭션 처리]]의 경우 데이터 일관성은 NoSQL과 관계형 데이터베이스에게 훨씬 더 큰 도전이 된다. 현행의 관계형 데이터베이스들 조차도 데이터베이스 스팬을 위한 참조 무결성 제약(referential integrity constraint)을 허용하지 않는다.<ref>{{웹 인용|url=https://iggyfernandez.wordpress.com/2013/07/28/no-to-sql-and-no-to-nosql/ |title=No! to SQL and No! to NoSQL &#124; So Many Oracle Manuals, So Little Time |website=Iggyfernandez.wordpress.com |date= |accessdate=2017-03-06}}</ref> 분산 트랜잭션 처리를 위해 [[ACID]] 트랜잭션과 [[X/Open XA]] 표준을 모두 준수하는 시스템들도 일부 있다.

== 역사 ==
[[파일:NoSQL early schema 2009.jpg|섬네일|NoSQL 이니셔티브의 최초의 시각적 표현.<ref name="msjavan">{{콘퍼런스 인용
| url = https://link.springer.com/chapter/10.1007%2F978-90-481-3658-2_28?LI=true
| title = Multi Dimensional and Flexible Model for Databases
| last1 = Sargolzaei Javan
| first1 = Morteza
| last2 = Mohanna
| first2 = Farahnaz
| date = 2009
| publisher = Springer
| book-title = Innovations and Advances in Computer Sciences and Engineering
| pages = 159-164
}}</ref>]]
카를로 스트로찌(Carlo Strozzi)는 1998년 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 오픈 소스 관계형 데이터베이스를 ''NoSQL''이라고 명명했다.<ref name=":0">{{웹 인용
| url         = http://publications.lib.chalmers.se/records/fulltext/123839.pdf
| 제목       = 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
| first       = Adam
| last        = Lith
| author2   = Jakob Mattson
| year        = 2010
| publisher   = Department of Computer Science and Engineering, Chalmers University of Technology
| location    = Göteborg
| page        = 70
| format      = PDF
| accessdate  = 12 May 2011
| quote       = 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[...]
}}</ref>
스트로찌는 현재의 NoSQL 운동이 “전반적인 관계형 모델에서 점차 멀어지고 있으므로” NoREL로 부르는 것이 더 적절하다고 언급했다.<ref>{{웹 인용|url=http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/Home%20Page |제목=NoSQL Relational Database Management System: Home Page |publisher=Strozzi.it |date=2 October 2007 |accessdate=29 March 2010}}</ref>

2009년 초에 [[라스트 FM]]의 요한 오스칼손(Johan Oskarsson)이 오픈 소스 [[분산 데이터베이스]]를 논하기 위한 미트업 행사를 조직하면서, 이와 같은 데이터베이스를 NoSQL이라고 불렀다.<ref>{{웹 인용 |url= http://blog.sym-link.com/2009/05/12/nosql_2009.html |제목= NoSQL 2009 |publisher= Blog.sym-link.com |date= 12 May 2009 |accessdate= 29 March 2010 |보존url= https://web.archive.org/web/20110716174012/http://blog.sym-link.com/2009/05/12/nosql_2009.html |보존날짜= 2011-07-16 |url-status= dead }}</ref> 고전적인 관계형 데이터베이스 시스템의 주요 특성을 보장하는 [[ACID]] 제공을 주로 시도하지 않은 수많은 비관계형, 분산 데이터 자료 공간의 등장에 따라 이 이름이 사용되었다.<ref>{{웹 인용 |url= http://databases.about.com/od/specificproducts/a/acid.htm |제목= The ACID Model |author= Mike Chapple |확인날짜= 2013-10-27 |archive-date= 2016-12-29 |archive-url= https://web.archive.org/web/20161229001436/http://databases.about.com/od/specificproducts/a/acid.htm |url-status=  }}</ref>

== NoSQL 데이터베이스의 예 ==
NoSQL 데이터베이스를 분류하는 접근 방식은 분류와 하위 분류와 함께 다양하다. 다양한 접근 방식으로 인해 비관계형 데이터베이스를 포괄적으로 파악하는 데에는 어려움이 있다. 그럼에도 동의할만한 수준의 기본적인 분류는 데이터 모델에 기반을 둔다. 이 가운데 몇 가지와 이들이 가진 프로토타입은 다음과 같다:
* [[와이드 컬럼 스토어]]: [[H베이스]], [[아파치 아큐물로|아큐물로]], [[아파치 카산드라|카산드라]]
* 도큐먼트: [[몽고DB]], [[카우치베이스]]
* [[키-값 데이터베이스|키 값]]: 다이나모DB<ref name=":1" />, [[리악]], [[레디스]], [[MemcacheDB|캐시]], [[프로젝트 볼드모트]]
* [[그래프 데이터베이스|그래프]]: [[Neo4J]], [[비트나인|AgensGraph]], [[알레그로그래프]], [[버투오소 유니버설 서버|버투오소]]

스티븐 옌은 자신의 블로그의 글 "NoSQL is a Horseless Carriage"에서 NoSQL 데이터베이스들을 다음과 같이 분류했다.<ref>[http://highscalability.com/blog/2009/11/5/a-yes-for-a-nosql-taxonomy.html A Yes for a NoSQL Taxonomy]. High Scalability (2009-11-05). Retrieved on 2013-09-18.</ref>
{| style="text-align: left;" class="wikitable sortable"
|-
! 용어 !! 연관 데이터베이스
|-
| KV Store || Keyspace, Flare, SchemaFree, RAMCloud, Oracle NoSQL Database (OnDB)
|-
| KV Store - Eventually consistent || Dynamo, [[:en:Voldemort (distributed data store)|Voldemort]], Dynomite, SubRecord, Mo8onDb, DovetailDB
|-
| KV Store - Hierarchical || GT.m, Cache
|-
| KV Store - Ordered || TokyoTyrant, Lightcloud, NMDB, Luxio, MemcacheDB, Actord
|-
| KV Cache || [[Memcached]], Repcached, Coherence, [[Hazelcast]], Infinispan, EXtremeScale, JBossCache, Velocity, Terracotta
|-
| Tuple Store || Gigaspaces, Coord, Apache River
|-
| Object Database || ZopeDB, DB40, Shoal
|-
| Document Store || CouchDB, Cloudant, [[Couchbase]], [[MongoDB]], Jackrabbit, XML-Databases, ThruDB, CloudKit, Prsevere, Riak-Basho, Scalaris
|-
| Wide Columnar Store || BigTable, HBase, [[Apache Cassandra]], [[하이퍼테이블|Hypertable]], KAI, OpenNeptune, Qbase, KDI
|}

== 성능 ==
벤 스코필드는 여러 유형의 NoSQL 데이터베이스의 등급을 다음과 같이 평가했다:<ref>{{웹 인용|url=http://www.slideshare.net/bscofield/nosql-codemash-2010|title=NoSQL - Death to Relational Databases(?)|last=Scofield|first=Ben |date=2010-01-14|accessdate=2014-06-26}}</ref>

{| style="text-align: left;" class="wikitable sortable"
|-
! 데이터 모델 !! 성능 !! 확장성 !! 유연성 !! 복잡성 !! 기능
|-
| 키-값 스토어 ||  높음 || 높음 || 높음 || 없음 || 가변적 (없음)
|-
| 컬럼 지향 스토어 || 높음 || 높음 || 준수 || 낮음 || 최소
|-
| 도큐먼트 지향 스토어 || 높음 || 가변적 (높음) || 높음 || 낮음 || 가변적 (낮음)
|-
| 그래프 데이터베이스 || 가변적 || 가변적 || 높음 || 높음 || [[그래프 이론]]
|-
| 관계형 데이터베이스 || 가변적 || 가변적 || 낮음 || 준수 || [[관계대수]]
|}

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

== ACID 및 JOIN 지원 ==

[[ACID]] 속성(원자성, 일관성, 고립성, 지속성) 또는 [[JOIN]] 동작을 지원하는 것으로 문서에 표현되어 있는 경우 지원으로 표기된다. 그러나 이 기준에는 대부분의 SQL 데이터베이스와 비슷한 방식으로 완전히 지원할 필요는 없다.
{| class="wikitable"
|-
! 데이터베이스 !! ACID !! JOIN
|-
| [[Aerospike]] || {{Yes}} || {{No}}
|-
| [[Apache Ignite]] || {{Yes}} || {{Yes}}
|-
| [[ArangoDB]] || {{Yes}} || {{Yes}}
|-
| [[Amazon DynamoDB]] || {{Yes}} || {{No}}
|-
| [[Couchbase]] || {{Yes}} || {{Yes}}
|-
| [[CouchDB]] || {{Yes}} || {{Yes}}
|-
| [[IBM Db2]] || {{Yes}} || {{Yes}}
|-
| [[InfinityDB]] || {{Yes}} || {{No}}
|-
| [[Lightning Memory-Mapped Database|LMDB]] || {{Yes}} || {{No}}
|-
| [[MarkLogic]] || {{Yes}} || {{Yes}}{{refn|name=MarkLogicJoins|group=nb|Joins do not necessarily apply to document databases, but MarkLogic can do joins using semantics.<ref>{{웹 인용|url=http://www.gennet.com/big-data/cant-joins-marklogic-just-matter-semantics/ |title=Can't do joins with MarkLogic? It's just a matter of Semantics! - General Networks |website=Gennet.com |access-date=2017-03-06 |archive-date=3 March 2017 |archive-url=https://web.archive.org/web/20170303200231/http://gennet.com/big-data/cant-joins-marklogic-just-matter-semantics/ |url-status=dead }}</ref>}}
|-
| [[MongoDB]] || {{Yes}} || {{Yes}}{{refn|name=MongoDBJoin|group=nb|MongoDB did not support joining from a sharded collection until version 5.1.<ref>{{웹 인용|url=https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#sharded-collection-restrictions |title=Sharded Collection Restrictions |website=docs.mongodb.com |access-date=2020-01-24}}</ref>}}
|-
| [[OrientDB]] || {{Yes}} || {{Yes}}{{refn|name=OrientDBJoin|group=nb|OrientDB can resolve 1:1 joins using links by storing direct links to foreign records.<ref>{{웹 인용|url=http://orientdb.com/docs/2.2.x/SQL.html#joins |title=SQL Reference · OrientDB Manual |website=OrientDB.com |access-date=2020-01-24}}</ref>}}
|}

{{각주|group=nb}}

== 같이 보기 ==
* [[CAP 정리]]
* [[트리플스토어]]

== 참조 ==
<references />

== 추가 문헌 ==
* {{서적 인용
 | author = Pramod Sadalage and [[Martin Fowler]]
 | year = 2012
 | 제목 = NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
 | publisher = Addison-Wesley
 | isbn = 0-321-82662-0
}}
* {{웹 인용|author=Christof Strauch|year=2012|제목=NoSQL Databases|url=http://www.christof-strauch.de/nosqldbs.pdf}}
* {{웹 인용|author=Moniruzzaman AB,  Hossain SA|year=2013|제목=NoSQL Database: New Era of Databases for Big data Analytics - Classification, Characteristics and Comparison|url=http://arxiv.org/abs/1307.0191}}
* {{저널 인용|author=Kai Orend|year=2013|제목=Analysis and Classification of NoSQL Databases and Evaluation of their Ability to Replace an Object-relational Persistence Layer|url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.184.483&rep=rep1&type=pdf}}
* {{웹 인용|author=Ganesh Krishnan, Sarang Kulkarni, Dharmesh Kirit Dadbhawala|제목=Method and system for versioned sharing, consolidating and reporting information|url=https://www.google.com/patents/US7383272?pg=PA1&dq=ganesh+krishnan&hl=en&sa=X}}

== 외부 링크 ==
* {{웹 인용|url=http://www.christof-strauch.de/nosqldbs.pdf|제목=NoSQL whitepaper|author=Christoph Strauch|publisher=Hochschule der Medien, Stuttgart}}
* {{웹 인용|author=Martin Fowler|authorlink=Martin Fowler|url=http://martinfowler.com/nosql.html|제목=NoSQL Guide}}
* {{웹 인용|url=http://nosql-database.org/|제목=NoSQL database List|author=Stefan Edlich|확인날짜=2013-10-27|archive-date=2018-12-26|archive-url=https://web.archive.org/web/20181226094304/http://nosql-database.org/|url-status=}}
* {{웹 인용|year=2010|url=http://www.infoq.com/articles/graph-nosql-neo4j|제목=Graph Databases, NOSQL and Neo4j|author=Peter Neubauer}}
* {{웹 인용|year=2012|url=http://www.networkworld.com/news/tech/2012/102212-nosql-263595.html|제목=A vendor-independent comparison of NoSQL databases: Cassandra, HBase, MongoDB, Riak|author=Sergey Bushik|publisher=NetworkWorld|확인날짜=2013-10-27|archive-date=2014-05-28|archive-url=https://web.archive.org/web/20140528110238/http://www.networkworld.com/news/tech/2012/102212-nosql-263595.html|url-status=dead}}

{{컴퓨터 과학}}

{{전거 통제}}

[[분류:NoSQL| ]]
[[분류:데이터베이스 관리 시스템]]
[[분류:데이터 관리]]