NoSQL 우수성 : 비교 된 최고의 키-값 데이터베이스

대부분의 응용 프로그램에는 데이터를 안전하게 보관하기 위해 응용 프로그램 외부에 저장하는 방법 인 일종의 지속성이 필요합니다. 가장 기본적인 방법은 파일 시스템에 데이터를 쓰는 것이지만 문제를 해결하는 데는 속도가 느리고 다루기 힘든 방법이 될 수 있습니다. 완전한 데이터베이스는 데이터를 인덱싱하고 검색하는 강력한 방법을 제공하지만 과도 할 수도 있습니다. 때때로 필요한 것은 자유 형식의 정보를 가져 와서 레이블과 연결하고 어딘가에 숨긴 다음 순식간에 다시 꺼내는 방법뿐입니다.

키-값 저장소를 입력하십시오. 본질적으로 NoSQL 데이터베이스이지만 매우 구체적인 목적과 의도적으로 제한된 설계를 가진 데이터베이스입니다. 그 역할은 데이터 (값)를 가져오고 레이블 (키)을 적용하고이를 메모리 또는 빠른 검색에 최적화 된 일부 스토리지 시스템에 저장하는 것입니다. 애플리케이션은 객체 캐싱에서 애플리케이션 노드간에 일반적으로 사용되는 데이터 공유에 이르기까지 모든 것에 키-값 데이터베이스를 사용합니다.

많은 관계형 데이터베이스가 키-값 저장소로 작동 할 수 있지만 이는 식료품 점을 실행하기 위해 트랙터 트레일러를 사용하는 것과 약간 비슷합니다. 작동하지만 극적으로 비효율적이며 문제를 해결할 수있는 훨씬 가벼운 방법이 있습니다. 다른 NoSQL 데이터베이스와 마찬가지로 키-값 저장소는 단순한 값 저장 및 검색을위한 충분한 인프라를 제공하고이를 사용하는 애플리케이션과보다 직접적으로 통합되며 애플리케이션 워크로드와 함께보다 세분화 된 방식으로 확장됩니다.

키-값 NoSQL 데이터베이스 기능 비교

5 개의 널리 사용되는 제품 (클라우드 서비스 1 개 포함)은 고려할 가치가 있습니다. 키-값 데이터베이스로 명시 적으로 청구되거나 핵심 기능으로 키-값 저장소를 제공합니다. 기본적인 차이점 :

  • Hazelcast와 Memcached는 미니멀리즘을 선호하며 디스크에 데이터를 백업하는 데 신경 쓰지 않습니다.
  • Aerospike, Cosmos DB 및 Redis는 더 많은 기능을 제공하지만 여전히 키-값 은유를 중심으로합니다.

표 : 키-값 NoSQL 데이터베이스 제품 비교

L W M S I A O

* 타사 구현을 통해.

키 : = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = 기타.
  에어로 스파이크 헤이즐 캐스트 IMDG Microsoft Azure Cosmos DB Memcached Redis
플랫폼 LWMO 자바 클라우드 전용 LWMO LWMO
현재 버전 3.14.1.1 3.9 N / A 1.5.1 4.0.1
초판 2012 년 2008 년 2017 년 2003 년 2009 년
특허 AGPL Apache 2 소유권 BSD BSD
디스크 지원 아니 아니 YesBSD
클러스터링 아니
샤딩 / 파티셔닝 아니
네이티브 스크립팅 자바 아니
업무 키당 아니
삽입 가능 예*

아니 예*

예*

Aerospike 키-값 NoSQL 데이터베이스 심층

Redis가 스테로이드에 대한 Memcached라면 Aerospike는 스테로이드에 대한 Redis라고 할 수 있습니다. Redis와 마찬가지로 Aerospike는 영구 데이터베이스 또는 데이터 캐시로 작동 할 수있는 키-값 저장소입니다. Aerospike는 클러스터링과 확장이 용이하도록 설계되어 엔터프라이즈 워크로드를 더 잘 지원합니다.

Aerospike 고유의 기능

Aerospike의 많은 부분은 다른 키-값 저장소와 다른 NoSQL 데이터베이스를 모두 반영합니다. 데이터는 키를 통해 저장 및 검색되며, 데이터는 64 비트 정수, 문자열, 배정 밀도 부동 소수점 및 여러 공통 프로그래밍 언어에서 직렬화 된 원시 이진 데이터를 포함하여 여러 기본 데이터 유형으로 보관 될 수 있습니다.

또한 Aerospike는 값 목록,지도라고하는 키-값 쌍 모음, GeoJSON 형식의 지리 공간 데이터 등 복잡한 유형으로 데이터를 저장할 수 있습니다 . Aerospike는 지리 공간 데이터에 대한 기본 처리를 수행 할 수 있습니다. 예를 들어 쿼리 만 수행하여 데이터베이스에 저장된 위치가 서로 가장 가까운 위치를 결정하는 등 위치에 의존하는 응용 프로그램 개발자에게 매력적인 옵션이됩니다.

Aerospike에 저장된 데이터는 여러 계층 적 컨테이너로 구성 할 수 있습니다. 일부 NoSQL 시스템은 문서 지향적이므로 데이터는 일반적으로 JSON과 같은 일종의 객체로 캡슐화됩니다. Aerospike를 사용하면 컨테이너는 대략 문서와 비슷하지만 Aerospike에 특정한 기능과 동작이 있습니다. 각 종류의 컨테이너를 사용하면 내부 데이터에 서로 다른 동작 속성을 설정할 수 있습니다.

예를 들어 최상위 수준의 컨테이너, 네임 스페이스 는 데이터가 디스크, RAM 또는 둘 다에 저장되는지 여부를 결정합니다. 데이터가 클러스터 또는 클러스터간에 복제되는지 여부 데이터가 만료되거나 제거되는시기 또는 방법. 네임 스페이스를 통해 Aerospike는 개발자가 가장 빠른 응답을 위해 가장 자주 액세스하는 데이터를 메모리에 보관할 수 있도록합니다.

Aerospike가 스토리지 및 클러스터링을 처리하는 방법

Aerospike는 거의 모든 파일 시스템에 데이터를 보관할 수 있지만 SSD를 활용하기 위해 특별히 작성되었습니다. 즉, 오래된 SSD에 Aerospike를 떨어 뜨리고 좋은 결과를 기대하지 마십시오. Aerospike의 개발자는 승인 된 SSD 장치 목록을 유지 관리하며 Aerospike 워크로드에서 SSD 저장 장치의 성능을 평가하는 ACT라는 도구를 만들었습니다.

대부분의 NoSQL 시스템과 마찬가지로 Aerospike는 복제 및 클러스터링을 위해 비공유 아키텍처를 사용합니다. Aerospike에는 마스터 노드와 수동 샤딩이 없습니다. 모든 노드는 동일합니다. 데이터는 노드에 무작위로 분산되고 병목 현상이 발생하지 않도록 자동으로 재조정됩니다. 원하는 경우 데이터가 얼마나 적극적으로 재조정되는지에 대한 규칙을 설정할 수 있습니다. 서로 다른 네트워크 세그먼트 또는 다른 데이터 센터에서 실행되는 여러 클러스터를 구성하여 서로 동기화 할 수 있습니다.

Aerospike의 스크립팅

Redis와 마찬가지로 Aerospike를 사용하면 개발자가 Aerospike 엔진 내에서 실행되는 Lua 스크립트 또는 UDF (사용자 정의 함수)를 작성할 수 있습니다. UDF를 사용하여 레코드를 읽거나 변경할 수 있지만이를 사용하여 여러 노드의 레코드 모음 또는 "스트림"에서 고속, 읽기 전용, 맵 축소 작업을 수행하는 것이 가장 좋습니다.

Aerospike를 얻을 수있는 곳

Aerospike의 커뮤니티 에디션은 Aerospike 웹 사이트에서 직접 다운로드 할 수 있습니다. 여기에는 Linux 용 서버 버전, Apple의 MacOS 및 Microsoft Windows 용 데스크톱 버전, Amazon EC2, Azure 및 Google Compute Engine 용 클라우드 버전, Docker 컨테이너가 포함됩니다. Aerospike의 엔터프라이즈 에디션은 무제한 90 일 평가판을 제공하는 Aerospike의 Quick Start 프로그램을 통해 사용할 수 있습니다.

소스 코드는 GitHub에서 사용할 수 있습니다.

Hazelcast IMDG 키-값 NoSQL 데이터베이스 심층

Hazelcast는 기본적으로 여러 시스템에 걸쳐 RAM 및 CPU 리소스를 풀링하여 데이터 세트를 해당 시스템에 분산하고 메모리 내에서 조작 할 수있는 방법 인 "인 메모리 데이터 그리드"로 청구됩니다.

NoSQL 데이터베이스는 키-값, 그래프 또는 문서 기능을 제공합니다. Hazelcast는 분산 데이터에 대한 빠른 액세스를 강조하면서 키-값 기능에 집중합니다. 제조업체에 따르면 Pivotal Gemfire, Software Terracotta 및 Oracle Coherence와 같은 제품의 대안으로 사용할 수도 있습니다.

Hazelcast는 분산 서비스로 실행되거나 Java 애플리케이션에 직접 포함될 수 있습니다. 클라이언트는 Java, Scala, .Net, C / C ++, Python 및 Node.js에서 사용할 수 있으며 Go 용 클라이언트가 현재 작동 중입니다.

Hazelcast 고유의 기능

Hazelcast는 Java로 구축되었으며 Java 중심 에코 시스템을 갖추고 있습니다. Hazelcast 클러스터의 각 노드는 JVM에서 Hazelcast의 핵심 라이브러리 인 IMDG 인스턴스를 실행합니다. Hazelcast가 데이터와 함께 작동하는 방식도 Java의 언어 구조와 밀접하게 매핑됩니다. 예를 들어 Java의 Map 인터페이스는 Hazelcast에서 키-값 저장소를 제공하는 데 사용됩니다. Memcached와 마찬가지로 디스크에는 아무것도 기록되지 않습니다. 모든 것이 항상 메모리에 보관됩니다.

Hazelcast가 분산 환경에서 제공 할 수있는 한 가지 이점은 일반적으로 요청되는 개체가 요청을 수행하는 서버로 마이그레이션되는 "캐시 근처"입니다. 이러한 방식으로 네트워크를 왕복 할 필요없이 동일한 시스템의 메모리 내에서 직접 요청을 수행 할 수 있습니다.

키-값 쌍 외에도 Hazelcast를 통해 다른 많은 종류의 데이터 구조를 저장하고 배포 할 수 있습니다. 일부는 Map과 같은 Java 객체의 간단한 구현입니다. 다른 것들은 Hazelcast에만 해당됩니다. 예를 들어 MultiMap은 동일한 키에 여러 값을 저장할 수있는 키-값 저장소의 변형입니다. 이러한 기능을 사용하면 데이터를 문서로 구성하는 등 다른 NoSQL 시스템의 일부 동작을 에뮬레이션 할 수 있지만 데이터를 빠르게 배포하고 액세스 할 수있는 구조에 중점을 둡니다.

Hazelcast가 클러스터링을 처리하는 방법

Hazelcast 클러스터에는 마스터 / 슬레이브 설정이 없습니다. 모든 것이 피어 투 피어입니다. 데이터는 클러스터의 모든 구성원에 자동으로 분할되고 배포됩니다. 또한 특정 클러스터 멤버를 "라이트"로 지정할 수도 있습니다.이 멤버는 처음에는 데이터를 보유하지 않지만 나중에 정식 멤버로 승격 될 수 있습니다. 이를 통해 일부 노드는 계산에 엄격하게 사용되거나 온라인 상태가되는 동안 클러스터를 통해 점진적으로 데이터를 배포 할 수 있습니다.

Hazelcast는 또한 최소한 특정 수의 노드가 온라인 상태 인 경우에만 작업이 진행되도록 할 수 있습니다. 그러나이 동작을 수동으로 구성해야하며 특정 데이터 구조에 대해서만 작동합니다. Hazelcast 버전 3.9부터는 먼저 오프라인으로 전환하지 않고도 클러스터 전체에서 데이터 구조를 재구성 할 수 있습니다.

Hazelcast를 얻을 수있는 곳

Hazelcast는 Hazelcast 사이트에서 직접 다운로드 할 수 있습니다. 일반적으로 Java .JAR 파일 모음으로 배포됩니다. Docker 이미지는 공식 Docker 레지스트리에서도 사용할 수 있습니다.

Hazelcast에서 직접 Hazelcast 엔터프라이즈 버전을 다운로드 할 수 있습니다. Hazelcast 용 30 일 무료 평가판 키를받을 수도 있습니다.

Memcached 키-값 NoSQL 데이터베이스 심층

Memcached는 키-값 저장소만큼 기본적이고 빠릅니다. 원래 블로깅 플랫폼 LiveJournal의 가속화 계층으로 작성된 Memcached는 이후 웹 기술 스택의 유비쿼터스 구성 요소가되었습니다. 간단한 키와 연결할 수 있고 캐시 인스턴스간에 복제 할 필요가없는 작은 데이터 조각이 많은 경우 Memcached가 올바른 도구입니다.

Memcached 고유의 기능

Memcached는 데이터베이스에서 쿼리를 캐싱하고 결과를 독점적으로 메모리에 보관하는 데 가장 일반적으로 사용됩니다. 그런 점에서 다른 많은 NoSQL 데이터베이스, 키-값 또는 다른 것과는 달리 데이터를 영구적 인 형태로 저장하기 때문입니다. 

Memcached는 데이터 저장소를 아무것도 백업하지 않습니다. 모든 키는 메모리에만 보관되므로 Memcached 인스턴스 또는이를 호스팅하는 서버가 재설정 될 때마다 사라집니다. 따라서 Memcached는 실제로 NoSQL 데이터베이스를 대체 할 수 없습니다.

하지만이를 위해 사용할 수있는 것은 소스에서 쿼리하는 데 수십 배 더 많은 시간이 걸릴 수있는 일반적으로 사용되는 데이터를 숨길 수있는 고속 방법입니다.

바이너리 스트림으로 직렬화 할 수있는 모든 데이터는 Memcached에 숨길 수 있습니다. 값은 애플리케이션의 값에 대한 키를 참조하여 특정 시간 후 또는 요청시 만료되도록 설정할 수 있습니다. 특정 Memcached 인스턴스에 할당하는 메모리 양은 전적으로 사용자에게 달려 있으며 여러 서버에서 Memcached를 나란히 실행하여 부하를 분산시킬 수 있습니다. 또한 Memcached는 다중 스레드 애플리케이션이기 때문에 시스템에서 사용 가능한 코어 수에 따라 선형 적으로 확장됩니다.

가장 많이 사용되는 프로그래밍 언어에는 Memcached 용 클라이언트 라이브러리가 있습니다. 예를 들어 libmemcachedC 및 C ++ 프로그램이 Memcached 인스턴스와 직접 작동하도록 허용합니다. 또한 Memcached를 C 프로그램에 포함시킬 수 있습니다.

Memcached가 클러스터링을 처리하는 방법

동일한 서버에서든 네트워크의 여러 노드에서든 Memcached의 여러 인스턴스를 실행할 수 있지만 인스턴스간에 데이터의 자동 연합 또는 동기화는 없습니다. Memcached 인스턴스에 삽입 된 데이터는 해당 인스턴스 기간에서만 사용할 수 있습니다.

Memcached를 얻을 수있는 곳

Memcached의 소스 코드는 GitHub 및 공식 Memcached 사이트에서 다운로드 할 수 있습니다. Linux 바이너리는 대부분의 Linux 배포에 대한 저장소에서 사용할 수 있습니다. Windows 사용자는 소스에서 직접 빌드 할 수 있습니다. 일부 비공식 바이너리는 과거에 빌드되었지만 안정적으로 사용할 수없는 것으로 보입니다.

Microsoft Azure Cosmos DB 키-값 NoSQL 데이터베이스 심층

대부분의 데이터베이스에는 문서 저장소, 키-값 저장소, 넓은 열 저장소, 그래프 데이터베이스 등 하나의 중요한 패러다임이 있습니다. Azure Cosmos DB는 아닙니다. Microsoft의 NoSQL 서비스로서의 데이터베이스 인 DocumentDB에서 파생 된 Cosmos DB는 여러 패러다임을 사용할 수있는 단일 데이터베이스를 만들려는 Microsoft의 시도입니다.

Azure Cosmos DB에 고유 한 기능

Cosmos DB는 원자-레코드-시퀀스 스토리지 시스템을 사용하여 다양한 데이터 모델을 지원합니다. Atom은 문자열, 정수 및 부울 값과 같은 기본 유형입니다. 레코드는 C의 구조체와 같은 원자의 모음입니다. 시퀀스는 원자 또는 레코드의 배열입니다.

Cosmos DB는 이러한 구성 요소를 사용하여 여러 데이터베이스 유형의 동작을 복제합니다. 기존의 관계형 데이터베이스에서 볼 수있는 테이블의 동작을 재현 할 수 있습니다. 그러나 스키마없는 JSON 문서 (DocumentDB 및 MongoDB) 및 그래프 (Gremlin, Apache TinkerPop)와 같은 NoSQL 시스템에있는 데이터 유형의 기능도 재현 할 수 있습니다.