NoSQL

NoSQL

NoSQL(원래 "비 SQL" 또는 "비관계"[1]를 지칭함) 데이터베이스관계형 데이터베이스에서 사용되는 표 형식 관계 이외의 방법으로 모델링된 데이터를 저장 및 검색하는 메커니즘을 제공합니다.이러한 데이터베이스는 1960년대 후반부터 존재해 왔지만, "NoSQL"이라는 이름은 Web 2.0 [3][4]회사의 필요에 의해 촉발된 21세기 [2]초에야 만들어졌다.NoSQL 데이터베이스는 빅데이터실시간 [5] 애플리케이션에서 점점 더 많이 사용되고 있습니다.NoSQL 시스템은 SQL과 유사한 쿼리 언어를 지원하거나 다중 언어 영구 [6][7]아키텍처에서 SQL 데이터베이스와 나란히 배치될 수 있음을 강조하기 위해 SQL뿐만 아니라 SQL로도 불리기도 합니다.

이 접근방식의 동기는 설계의 단순성, 머신 클러스터로의 단순 수평 확장(관계형 데이터베이스의 [2]문제), 가용성을 보다 세밀하게 제어하고 객체-관계형 임피던스 [8]불일치를 제한하는 것입니다.NoSQL 데이터베이스에서 사용되는 데이터 구조(예: 키-값 쌍, 넓은 열, 그래프 또는 문서)는 관계형 데이터베이스에서 기본적으로 사용되는 것과 달라 NoSQL에서 일부 작업을 더 빠르게 수행할 수 있습니다.특정 NoSQL 데이터베이스의 적합성은 해결해야 하는 문제에 따라 달라집니다.때때로 NoSQL 데이터베이스에서 사용되는 데이터 구조는 관계형 데이터베이스 [9]테이블보다 "유연성"으로 보입니다.

많은 NoSQL 저장소는 가용성, 파티션 허용 범위 및 속도를 위해 일관성(CAP 정리)을 훼손합니다.NoSQL 스토어 채택의 장벽으로는 SQL 대신 낮은 수준의 쿼리 언어 사용, 테이블 전체에서 임시 결합을 수행하는 기능 부족, 표준화된 인터페이스 부족, 기존 관계형 [10]데이터베이스에 대한 막대한 이전 투자 등이 있습니다.NoSQL 스토어에는 진정한 ACID 트랜잭션이 없습니다.다만, 몇개의 데이타베이스에 의해서 설계의 중심이 되고 있습니다.

대신 대부분의 NoSQL 데이터베이스는 데이터베이스 변경이 모든 노드에 "결국" (일반적으로 밀리초 이내) 전파되는 "이벤트 일관성" 개념을 제공합니다. 따라서 데이터에 대한 쿼리는 업데이트된 데이터를 즉시 반환하지 않거나 잘못된 데이터 읽기(오래된 읽기)[11]를 초래할 수 있습니다.또한 일부 NoSQL 시스템에서는 쓰기 손실 및 기타 데이터 손실이 [12]발생할 수 있습니다.일부 NoSQL 시스템은 데이터 [13]손실을 방지하기 위해 미리 쓰기 로깅과 같은 개념을 제공합니다.여러 데이터베이스에 분산 트랜잭션 처리의 경우 데이터 일관성은 NoSQL 데이터베이스와 관계형 데이터베이스 모두에 훨씬 더 큰 문제가 됩니다.관계형 데이터베이스는 "참조 무결성 제약 조건을 데이터베이스에 적용할 수 없습니다."[14]분산 트랜잭션 [15]처리를 위해 ACID 트랜잭션과 X/Open XA 표준을 모두 유지하는 시스템은 거의 없습니다.인터랙티브 관계형 데이터베이스는 공통 [16]기능으로서 컨포메이션 릴레이 분석 기술을 공유합니다.대부분의 운영 [17]체제에서 NoSQL 서비스에 액세스할 수 있도록 시멘틱 가상화 프로토콜을 사용하여 인터페이스 환경 내의 한계를 극복합니다.

역사

NoSQL이라는 용어는 1998년 Carlo Strozi에 의해 표준 SQL(Structured Query Language) 인터페이스를 공개하지 않은 경량 Strozi NoSQL 오픈 소스 관계형 데이터베이스의 이름을 짓기 위해 사용되었지만 여전히 [18]관계형입니다.그의 NoSQL RDBMS는 2009년 경의 일반적인 NoSQL 데이터베이스 개념과는 다릅니다.Strozzi는 현재의 NoSQL 움직임이 "관계형 모델에서 완전히 분리되기 때문에" "관계형이 아님"을 의미하는 "NoREL"[19]이라고 더 적절하게 불렸어야 했다고 제안합니다.

당시 Last.fm의 개발자인 Johan Oskarsson은 2009년 초에 "오픈 소스 분산형 비관계형 데이터베이스"[20]에 대해 논의하기 위한 이벤트를 개최하면서 NoSQL이라는 용어를 다시 도입했습니다.이 이름은 구글Bigtable/MapReduce와 아마존의 DynamoDB의 오픈 소스 클론을 포함하여 점점 더 많은 비관계형 분산형 데이터 저장소의 출현을 나타내기 위해 시도되었습니다.

유형 및 예시

NoSQL 데이터베이스를 분류하는 방법에는 여러 가지 범주와 하위 범주가 있으며, 그 중 일부는 겹칩니다.다음은 데이터 모델에 따른 비완전적인 분류입니다.[21] 예를 들어 다음과 같습니다.

유형 이 유형의 주목할 만한 예
키 값 캐시 Apache Ignite, Couchbase, 일관성, eXtreme Scale, 헤이즐캐스트, Infinispan, Memcached, Redis, Velocity
키-값 저장소 Azure Cosmos DB, ArangoDB, Amazon DynamoDB, Airospike, Couchbase
키-값 저장소(결국 일치) Azure Cosmos DB, Oracle NoSQL 데이터베이스, Riak, Voldemort
키-값 저장소(주문) FoundationDB, InfinityDB, LMDB, MemcacheDB
투플 스토어 Apache River, GigaSpaces, Tarantool, TIBCO ActiveSpaces, OpenLink Virtuoso
트리플스토어 AllegroGraph, MarkLogic, Ontotext-OWLIM, Oracle NoSQL 데이터베이스, Profium Sense, Virtuoso Universal Server
오브젝트 데이터베이스 Objectivity/DB, Perst, ZopeDB, db4o, GemStone/S, InterSystems Caché, JADE, ObjectDatabase+, ObjectDB, ObjectStore, ODABA, Realm, OpenLink Virtuoso, Versant Object Database, ZODB
문서 저장소 Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, RavenDB, Qizx, ReconDB, Elasticsearch, OrientDB
와이드 컬럼 스토어 Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google 클라우드 데이터스토어, HBase, Hypertable, SilaDB
네이티브 다중 모델 데이터베이스 ArangoDB, Azure Cosmos DB, OrientDB, MarkLogic, Apache [22][23]Ignite, Couchbase, FoundationDB, MarkLogic, Oracle 데이터베이스
그래프 데이터베이스 Azure Cosmos DB, AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, Orient DB, Virtuoso
다중값 데이터베이스 D3 Pick 데이터베이스, 확장 스토리지 엔진(ESE/NT), InfinityDB, InterSystems Caché, jBASE Pick 데이터베이스, mvBase Rocket Software, mvEnterprise Rocket Software, Northgate Information Solutions Reality(원래 Pick/M 데이터베이스), OpenQM, 공개 소프트웨어t U2

키-값 저장소

KV(Key-Value) 저장소는 기본 데이터 모델로 연관 배열(지도 또는 사전이라고도 함)을 사용합니다.이 모델에서 데이터는 키-값 쌍의 집합으로 표현되므로 가능한 각 키가 [24][25]집합에서 한 번에 나타납니다.

키-값 모델은 가장 단순하지 않은 데이터 모델 중 하나이며, 더 풍부한 데이터 모델이 종종 그 확장으로 구현됩니다.키-값 모델은 사전순으로 키를 유지하는 이산 순서 모델까지 확장할 수 있습니다.이 확장 기능은 선택적인 키 [26]범위를 효율적으로 가져올 수 있다는 점에서 계산 능력이 뛰어납니다.

키 값 저장소에서는 궁극적인 일관성부터 연속성까지 다양한 일관성 모델을 사용할 수 있습니다.일부 데이터베이스는 키 순서를 지원합니다.다양한 하드웨어 구현이 있으며 일부 사용자는 메모리(RAM)에 데이터를 저장하는 반면 다른 사용자는 솔리드 스테이트 드라이브(SSD) 또는 회전 디스크(HDD)에 데이터를 저장합니다.

문서 저장소

문서 저장소의 중심 개념은 "문서"의 개념입니다.이 정의에 대한 자세한 내용은 문서 지향 데이터베이스에 따라 다르지만, 모두 문서가 일부 표준 형식 또는 인코딩으로 데이터(또는 정보)를 캡슐화하고 인코딩한다고 가정합니다.사용되고 있는 인코딩에는 XML, YAMLJSON같은 바이너리 형식이 포함됩니다.문서는 해당 문서를 나타내는 고유 키를 통해 데이터베이스에서 주소 지정됩니다.문서 지향 데이터베이스의 또 다른 정의 특성은 내용을 기반으로 문서를 검색하는 API 또는 쿼리 언어입니다.

구현에 따라 문서의 구성 및/또는 그룹화 방법이 달라집니다.

  • 컬렉션
  • 태그
  • 표시되지 않는 메타데이터
  • 디렉토리 계층

관계형 데이터베이스와 비교하여 수집은 기록과 유사한 표 및 문서와 유사한 것으로 간주될 수 있다.단, 표 내의 모든 레코드는 동일한 필드 시퀀스를 가지지만 컬렉션 내의 문서는 완전히 다른 필드를 가질 수 있습니다.

그래프

그래프 데이터베이스는 유한한 수의 관계로 연결된 요소로 구성된 그래프로 잘 표현되는 데이터를 위해 설계되었습니다.데이터의 예로는 사회관계, 대중교통 연계, 로드맵, 네트워크 토폴로지 등이 있다.

그래프 데이터베이스 및 해당 쿼리 언어
이름. 언어 메모들
알레그로그래프 SPARQL RDF 트리플 스토어
아마존 해왕성 Gremlin, SPARQL 그래프 데이터베이스
아랑고DB AQL, JavaScript, 그래프품질 다중 모델 DBMS 문서, 그래프 데이터베이스 및 키 값 저장소
Azure Cosmos DB 그렘린 그래프 데이터베이스
DEX/Sparksee C++, Java, C#, Python 그래프 데이터베이스
플럭 데이터베이스 스칼라 그래프 데이터베이스
IBM DB2 SPARQL DB2 10에 RDF 트리플 스토어 추가
인피니트 그래프 자바 그래프 데이터베이스
야누스그래프 자바 그래프 데이터베이스
마크 로직 자바, JavaScript, SPARQL, XQuery 다중 모델 문서 데이터베이스 및 RDF 트리플 스토어
Neo4j 사이퍼 그래프 데이터베이스
OpenLink Virtuoso C++, C#, Java, SPARQL 미들웨어데이터베이스 엔진 하이브리드
오라클 SPARQL 1.1 11g에 RDF 트리플 스토어 추가
오리엔트 DB Java, SQL 다중 모델 문서 및 그래프 데이터베이스
오우 Java, SPARQL 1.1 RDF 트리플 스토어
Profium Sense Java, SPARQL RDF 트리플 스토어
Redis Graph 사이퍼 그래프 데이터베이스
Sqrrl 엔터프라이즈 자바 그래프 데이터베이스
종착륙장DB JavaScript, Python, 데이터로그 오픈 소스 RDF 트리플 스토어 및 문서[27] 스토어

성능

NoSQL 데이터베이스의 성능은 일반적으로 처리량 메트릭을 사용하여 평가되며, 이 메트릭은 초당 작업 수로 측정됩니다.성능 평가에서는 프로덕션 구성, 데이터베이스 매개 변수, 예상되는 데이터 볼륨 및 동시 사용자 워크로드와 같은 적절한 벤치마크에 유의해야 합니다.

Ben Scoffield는 다양한 범주의 NoSQL 데이터베이스를 [28]다음과 같이 평가했습니다.

데이터 모델 성능 확장성 유연성 복잡성 기능
키-값 저장소 높은 높은 높은 없음. 변수(없음)
컬럼 지향 스토어 높은 높은 적당한. 낮다 최소의
문서 지향 스토어 높은 변수(높음) 높은 낮다 변수(낮음)
그래프 데이터베이스 변수 변수 높은 높은 그래프 이론
릴레이셔널 데이터베이스 변수 변수 낮다 적당한. 관계 대수

퍼포먼스와 scalability의 비교는 가장 일반적으로 YCSB 벤치마크를 사용하여 이루어집니다.

관계 데이터 처리

대부분의 NoSQL 데이터베이스는 쿼리에서 조인하는 기능이 없기 때문에 일반적으로 데이터베이스 스키마를 다르게 설계해야 합니다.NoSQL 데이터베이스에서 관계형 데이터를 처리하는 데는 세 가지 주요 기술이 있습니다.(조인을 지원하는 NoSQL 데이터베이스의 Join 및 ACID Support 표를 참조하십시오).

다중 쿼리

하나의 쿼리로 모든 데이터를 검색하는 대신 원하는 데이터를 얻기 위해 여러 쿼리를 수행하는 것이 일반적입니다.NoSQL 쿼리는 기존 SQL 쿼리보다 빠른 경우가 많기 때문에 추가 쿼리의 비용은 허용할 수 있습니다.과도한 수의 쿼리가 필요한 경우 다른 두 가지 접근 방식 중 하나가 더 적합합니다.

캐싱, 레플리케이션 및 비정규화 데이터

외부 키만 저장하는 대신 모델의 데이터와 함께 실제 외부 값을 저장하는 것이 일반적입니다.예를 들어 각 블로그 댓글에는 사용자 ID 외에 사용자 이름이 포함되어 있기 때문에 다른 검색 없이 사용자 이름에 쉽게 액세스할 수 있습니다.다만, 유저명이 변경되면, 데이타베이스내의 많은 장소에서 변경할 필요가 있습니다.따라서 이 접근법은 읽기 횟수가 [29]쓰기보다 훨씬 많을 때 더 잘 작동합니다.

데이터 중첩

MongoDB와 같은 문서 데이터베이스에서는 더 적은 수의 컬렉션에 더 많은 데이터를 저장하는 것이 일반적입니다.예를 들어, 블로그 응용프로그램에서는 단일 검색으로 모든 주석을 얻을 수 있도록 블로그 게시물 문서에 주석을 저장하도록 선택할 수 있습니다.따라서 이 접근 방식에서는 단일 문서에 특정 작업에 필요한 모든 데이터가 포함됩니다.

산성 및 결합 서포트

데이터베이스는 ACID 속성(원자성, 일관성, 격리, 내구성)을 지원하는 것으로 표시되며 데이터베이스 설명서에서 이러한 주장을 하는 경우 결합 작업을 지원합니다.그러나 이는 대부분의 SQL 데이터베이스와 유사한 방식으로 기능이 완전히 지원되는 것을 의미하지는 않습니다.

데이터베이스 산성의 참가하다
에어로스파이크 네. 아니요.
아파치 이그니트 네. 네.
아랑고DB 네. 네.
아마존 다이너모DB 네. 아니요.
카우치 베이스 네. 네.
카우치 DB 네. 네.
IBM DB2 네. 네.
인피니티DB 네. 아니요.
LMDB 네. 아니요.
마크 로직 네. 네, 그렇습니다[nb 1].
MongoDB 네. 네, 그렇습니다[nb 2].
오리엔트 DB 네. 네, 그렇습니다[nb 3].
  1. ^ 조인은 문서 데이터베이스에 반드시 적용되는 것은 아니지만 [30]Mark Logic은 시멘틱스를 사용하여 조인을 수행할 수 있습니다.
  2. ^ MongoDB는 버전 [31]5.1까지 샤드 컬렉션으로부터의 가입을 지원하지 않았습니다.
  3. ^ OrientDB는 외부 [32]레코드에 대한 직접 링크를 저장함으로써 링크를 사용하여 1:1 조인을 해결할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ http://nosql-database.org/ "NoSQL DEFINITION: Next Generation Databases는 대부분 비관계형, 분산형, 오픈 소스 및 수평 확장성이라는 몇 가지 사항을 다루고 있습니다."
  2. ^ a b Leavitt, Neal (2010). "Will NoSQL Databases Live Up to Their Promise?" (PDF). IEEE Computer. 43 (2): 12–14. doi:10.1109/MC.2010.58. S2CID 26876882.
  3. ^ Mohan, C. (2013). History Repeats Itself: Sensible and NonsenSQL Aspects of the NoSQL Hoopla (PDF). Proc. 16th Int'l Conf. on Extending Database Technology.
  4. ^ "Amazon Goes Back to the Future With 'NoSQL' Database". WIRED. 19 January 2012. Retrieved 6 March 2017.
  5. ^ "RDBMS dominate the database market, but NoSQL systems are catching up". DB-Engines.com. 21 November 2013. Retrieved 24 November 2013.
  6. ^ "NoSQL (Not Only SQL)". NoSQL database, also called Not Only SQL
  7. ^ Fowler, Martin. "NosqlDefinition". many advocates of NoSQL say that it does not mean a "no" to SQL, rather it means Not Only SQL
  8. ^ NoSQL Deflusted: 신흥 폴리글롯의 지속성에 대한 간단한 가이드.Addison-Wesley Educational Publishers Inc, 2009, ISBN 978-0321826626.
  9. ^ Vogels, Werner (18 January 2012). "Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications". All Things Distributed. Retrieved 6 March 2017.
  10. ^ 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. Retrieved 8 January 2014.
  11. ^ "Jepsen: MongoDB stale reads". Aphyr.com. 20 April 2015. Retrieved 6 March 2017.
  12. ^ "Large volume data analysis on the Typesafe Reactive Platform". Slideshare.net. Retrieved 6 March 2017.
  13. ^ Fowler, Adam. "10 NoSQL Misconceptions". Dummies.com. Retrieved 6 March 2017.
  14. ^ "No! to SQL and No! to NoSQL So Many Oracle Manuals, So Little Time". Iggyfernandez.wordpress.com. Retrieved 6 March 2017.
  15. ^ Chapple, Mike. "The ACID Model". about.com.
  16. ^ Fiore, S. (2011). Grid and cloud database management. Springer Science & Business Media. p. 210.
  17. ^ Lawrence, Integration and virtualization of relational SQL and NoSQL systems including MySQL and MongoDB (2014). "Integration and virtualization of relational SQL and NoSQL systems including MySQL and MongoDB". International Conference on Computational Science and Computational Intelligence 1.
  18. ^ Lith, Adam; Mattson, Jakob (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. p. 70. Retrieved 12 May 2011. 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[...]
  19. ^ "NoSQL Relational Database Management System: Home Page". Strozzi.it. 2 October 2007. Retrieved 29 March 2010.
  20. ^ "NoSQL 2009". Blog.sym-link.com. 12 May 2009. Archived from the original on 16 July 2011. Retrieved 29 March 2010.
  21. ^ Strauch, Christof. "NoSQL Databases" (PDF). pp. 23–24. Retrieved 27 August 2017.
  22. ^ https://apacheignite.readme.io/docs Ignite 문서
  23. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-flashing-big-data-processing-vlash
  24. ^ Sandy (14 January 2011). "Key Value stores and the NoSQL movement". Stackexchange. Retrieved 1 January 2012. Key–value stores allow the application developer to store schema-less data. This data usually consists of a string that represents the key, and the actual data that is considered the value in the "key–value" relationship. The data itself is usually some kind of primitive of the programming language (a string, an integer, or an array) or an object that is being marshaled by the programming language's bindings to the key-value store. This structure replaces the need for a fixed data model and allows proper formatting.
  25. ^ Seeger, Marc (21 September 2009). "Key-Value Stores: a practical overview" (PDF). Marc Seeger. Retrieved 1 January 2012. Key–value stores provide a high-performance alternative to relational database systems with respect to storing and accessing data. This paper provides a short overview of some of the currently available key–value stores and their interface to the Ruby programming language.
  26. ^ Katsov, Ilya (1 March 2012). "NoSQL Data Modeling Techniques". Ilya Katsov. Retrieved 8 May 2014.
  27. ^ "TerminusX - Why TerminusX". terminusdb.com. Retrieved 16 December 2021.
  28. ^ Scofield, Ben (14 January 2010). "NoSQL - Death to Relational Databases(?)". Retrieved 26 June 2014.
  29. ^ "Moving From Relational to NoSQL: How to Get Started". Couchbase.com. Retrieved 11 November 2019.
  30. ^ "Can't do joins with MarkLogic? It's just a matter of Semantics! - General Networks". Gennet.com. Archived from the original on 3 March 2017. Retrieved 6 March 2017.
  31. ^ "Sharded Collection Restrictions". docs.mongodb.com. Retrieved 24 January 2020.
  32. ^ "SQL Reference · OrientDB Manual". OrientDB.com. Retrieved 24 January 2020.

추가 정보

외부 링크