1.1 NoSQL 데이터베이스 작동 방식

NoSQL 데이터베이스는 다양한 데이터 모델을 사용하여 데이터에 액세스하고 조작합니다. 이러한 유형의 데이터베이스는 대기 시간이 짧고 유연한 데이터 모델이 필요한 데이터 집약적 애플리케이션에 최적화되어 있습니다. 이 모든 것은 다른 유형의 데이터베이스에 일반적으로 적용되는 엄격한 데이터 일관성 요구 사항을 완화함으로써 달성됩니다.

단순한 책 데이터베이스에 대한 스키마 모델링의 예를 고려하십시오.

  • 관계형 데이터베이스에서 책 항목은 종종 여러 부분으로 분할(또는 "정규화")되어 관계가 기본 및 외래 키 제약 조건으로 정의된 별도의 테이블에 저장됩니다. 이 예에서 Books 테이블에는 ISBN , 책 제목 및 판 번호 열이 있고 Authors "ISBN""저자"Author-ISBN있으며열이저자 이름ID저자에는테이블. 관계형 모델은 데이터베이스의 테이블 간에 참조 무결성을 유지하도록 설계되었습니다. 데이터는 중복성을 줄이기 위해 정규화되며 일반적으로 스토리지에 최적화됩니다.

  • NoSQL 데이터베이스에서 책 레코드는 일반적으로 JSON 문서로 저장됩니다. 각 책 또는 요소에 대해 ISBN , 책 제목 , 판 번호 , 저자 이름저자 ID 값은 단일 문서에 속성으로 저장됩니다. 이 모델에서 데이터는 직관적인 개발과 수평적 확장성을 위해 최적화됩니다.

1.2 NoSQL 데이터베이스는 어떤 용도로 사용할 수 있습니까?

NoSQL 데이터베이스는 최대의 유용성을 제공할 수 있는 고성능 및 풍부한 기능을 갖춘 유연하고 확장 가능한 데이터베이스가 필요한 모바일, 게임, 웹 애플리케이션과 같은 많은 최신 애플리케이션에 매우 적합합니다.

  • 유연성 . 일반적으로 NoSQL 데이터베이스는 유연한 스키마를 제공하여 개발 속도를 높이고 점진적 구현을 ​​가능하게 합니다. 유연한 데이터 모델을 사용하기 때문에 NoSQL 데이터베이스는 반정형 및 비정형 데이터에 적합합니다.

  • 확장성 . NoSQL 데이터베이스는 고가의 안정적인 서버를 추가하지 않고 분산 하드웨어 클러스터를 사용하여 확장하도록 설계되었습니다. 일부 클라우드 서비스 공급자는 이러한 작업을 백그라운드에서 실행하여 완전히 관리되는 서비스를 제공합니다.

  • 고성능 . NoSQL 데이터베이스는 관계형 데이터베이스보다 더 높은 성능을 달성하기 위해 특정 데이터 모델 및 액세스 패턴에 최적화되어 있습니다.

  • 넓은 기능 . NoSQL 데이터베이스는 각각의 데이터 모델에 맞게 특별히 설계된 풍부한 API와 데이터 유형을 제공합니다.

1.3 NoSQL 데이터베이스 유형

NoSQL 데이터베이스는 데이터를 테이블 형식으로 저장하는 것이 그다지 편리하지 않은 경우에 사용됩니다. 따라서 매우 다른 형식으로 저장됩니다. 일반적으로 NoSQL 데이터베이스에는 6가지 주요 데이터 유형이 있습니다.

키-값 쌍 기반 DB

키-값 쌍을 사용하는 데이터베이스는 높은 분리성을 지원하고 다른 유형의 데이터베이스로는 달성할 수 없는 전례 없는 수평 확장을 제공합니다. 키-값 데이터베이스의 좋은 사용 사례는 게임, 광고 및 IoT 애플리케이션입니다.

예를 들어 Amazon DynamoDB는 어떤 규모에서든 몇 밀리초 이하의 지연으로 안정적인 데이터베이스 운영을 보장합니다. 이 강력한 성능은 Snapchat Stories를 DynamoDB로 마이그레이션한 주된 이유였습니다. 이 Snapchat 기능은 가장 큰 스토리지 쓰기 로드와 연관되어 있기 때문입니다.

문서

애플리케이션 코드에서 데이터는 개발자를 위한 효율적이고 직관적인 데이터 모델이기 때문에 종종 JSON과 같은 형식의 개체 또는 문서로 표현됩니다. 문서 데이터베이스를 사용하면 개발자가 애플리케이션 코드에서 사용하는 것과 동일한 문서 모델을 사용하여 데이터베이스에 데이터를 저장하고 쿼리할 수 있습니다. 문서 및 문서 데이터베이스의 유연하고 반구조화된 계층적 특성으로 인해 애플리케이션 요구 사항에 따라 발전할 수 있습니다.

문서 모델은 각 문서가 고유하고 시간이 지남에 따라 변경되는 카탈로그, 사용자 프로필 및 콘텐츠 관리 시스템에서 잘 작동합니다. Amazon DocumentDB(MongoDB와 호환 가능) 및 MongoDB는 애자일 개발을 위한 기능적이고 직관적인 API를 제공하는 일반적인 문서 데이터베이스입니다.

그래프 데이터베이스

그래프 데이터베이스를 사용하면 복잡한 데이터 세트로 작업하는 애플리케이션을 더 쉽게 개발하고 실행할 수 있습니다. 그래프 데이터베이스를 사용하는 일반적인 예로는 소셜 네트워크, 추천 서비스, 사기 탐지 시스템 및 지식 그래프가 있습니다. Amazon Neptune은 완전히 관리되는 그래프 데이터베이스 서비스입니다. Neptune은 Property Graph 및 Resource Description Framework(RDF)를 지원하여 TinkerPop 및 RDF/SPARQL 중에서 선택할 수 있는 두 가지 그래프 API를 제공합니다. 일반적인 그래프 데이터베이스에는 Neo4j 및 Giraph가 포함됩니다.

메모리의 DB

종종 게임 및 광고 애플리케이션은 리더보드, 세션 스토리지 및 실시간 분석을 사용합니다. 이러한 기능은 몇 마이크로초 이내에 응답해야 하는 반면 트래픽의 급격한 증가는 언제든지 가능합니다.

Amazon MemoryDB for Redis는 읽기 지연 시간을 밀리초로 줄이고 여러 가용 영역에서 내구성을 제공하는 Redis와 호환되고 안정적인 인 메모리 데이터베이스 서비스입니다. MemoryDB는 초고성능 및 안정성을 위해 특별히 제작되었으므로 최신 마이크로서비스 기반 애플리케이션의 기본 데이터베이스로 사용할 수 있습니다.

Amazon ElastiCache는 완전 관리형 Redis 및 Memcached와 호환되는 인 메모리 캐싱 서비스로 지연 시간이 짧고 처리량이 높은 워크로드를 처리합니다. 앱이 실시간으로 응답해야 하는 Tinder와 같은 클라이언트는 디스크 스토리지 시스템이 아닌 인메모리를 사용하고 있습니다. 특별히 구축된 데이터 웨어하우스의 또 다른 예는 Amazon DynamoDB Accelerator(DAX)입니다. DAX를 통해 DynamoDB는 데이터를 몇 배 더 빠르게 읽을 수 있습니다.

데이터베이스 검색

많은 애플리케이션이 로그를 생성하여 개발자가 문제를 보다 쉽게 ​​해결하고 수정할 수 있도록 합니다. Amazon OpenSearch는 반구조화된 로그 및 메트릭을 인덱싱, 집계 및 검색하여 자동으로 생성된 데이터 스트림을 거의 실시간으로 시각화하고 분석하기 위해 특별히 제작된 서비스입니다.

또한 Amazon OpenSearch는 강력한 고성능 전체 텍스트 검색 서비스입니다. Expedia는 운영 모니터링 및 문제 해결에서 분산 애플리케이션 스택 추적 및 비용 최적화에 이르기까지 다양한 미션 크리티컬 사용 사례에 대해 150개 이상의 Amazon OpenSearch 서비스 도메인, 30TB의 데이터 및 300억 개의 문서를 활용합니다.

1.4 SQL(관계형) 및 NoSQL(비관계형) 데이터베이스 비교

NoSQL에는 많은 장점이 있으므로 직접 작성하기 전에 적어도 이론적으로는 필요한 도구가 이미 존재한다는 사실을 알아야 합니다. 아래에서 NoSQL과 SQL 데이터베이스를 비교하겠습니다.

적합한 워크로드

관계형 데이터베이스는 트랜잭션 및 매우 일관된 OLTP(실시간 트랜잭션 처리) 응용 프로그램용으로 설계되었으며 OLAP(실시간 분석 처리)에 매우 적합합니다.

NoSQL 데이터베이스는 대기 시간이 짧은 애플리케이션을 포함하여 다양한 데이터 액세스 패턴에서 작동하도록 설계되었습니다. NoSQL 검색 데이터베이스는 반정형 데이터 분석을 위해 설계되었습니다.

데이터 모델

관계형 모델은 데이터를 정규화하고 행과 열로 구성된 테이블로 변환합니다. 스키마는 테이블, 행, 열, 인덱스, 테이블 간의 관계 및 기타 데이터베이스 요소를 엄격하게 정의합니다. 이러한 데이터베이스는 테이블 간의 관계에서 참조 데이터의 무결성을 보장합니다.

NoSQL 데이터베이스는 고성능 및 확장성에 최적화된 키-값 쌍, 문서 및 그래프와 같은 다양한 데이터 모델을 제공합니다.

ACID 속성

관계형 데이터베이스는 원자성, 일관성, 격리, 안정성과 같은 일련의 ACID 속성을 제공합니다.

  • 원자성은 트랜잭션이 전체적으로 실행되거나 전혀 실행되지 않도록 요구합니다.
  • 일관성이란 트랜잭션이 완료되자마자 데이터가 데이터베이스 스키마를 준수해야 함을 의미합니다.
  • 격리를 위해서는 병렬 트랜잭션이 서로 별도로 실행되어야 합니다.
  • 신뢰성은 예상치 못한 시스템 장애 또는 정전 후 마지막으로 저장한 상태로 복구하는 능력을 의미합니다.

NoSQL 데이터베이스는 수평 확장을 허용하는 보다 유연한 데이터 모델을 위해 ACID 속성의 엄격한 요구 사항을 완화하는 절충안을 제공하는 경우가 많습니다. 따라서 NoSQL은 단일 인스턴스를 넘어 수평적 확장이 필요한 고대역폭, 짧은 대기 시간 사용 사례에 적합합니다.

성능

성능은 주로 디스크 하위 시스템에 따라 다릅니다. 쿼리, 인덱스 및 테이블 구조의 최적화는 종종 최대 성능을 위해 필요합니다.

성능은 일반적으로 기본 하드웨어 클러스터의 크기, 네트워크 대기 시간 및 호출 애플리케이션에 따라 달라집니다.

스케일링

관계형 데이터베이스는 일반적으로 하드웨어의 컴퓨팅 성능을 높이거나 읽기 워크로드를 위한 별도의 복사본을 추가하여 확장됩니다.

NoSQL 데이터베이스는 일반적으로 분산 아키텍처 기반의 확장 가능한 액세스 패턴을 통해 높은 분리성을 지원합니다. 이를 통해 처리량이 향상되고 거의 무제한에 가까운 규모로 일관된 성능을 제공합니다.

API

데이터 쓰기 및 검색 요청은 SQL로 작성됩니다. 이러한 쿼리는 관계형 데이터베이스에 의해 구문 분석되고 실행됩니다.

객체 지향 API를 통해 애플리케이션 개발자는 데이터 구조를 쉽게 작성하고 검색할 수 있습니다. 파티션 키를 사용하여 응용 프로그램은 키-값 쌍, 열 집합 또는 직렬 개체 및 응용 프로그램 특성을 포함하는 반구조화된 문서를 검색할 수 있습니다.