NoSQL 데이터베이스에 대한 확실한 가이드

게시 됨: 2022-03-11

웹 애플리케이션이 데이터를 처리하는 방식이 지난 10년 동안 크게 변했다는 것은 의심의 여지가 없습니다. 이전보다 더 많은 데이터가 수집되고 더 많은 사용자가 이 데이터에 동시에 액세스하고 있습니다. 이는 스키마 기반 관계형 데이터베이스의 경우 확장성과 성능이 그 어느 때보다 더 어려운 문제이므로 확장이 더 어려울 수 있음을 의미합니다.

NoSQL의 진화

SQL 확장성 문제는 Google, Amazon 및 Facebook과 같이 데이터 및 인프라 요구 사항이 거대하고 증가하는 Web 2.0 회사에서 인식했습니다. 그들은 BigTable, DynamoDB 및 Cassandra와 같은 기술과 같은 문제에 대한 자체 솔루션을 제시했습니다.

이러한 관심 증가로 인해 성능, 안정성 및 일관성에 중점을 둔 많은 NoSQL DBMS(데이터베이스 관리 시스템)가 탄생했습니다. 검색 및 읽기 성능을 향상시키기 위해 기존의 많은 인덱싱 구조를 재사용하고 개선했습니다.

첫째, 최초의 NoSQL 시스템으로 여겨지는 Google의 BigTable과 Amazon의 DynamoDB와 같이 대기업이 특정 요구를 충족하기 위해 개발한 독점(클로즈드 소스) 유형의 NoSQL 데이터베이스가 있었습니다.

이러한 독점 시스템의 성공으로 많은 유사한 오픈 소스 및 독점 데이터베이스 시스템의 개발이 시작되었으며, 가장 인기 있는 시스템은 Hypertable, Cassandra, MongoDB, DynamoDB, HBase 및 Redis입니다.

NoSQL은 무엇이 다른가요?

NoSQL 데이터베이스와 기존 관계형 데이터베이스 간의 주요 차이점 중 하나는 NoSQL이 비정형 스토리지 의 한 형태라는 사실입니다.

즉, NoSQL 데이터베이스에는 관계형 데이터베이스에서 볼 수 있는 것과 같은 고정된 테이블 구조가 없습니다 .

NoSQL 데이터베이스의 장점과 단점

장점

NoSQL 데이터베이스는 기존의 관계형 데이터베이스에 비해 많은 장점이 있습니다.

근본적인 차이점 중 하나는 NoSQL 데이터베이스가 단순하고 유연한 구조를 가지고 있다는 것입니다. 스키마가 없습니다.

관계형 데이터베이스와 달리 NoSQL 데이터베이스는 키-값 쌍을 기반으로 합니다.

NoSQL 데이터베이스의 일부 저장소 유형에는 열 저장소, 문서 저장소, 키 값 저장소, 그래프 저장소, 개체 저장소, XML 저장소 및 기타 데이터 저장소 모드가 있습니다.

일반적으로 데이터베이스의 각 값에는 키가 있습니다. 일부 NoSQL 데이터베이스 저장소는 또한 개발자가 단순한 문자열 값이 아니라 직렬화된 개체를 데이터베이스에 저장할 수 있도록 합니다.

오픈 소스 NoSQL 데이터베이스는 비싼 라이선스 비용이 필요하지 않으며 저렴한 하드웨어에서 실행할 수 있으므로 배포 비용이 절감됩니다.

또한 NoSQL 데이터베이스로 작업할 때 오픈 소스든 독점이든 관계형 데이터베이스로 작업할 때보다 확장이 쉽고 저렴합니다. 메인 호스트를 더 강력한 호스트로 교체하는 관계형 데이터베이스 시스템에서 일반적으로 수행되는 수직 확장 유형이 아닌 수평 확장 및 모든 노드의 부하 분산으로 이루어지기 때문입니다.

단점

물론 NoSQL 데이터베이스는 완벽하지 않으며 항상 올바른 선택도 아닙니다.

우선 대부분의 NoSQL 데이터베이스는 관계형 데이터베이스 시스템에서 기본적으로 지원하는 안정성 기능 을 지원하지 않습니다. 이러한 신뢰성 기능은 원자성(atomicity), 일관성(consistency), 격리(isolation) 및 내구성으로 요약될 수 있습니다. 이것은 또한 이러한 기능을 지원하지 않는 NoSQL 데이터베이스가 성능과 확장성을 위해 일관성을 희생한다는 것을 의미합니다.

안정성과 일관성 기능을 지원하기 위해 개발자는 시스템에 더 많은 복잡성을 추가하는 고유한 고유 코드를 구현해야 합니다.

이는 은행 시스템과 같이 안전하고 안정적인 거래를 위해 NoSQL 데이터베이스에 의존할 수 있는 애플리케이션의 수를 제한할 수 있습니다.

대부분의 NoSQL 데이터베이스에서 발견되는 다른 형태의 복잡성에는 SQL 쿼리와의 비호환성이 포함됩니다. 즉, 수동 또는 독점 쿼리 언어가 필요하므로 시간과 복잡성이 더 많이 추가됩니다.

NoSQL 대 관계형 데이터베이스

이 표는 NoSQL과 관계형 데이터베이스 간의 간략한 기능 비교를 제공합니다.

특징 NoSQL 데이터베이스 관계형 데이터베이스
성능 높은 낮은
신뢰할 수 있음 가난한 좋은
유효성 좋은 좋은
일관성 가난한 좋은
데이터 저장고 대용량 데이터에 최적화 중형~대형
확장성 높은 높음(그러나 더 비쌈)


이 표는 두 모델을 모두 구현하는 다양한 데이터베이스 관리 시스템 이 아니라 데이터베이스 수준 에서의 비교를 보여줍니다. 이러한 시스템은 두 시스템의 일부 문제와 단점을 극복하고 경우에 따라 성능과 안정성을 크게 향상시키기 위해 고유한 기술 을 제공합니다.

NoSQL 데이터 저장소 유형

키 값 저장소

키 값 저장소 유형에서는 고유 키가 항목을 가리키는 해시 테이블이 사용됩니다.

키를 논리적 키 그룹으로 구성할 수 있으며, 키가 자체 그룹 내에서 고유해야 합니다. 이를 통해 서로 다른 논리 그룹에서 동일한 키를 사용할 수 있습니다. 다음 표는 키-값 저장소의 예를 보여줍니다. 여기서 키는 도시 이름이고 값은 해당 도시에 있는 얼스터 대학교의 주소입니다.

열쇠
"벨파스트" {“University of Ulster, Belfast 캠퍼스, York Street, Belfast, BT15 1ED”}
"콜레인" {“University of Ulster, Coleraine 캠퍼스, Cromore Road, Co. Londonderry, BT52 1SA”}


키 값 저장소의 일부 구현은 성능을 크게 향상시키는 캐싱 메커니즘을 제공합니다.

데이터베이스에 저장된 항목을 처리하는 데 필요한 모든 것은 키입니다. 데이터는 문자열, JSON 또는 BLOB(Binary Large OBject) 형식으로 저장됩니다.

이 데이터베이스 형식의 가장 큰 결함 중 하나는 데이터베이스 수준에서 일관성이 없다는 것입니다. 이것은 개발자가 자신의 코드로 추가할 수 있지만 앞에서 언급했듯이 더 많은 노력, 복잡성 및 시간이 추가됩니다.

키 값 저장소에 구축된 가장 유명한 NoSQL 데이터베이스는 Amazon의 DynamoDB입니다.

문서 저장소

문서 저장소는 스키마가 없고 키-값 모델을 기반으로 한다는 점에서 키 값 저장소와 유사합니다. 따라서 둘 다 동일한 장점과 단점을 많이 공유합니다. 둘 다 데이터베이스 수준에서 일관성이 부족하기 때문에 애플리케이션이 더 많은 안정성과 일관성 기능을 제공할 수 있습니다.

그러나 둘 사이에는 중요한 차이점이 있습니다.

문서 저장소에서 값(문서)은 저장된 데이터에 대한 인코딩을 제공합니다. 이러한 인코딩은 XML, JSON 또는 BSON(이진 인코딩 JSON)일 수 있습니다.

또한 데이터를 기반으로 쿼리를 수행할 수 있습니다.

문서 저장소에 의존하는 가장 인기 있는 데이터베이스 응용 프로그램은 MongoDB입니다.

칼럼 스토어

열 저장소 데이터베이스에서 데이터는 대부분의 관계형 데이터베이스 관리 시스템에서 행에 저장되는 것과 달리 열에 저장됩니다.

Column Store는 데이터베이스의 특정 열을 논리적으로 그룹화하는 하나 이상의 Column Family로 구성됩니다. 키는 이 키의 범위를 정의하는 keyspace 속성과 함께 데이터베이스의 여러 열을 식별하고 가리키는 데 사용됩니다. 각 열에는 순서가 지정되고 쉼표로 구분된 이름과 값의 튜플이 포함됩니다.

열 저장소에는 저장된 데이터에 대한 빠른 읽기/쓰기 액세스 권한이 있습니다. 열 저장소에서 단일 열에 해당하는 행은 단일 디스크 항목으로 저장됩니다. 따라서 읽기/쓰기 작업 중에 더 빠르게 액세스할 수 있습니다.

컬럼 저장소를 사용하는 가장 인기 있는 데이터베이스에는 Google의 BigTable, HBase 및 Cassandra가 있습니다.

그래프 베이스

Graph Base NoSQL Database에서는 방향성 그래프 구조를 사용하여 데이터를 표현합니다. 그래프는 간선과 노드로 구성됩니다.

공식적으로, 그래프는 개체의 일부 쌍이 링크로 연결된 개체 집합을 나타냅니다. 상호 연결된 객체는 정점이라고 하는 수학적 추상화로 표현되며 정점 쌍을 연결하는 링크를 가장자리라고 합니다. 정점과 정점을 연결하는 모서리의 집합을 그래프라고 합니다.

그래프에 대한 그래프. 상단 중앙에는 두 개의 화살표가 나오는 "그래프"라는 상자가 있습니다. 두 화살표를 모두 "레코드"라고 합니다. 하나는 "노드" 상자를 가리키고 다른 하나는 "관계" 상자를 가리킵니다. "관계" 상자에는 "노드" 상자를 가리키는 "구성" 화살표가 있습니다. "노드"와 "관계"에는 모두 "속성"이라는 마지막 상자를 가리키는 "가짐"이라는 화살표가 있습니다. 즉, 그래프는 속성을 가지고 있는 관계와 노드를 기록하고 관계는 노드를 구성합니다.

이것은 에지와 노드를 사용하여 데이터를 표현하고 저장하는 그래프 기반 데이터베이스의 구조를 보여줍니다. 이러한 노드는 노드 간의 가장자리로 표시되는 서로 간의 일부 관계로 구성됩니다. 노드와 관계 모두 정의된 속성이 있습니다.

그래프 데이터베이스는 소셜 네트워킹 애플리케이션에서 가장 일반적으로 사용됩니다. 그래프 데이터베이스를 사용하면 개발자가 개체 자체보다 개체 간의 관계에 더 집중할 수 있습니다. 이러한 맥락에서 실제로 확장 가능하고 사용하기 쉬운 환경을 허용합니다.

현재 가장 많이 사용되는 그래프 데이터베이스는 InfoGrid와 InfiniteGraph입니다.

NoSQL 데이터베이스 관리 시스템

데이터베이스에 대한 간략한 비교를 위해 다음 표는 다양한 NoSQL 데이터베이스 관리 시스템 간의 간략한 비교를 제공합니다.

저장 유형 쿼리 방법 상호 작용 프로그래밍 언어 오픈 소스 복제
카산드라 칼럼 스토어 절약 API 절약 자바 비동기
몽고DB 문서 저장소 몽고 쿼리 TCP/IP C++ 비동기
하이퍼테이블 칼럼 스토어 HQL 절약 자바 비동기
카우치DB 문서 저장소 맵리듀스 쉬다 얼랑 비동기
빅테이블 칼럼 스토어 맵리듀스 TCP/IP C++ 아니요 비동기
HBase 칼럼 스토어 맵리듀스 쉬다 자바 비동기


MongoDB에는 유연한 스키마 저장소가 있습니다. 즉, 저장된 객체가 반드시 동일한 구조 또는 필드를 가질 필요는 없습니다. MongoDB에는 데이터 수집을 분산하여 전반적인 성능이 향상되고 보다 균형 잡힌 시스템이 되는 몇 가지 최적화 기능도 있습니다.

Apache CouchDB와 같은 다른 NoSQL 데이터베이스 시스템도 문서 저장소 유형의 데이터베이스이며, RESTful API를 사용하여 데이터베이스에 액세스할 수 있다는 점을 제외하고 MongoDB와 많은 기능을 공유합니다.

REST는 World Wide Web 내에서 구성 요소, 커넥터 및 데이터 요소에 적용되는 조정된 아키텍처 제약 조건 집합으로 구성된 아키텍처 스타일입니다. 이는 상태 비저장, 클라이언트-서버, 캐시 가능한 통신 프로토콜(예: HTTP 프로토콜)에 의존합니다.

RESTful 애플리케이션은 HTTP 요청을 사용하여 데이터를 게시하고 읽고 데이터를 삭제합니다.

컬럼 기반 데이터베이스의 경우 Hypertable은 C++로 작성된 NoSQL 데이터베이스이며 Google의 BigTable을 기반으로 합니다.

Hypertable은 MongoDB 및 CouchDB와 마찬가지로 확장성을 최대화하기 위해 노드 전체에 데이터 저장소를 배포하는 것을 지원합니다.

가장 널리 사용되는 NoSQL 데이터베이스 중 하나는 Facebook에서 개발한 Cassandra입니다.

Cassandra는 안정성 및 내결함성을 목표로 하는 많은 기능을 포함하는 열 저장소 데이터베이스입니다.

각 NoSQL DBMS를 자세히 살펴보기보다는 가장 널리 사용되는 NoSQL 데이터베이스 관리 시스템인 Cassandra와 MongoDB에 대해 다음 하위 섹션에서 살펴보겠습니다.

카산드라

Cassandra는 Facebook에서 개발한 데이터베이스 관리 시스템입니다.

Cassandra의 목표는 단일 장애 지점이 없고 최대 가용성을 제공하는 DBMS를 만드는 것이었습니다.

Cassandra는 대부분 열 저장소 데이터베이스입니다. 일부 연구에서는 Cassandra를 열 저장소 데이터베이스인 Google의 BigTable과 키-값 데이터베이스인 Amazon의 DynamoDB에서 영감을 받은 하이브리드 시스템이라고 언급했습니다.

이는 키-값 시스템을 제공하여 달성되지만 Cassandra의 키는 Google의 BigTable 분산 파일 시스템 및 Dynamo의 가용성 기능(분산 해시 테이블)에 의존하여 일련의 열 패밀리를 가리킵니다.

Cassandra는 서로 다른 노드에 분산된 엄청난 양의 데이터를 저장하도록 설계되었습니다. Cassandra는 Facebook과 같은 대규모 서비스에 필수적인 단일 장애 지점 없이 고가용성 서비스를 제공하면서 많은 서버에 분산된 방대한 양의 데이터를 처리하도록 설계된 DBMS입니다.

Cassandra의 주요 기능은 다음과 같습니다.

  • 단일 실패 지점이 없습니다. 이를 위해서는 Cassandra가 단일 시스템이 아닌 노드 클러스터에서 실행되어야 합니다. 이는 각 클러스터의 데이터가 동일하다는 것을 의미하지는 않지만 관리 소프트웨어는 동일합니다. 노드 중 하나에 장애가 발생하면 해당 노드의 데이터에 액세스할 수 없습니다. 그러나 다른 노드(및 데이터)는 계속 액세스할 수 있습니다.
  • 분산 해싱 은 하나의 슬롯을 추가하거나 제거해도 슬롯에 대한 키 매핑이 크게 변경되지 않는 방식으로 해시 테이블 기능을 제공하는 체계입니다. 이를 통해 용량에 따라 서버 또는 노드에 부하를 분산하고 가동 중지 시간을 최소화할 수 있습니다.
  • 비교적 사용하기 쉬운 클라이언트 인터페이스 . Cassandra는 클라이언트 인터페이스에 Apache Thrift를 사용합니다. Apache Thrift는 언어 간 RPC 클라이언트를 제공하지만 대부분의 개발자는 Hector와 같은 Apple Thrift 위에 구축된 오픈 소스 대안을 선호합니다.
  • 기타 가용성 기능. Cassandra의 기능 중 하나는 데이터 복제입니다. 기본적으로 클러스터의 다른 노드에 데이터를 미러링합니다. 복제는 예를 들어 다른 데이터 센터의 노드에 배치하여 데이터 보호를 최대화하기 위해 임의적이거나 특정적일 수 있습니다. Cassandra의 또 다른 기능은 파티셔닝 정책입니다. 파티셔닝 정책은 키를 배치할 노드를 결정합니다. 이것은 또한 무작위로 또는 순서대로 될 수 있습니다. 두 가지 유형의 분할 정책을 모두 사용할 때 Cassandra는 로드 밸런싱과 쿼리 성능 최적화 간의 균형을 맞출 수 있습니다.
  • 일관성. 복제와 같은 기능은 일관성을 어렵게 만듭니다. 이는 모든 노드가 항상 최신 값으로 최신 상태여야 하거나 읽기 작업이 트리거되는 시점에 있어야 하기 때문입니다. 그러나 결국 Cassandra는 개발자에게 이러한 사용자 지정 기능을 제공하여 복제 작업과 읽기/쓰기 작업 간의 균형을 유지하려고 합니다.
  • 읽기/쓰기 작업. 클라이언트는 단일 Cassandra 노드에 요청을 보냅니다. 노드는 복제 정책에 따라 데이터를 클러스터에 저장합니다. 각 노드는 먼저 커밋 로그에서 데이터 변경을 수행한 다음 변경 사항으로 테이블 구조를 업데이트합니다. 둘 다 동기적으로 수행됩니다. 읽기 작업도 매우 유사합니다. 읽기 요청은 단일 노드로 전송되며 해당 단일 노드는 분할/배치 정책에 따라 데이터를 보유하는 노드를 결정하는 노드입니다.

몽고DB

MongoDB는 C++로 작성된 스키마가 없는 문서 지향 데이터베이스입니다. 데이터베이스는 문서 저장소 기반이므로 인코딩된 데이터 형식으로 값(문서라고 함)을 저장합니다.

MongoDB에서 인코딩된 형식의 선택은 JSON입니다. 이는 데이터가 JSON 문서 내에 중첩되어 있더라도 여전히 쿼리인덱싱 이 가능하기 때문에 강력합니다.

다음 하위 섹션에서는 MongoDB에서 사용할 수 있는 몇 가지 주요 기능에 대해 설명합니다.

파편

샤딩은 데이터를 여러 시스템(노드)에 분할하고 배포하는 것입니다. 샤드는 노드가 대칭으로 분산되어 있는 Cassandra와 달리 MongoDB 노드의 모음입니다. 샤드를 사용한다는 것은 여러 노드에서 수평으로 확장할 수 있는 기능도 의미합니다. 단일 데이터베이스 서버를 사용하는 응용 프로그램이 있는 경우 MongoDB에서 샤딩을 수행하는 방식이므로 원래 응용 프로그램 코드를 거의 변경하지 않고 샤딩 클러스터로 변환할 수 있습니다. oftware는 클라이언트 측에 노출된 공개 API와 거의 완전히 분리되어 있습니다.

몽고 쿼리 언어

앞서 논의한 바와 같이 MongoDB는 RESTful API를 사용합니다. db 컬렉션에서 특정 문서를 검색하기 위해 원하는 문서와 일치해야 하는 필드가 포함된 쿼리 문서가 생성됩니다.

행위

MongoDB에는 라우터라는 서버 그룹이 있습니다. 각각은 하나 이상의 클라이언트에 대한 서버 역할을 합니다. 마찬가지로 클러스터에는 구성 서버라고 하는 서버 그룹이 포함되어 있습니다. 각각은 어떤 샤드에 어떤 데이터가 포함되어 있는지 나타내는 메타데이터 사본을 보유하고 있습니다. 읽기 또는 쓰기 작업은 클라이언트에서 클러스터의 라우터 서버 중 하나로 전송되고 해당 서버에서 구성 서버의 도움을 받아 데이터가 포함된 적절한 샤드로 자동 라우팅됩니다.

Cassandra와 유사하게 MongoDB의 샤드는 정확히 동일한 데이터를 보유하는 각 샤드의 복제본 세트를 생성하는 데이터 복제 체계를 가지고 있습니다. MongoDB에는 Master-Slave 복제와 Replica-Set 복제의 두 가지 유형의 복제 체계가 있습니다. Replica-Set은 더 많은 자동화와 더 나은 오류 처리를 제공하는 반면 Master-Slave는 때때로 관리자 개입이 필요합니다. 복제 체계에 관계없이 복제본 세트의 특정 시점에서 하나의 샤드만 기본 샤드 역할을 하고 다른 모든 복제본 샤드는 보조 샤드입니다. 모든 쓰기 및 읽기 작업은 기본 샤드로 이동한 다음 필요한 경우 세트의 다른 보조 샤드에 균등하게 분산됩니다.

아래 그래픽에서 위에서 설명한 MongoDB 아키텍처를 볼 수 있습니다. 라우터 서버는 녹색으로, 구성 서버는 파란색으로, 샤드에는 MongoDB 노드가 포함되어 있습니다.

4개의 번호가 지정된 샤드에는 각각 3개의 "mondgod" 노드가 있습니다. Shard4는 회색으로 표시되고 "복제본 세트"라는 레이블이 지정됩니다. Shard1은 "구성 서버"라는 레이블이 붙은 3개의 파란색 "C1 mongod" 노드 그룹에 연결됩니다. 그룹과 각 샤드는 일련의 녹색 "mongos" 노드에 연결됩니다. 이 시리즈는 차례로 일련의 클라이언트에 연결됩니다.

MongoDB의 샤딩(또는 샤드 간 데이터 공유)은 완전 자동으로 이루어지므로 실패율이 줄어들고 MongoDB는 확장성이 뛰어난 데이터베이스 관리 시스템이 됩니다.

NoSQL 데이터베이스를 위한 인덱싱 구조

인덱싱은 DBMS에서 해당 데이터 레코드의 위치와 키를 연결하는 프로세스입니다. NoSQL 데이터베이스에는 많은 인덱싱 데이터 구조가 사용됩니다. 다음 섹션에서는 몇 가지 일반적인 방법에 대해 간략하게 설명합니다. 즉, B-트리 인덱싱, T-트리 인덱싱 및 O2-트리 인덱싱입니다.

B-트리 인덱싱

B-Tree는 DBMS에서 가장 일반적인 인덱스 구조 중 하나입니다.

B-트리에서 내부 노드는 미리 정의된 범위 내에서 가변적인 수의 자식 노드를 가질 수 있습니다.

AVL과 같은 다른 트리 구조와의 한 가지 주요 차이점은 B-Tree를 사용하면 노드가 가변적인 수의 자식 노드를 가질 수 있으므로 트리 균형이 줄어들지만 공간이 더 많이 낭비된다는 의미입니다.

B+-트리는 B-트리의 가장 인기 있는 변형 중 하나입니다. B+-Tree는 모든 키가 나뭇잎에 있어야 하는 B-Tree보다 개선된 것입니다.

T-트리 인덱싱

T-트리의 데이터 구조는 AVL-트리와 B-트리의 기능을 결합하여 설계되었습니다.

AVL-트리는 자가 균형 이진 탐색 트리의 한 유형인 반면 B-트리는 불균형이며 각 노드는 다른 수의 자식을 가질 수 있습니다.

T-Tree에서 구조는 AVL-Tree 및 B-Tree와 매우 유사합니다.

각 노드는 둘 이상의 {key-value, pointer} 튜플을 저장합니다. 또한 이진 검색은 다중 튜플 노드와 함께 사용되어 더 나은 스토리지 및 성능을 생성합니다.

T-트리에는 세 가지 유형의 노드가 있습니다. 오른쪽 및 왼쪽 자식이 있는 T 노드, 자식이 없는 리프 노드, 자식이 하나만 있는 하프 리프 노드입니다.

T-트리는 AVL-트리보다 전반적인 성능이 더 우수하다고 믿어집니다.

O2-트리 인덱싱

O2-Tree는 기본적으로 리프 노드에 {key value, pointer} 튜플이 포함된 Binary-Search 트리의 한 형태인 Red-Black 트리를 개선한 것입니다.

O2-Tree는 현재 인덱싱 방법의 성능을 향상시키기 위해 제안되었습니다. 차수가 m(m ≥ 2)인 O2-Tree(여기서 m은 트리의 최소 차수)는 다음 속성을 충족합니다.

  • 모든 노드는 빨간색 또는 검은색입니다. 뿌리는 흑색이다.
  • 모든 리프 노드는 검은색으로 표시되며 "키 값, 레코드 포인터" 쌍을 보유하는 블록 또는 페이지로 구성됩니다.
  • 노드가 빨간색이면 해당 노드의 자식은 모두 검은색입니다.
  • 각 내부 노드에 대해 노드에서 하위 리프 노드까지의 모든 단순 경로에는 동일한 수의 블랙 노드가 포함됩니다. 각 내부 노드에는 단일 키 값이 있습니다.
  • 리프 노드는 ⌈m/2⌉에서 m개의 "키-값, 레코드-포인터" 쌍을 갖는 블록입니다.
  • 트리에 단일 노드가 있는 경우 트리의 루트인 리프여야 하며 1~m개의 주요 데이터 항목을 가질 수 있습니다.
  • 리프 노드는 정방향 및 역방향으로 이중 연결됩니다.

여기에서 O2-Tree, T-Tree, B+-Tree, AVL-Tree 및 Red-Black Tree 간의 간단한 성능 비교를 볼 수 있습니다.

Y축의 "총 시간(초)"(0-250)과 X축의 "업데이트 비율"(0-100)을 비교하는 그래프입니다. 다섯 가지 나무 유형은 모두 왼쪽에서 총 시간이 100 미만인 상태에서 시작하여 오른쪽에서 증가합니다. O2-Tree, T-Tree 및 AVL-Tree는 오른쪽으로 갈수록 느리게 증가하며 AVL-Tree는 약 125, O2-Tree는 약 75, T-Tree는 그 중간에 있습니다. Red-Black Tree와 B+-Tree는 더 많은 기복이 있으며, 둘 다 오른쪽 상단에서 서로 가깝게 마무리되며 Red-Black Tree는 약간 더 높은 값을 가집니다.

사용된 T-Tree, B+-Tree, O2-Tree의 순서는 m = 512이다.

검색, 삽입 및 삭제 작업에 대한 시간이 기록되며 업데이트 비율은 50M 레코드 인덱스에 대해 0%-100%이며 작업은 인덱스에 다른 50M 레코드를 추가합니다.

0-10%의 업데이트 비율에서 B-Tree와 T-Tree가 O2-Tree보다 더 나은 성능을 발휘한다는 것은 분명합니다. 그러나 업데이트 비율이 증가함에 따라 O2-Tree 인덱스는 B-Tree 및 Red-Black Tree 구조가 가장 고통받는 대부분의 다른 데이터 구조보다 훨씬 더 나은 성능을 보입니다.

NoSQL의 경우?

기존 관계형 데이터베이스가 부족한 주요 영역을 강조하는 NoSQL 데이터베이스에 대한 간략한 소개는 첫 번째 시사점으로 이어집니다.

관계형 데이터베이스는 일관성을 제공하지만 대용량 데이터가 자주 저장되고 처리되는 애플리케이션의 고성능에 최적화되어 있지 않습니다.

NoSQL 데이터베이스는 고성능, 높은 확장성 및 액세스 용이성으로 인해 많은 인기를 얻었습니다. 그러나 여전히 일관성과 안정성을 제공하는 기능이 부족합니다.

다행히도 많은 NoSQL DBMS가 확장성과 안정성을 향상시키는 새로운 기능을 제공하여 이러한 문제를 해결합니다.

모든 NoSQL 데이터베이스 시스템이 관계형 데이터베이스보다 성능이 좋은 것은 아닙니다.

MongoDB와 Cassandra는 쓰기 및 삭제 작업에서 관계형 데이터베이스보다 성능이 비슷하고 대부분의 경우 더 좋습니다.

저장소 유형과 NoSQL DBMS의 성능 사이에는 직접적인 상관 관계가 없습니다. NoSQL 구현은 변경되므로 성능이 다를 수 있습니다.

따라서 여러 연구에서 데이터베이스 유형에 대한 성능 측정값은 해당 수치가 정확하도록 항상 최신 버전의 데이터베이스 소프트웨어로 업데이트해야 합니다.

성능에 대한 확실한 평가를 내릴 수는 없지만 염두에 두어야 할 몇 가지 사항은 다음과 같습니다.

  • 전통적인 B-Tree 및 T-Tree 인덱싱은 일반적으로 기존 데이터베이스에서 사용됩니다.
  • 한 연구에서는 다중 인덱싱 구조의 특성을 결합하여 O2-Tree를 제공함으로써 개선 및 개선 사항을 제공했습니다.
  • O2-Tree는 특히 거대한 데이터 세트와 높은 업데이트 비율에서 대부분의 테스트에서 다른 구조보다 성능이 뛰어났습니다.
  • B-Tree 구조는 이 기사에서 다루는 모든 인덱싱 구조 중 최악의 성능을 제공했습니다.

NoSQL DBMS의 일관성을 향상시키기 위해 추가 작업이 수행될 수 있고 수행되어야 합니다. 두 시스템, 즉 NoSQL과 관계형 데이터베이스의 통합은 더 탐구해야 할 영역입니다.

마지막으로 NoSQL은 기존 데이터베이스 표준에 추가되는 좋은 기능이지만 몇 가지 중요한 주의 사항이 있습니다. NoSQL은 완전한 성능과 확장성을 위해 안정성과 일관성 기능을 제공합니다. NoSQL 데이터베이스에 의존할 수 있는 응용 프로그램의 수가 제한되어 있기 때문에 이는 전문 솔루션이 됩니다.

장점? 전문화는 유연성 면에서 많은 것을 제공하지 않을 수 있지만 가능한 한 신속하고 효율적으로 전문화 작업을 수행하려면 Swiss Army Knife가 필요하지 않습니다. NoSQL이 필요합니다.

관련 항목: 비즈니스 인텔리전스 플랫폼: MongoDB 집계 파이프라인을 사용하는 자습서