SQL 데이터베이스는 매우 유용한 도구 이지만, 독점이 15 년 솔로 쇼 후 휴식. 그것은 단지 시간 문제: 관계형 데이터베이스를 사용 하지만 수요에 적응 하지 못하는 수많은 발견을 강요.
하지만 NoSQL 데이터베이스 사이의 차이점은 두 개의 SQL 데이터베이스 사이의 차이 보다 훨씬 더 큰. 즉, 소프트웨어 아키텍트는 프로젝트의 시작 부분에 적합 한 NoSQL 데이터베이스를 선택 해야 합니다. 이러한 맥락에서 비교 카산드라, Mongodb, CouchDB, Redis, Riak, Membase, neo4j, 및 HBase 만들어집니다.
(1:nosql 참고: 새로운 혁명 데이터베이스 운동, NoSQL 지지자 관계형 데이터 저장소를 사용.) 오늘날의 컴퓨터 아키텍처 데이터 스토리지의 확장성의 거 대 한 수준이 필요로 이며 NoSQL 현 상태를 변경 하기 위해 최선을 다하고 있습니다. Google의 BigTable과 아마존의 디나모 NoSQL 데이터베이스를 사용 하는. NoSQL 항목을 참조 하십시오. )
1입니다. CouchDB
사용 언어: Erlang
특징: DB 일관성, 사용 하기 쉬운
사용 라이센스: 아파치
계약: Http/휴식
양방향 데이터 복제
지속적인 또는 임시 처리
프로세스 충돌 검사,
따라서, 사용 하 여 마스터-마스터 복제 (참고 2 참조)
MVCC 쓰기 읽기 작업을 차단 하지 않습니다.
파일을 저장할 수 전에 버전
충돌 전용 (신뢰할 수 있는) 디자인
필요한 데이터 압축
조회: 임베디드 매핑/감소
보기 형식: 목록 표시
서버 쪽 문서 유효성 검사에 대 한 지원
지원 인증
라이브 업데이트 변경 내용에 따라
첨부 파일 처리에 대 한 지원
따라서, Couchapps (독립 실행형 JS 응용 프로그램)
Jquery 라이브러리를 필요
적은 데이터 변경, 미리 정의 된 쿼리 및 데이터 통계의 실행에 대 한 가장 좋은 연습 시나리오: 응용 프로그램. 데이터 버전에 대 한 지원을 제공 하는 응용 프로그램에 적용 됩니다.
예: CRM, CMS 시스템. 마스터-마스터 복제는 다중 사이트 배포에 대 한 유용 합니다.
(2:master-마스터 복제: 데이터베이스 동기화 하는 메서드를 데이터를 컴퓨터 그룹에는 팀의 모든 구성원에 의해 그룹에서 업데이트할 수 있습니다.) )
2입니다. redis
사용 언어: C + +
기능: 비정상적으로 빨리 실행
사용 하 여 라이센스: BSD
프로토콜: 클래스 텔넷
하드 디스크 스토리지와 메모리 데이터베이스 지원,
그러나, 버전 2.0 (주 후 2.4는 기능이 지원 되지 않습니다) 이후 하드 디스크에 데이터를 교환할 수 있습니다. )
마스터-슬레이브 복사 (참고 3 참조)
간단한 데이터 또는 해시 테이블 키 값으로 인덱싱된 사용 되더라도, Zrevrangebyscore 등의 복잡 한 작업을 지원 됩니다.
INCR & Co (제한 또는 통계 데이터를 계산에 적합)
지원 세트 (또한 지원 연합/비교/간)
지원 목록 (또한 지원 대기열, 차단 팝업 작업)
해시 테이블 (여러 도메인 개체)에 대 한 지원
지원 종류 세트 (높은 점수 테이블, 범위 쿼리에 적합)
Redis 지원 서비스
(빠른 버퍼 디자인 비슷합니다) 만료 데이터에 데이터를 설정 하는 지원
Pub/sub 메시지 메커니즘을 구현 하는 사용자 수
최상의 연습 시나리오: 응용 프로그램에 적합 한 빠른 데이터 변경 내용 및 데이터베이스 크기 (메모리 크기)에 대 한 충족 될 수 있다.
예: 주식 실시간 통신, 실시간 데이터 수집, 데이터 분석, 가격.
(3:master-슬레이브 복제: 경우에 한 서버에 동시에 모든 복제 요청을 처리,이 마스터-슬레이브 복제를 불리고 종종 고가용성을 필요로 하는 서버 클러스터에 적용 됩니다.) )
3입니다. MongoDB
언어: C + +
특징: SQL (쿼리, 인덱스) 어떤 친절 한 기능 보존.
사용 하 여 라이센스: AGPL (개시자: 아파치)
프로토콜: 사용자 정의 이진 (Bson)
마스터/슬레이브 복제 (지원 자동 오류 복구, 복제 세트를 사용 하 여)
Built-in 분할 장치
자바 식 쿼리에 대 한 지원
서버 쪽에서 임의의 JavaScript 함수를 실행할 수 있습니다.
위치에서 업데이트 지원 couchdb 보다 낫다
데이터 저장에서 파일 매핑 메모리
기능 요구 사항에 대 한 성능 우려
로깅을 설정 하는 것이 좋습니다 (매개 변수-저널)
데이터베이스 크기는 32 비트 운영 체제에서 약 2.5 g b로 제한
빈 데이터베이스 192 메가바이트 약 차지
Gridfs 큰 데이터 나 메타 데이터 (진짜 파일 시스템)를 사용 하 여
최상의 연습 시나리오: 동적 쿼리 지원에 대 한 인덱싱 맵/리듀스 기능, 성능 보다 큰 데이터베이스, COUCHDB를 사용 하지만 메모리의 전체 데이터를 너무 자주 변경 되므로 응용 프로그램에 대 한 요구 사항.
예를 들어 당신은 MySQL 또는 PostgreSQL을 사용 하도록 것 이라고 하지만 미리 정의 된 그들의 자신의 바 때문에 낙 심 수 있습니다.
4입니다. Riak
사용 언어: Erlang과 C, 그리고 일부 자바 스크립트
특징: 결함 허용 능력
사용 라이센스: 아파치
프로토콜: http/나머지 또는 사용자 지정 이진
조정 가능한 배포 및 복제 (N, R, W)
전이나 작업 후 인증 및 보안 지원 JavaScript 나 Erlang을 사용 합니다.
Map/reduce에 대 한 JavaScript 나 Erlang을 사용 하 여
연결 및 연결 탐색: 그래픽 데이터베이스로 사용할 수 있습니다
인덱스: 검색에 대 한 메타 데이터를 입력 (1.0 버전 지원)
큰 데이터 개체 지원 (Luwak)
"오픈 소스" 및 "기업"의 두 가지 버전을 제공 합니다.
전체 텍스트 검색, 색인, Riak 검색 서버 (베타)를 통해 쿼리
Masterless 다중 사이트 복제 및 상업용 라이센스에 대 한 SNMP 모니터링 지원
최상의 연습 시나리오: 경우 있는 카산드라 (발전기와 유사)와 비슷한 데이터베이스를 사용 하려고 하지만 볼록 및 복잡성을 처리할 수 없습니다. 여러 사이트를 복제 하는 단일 사이트에 대 한 확장성, 가용성 및 오류 처리 하려는 상황에 적용 됩니다.
예: 판매 데이터 수집, 공장 제어 시스템, 가동 중지 시간에 대 한 엄격한 요구 사항을 쉽게 업데이트 웹 서버로 사용할 수 있습니다.
5입니다. Membase
사용 언어: Erlang과 C
특징: Memcache, 하지만 둘 다 영구 호환 및 지원 클러스터
사용 라이센스: 아파치 2.0
프로토콜: 분산 캐싱 및 확장
매우 빠른 (200 k + 초), 키 값을 통해 데이터를 색인
하드 디스크를 영구 저장소
모든 노드는 고유 (마스터-마스터 복제)
메모리에 유사한 분산 캐싱을 지 원하는 캐시 셀
데이터를 쓸 때 중복 데이터를 제거 하 여 IO를 감소
매우 좋은 클러스터 관리 웹 인터페이스를 제공 합니다.
소프트 소프트웨어를 업데이트할 때 데이터베이스 서비스를 중지 하는 데 필요한
연결 에이전트를 지 원하는 연결 풀링 및 멀티플렉싱
낮은 대기 시간 데이터 액세스, 높은 동시성 지원 및 고가용성을 필요로 하는 응용 프로그램에 대 한 최상의 시나리오
예: 광고 대상 응용 프로그램과 같은 낮은 대기 시간 데이터 액세스, 온라인 게임 (Zynga, 예) 등 높은 동시 웹 응용 프로그램
6입니다. neo4j
언어: 자바
기능: 그래프 데이터베이스 관계에 따라
사용 하 여 라이센스: GPL, 일부 기능을 사용 하 여 agpl/사업 등록증
프로토콜: Http/나머지 (또는에서 포함 된 Java)
독립적으로 사용할 수 있습니다 또는 Java 응용 프로그램에 포함 된
노드 및 가장자리는 그래프의 메타 데이터를 가질 수 있습니다.
좋은 자기-웹 관리 기능
경로 검색을 지원 하기 위해 여러 알고리즘을 사용 하 여
인덱스 키 값 및 관계를 사용 하 여
읽기 작업에 대 한 최적화
(Java API)와 거래를 지원
괴물 그래픽을 사용 하 여 언어를 통과 하
그루비 스크립트에 대 한 지원
온라인 백업, 고급 모니터링 및 agpl/비즈니스 라이센스를 사용 하 여 높은 신뢰성 지원에 대 한 지원
최고의 응용 프로그램 시나리오: 그래픽 형식 데이터에 적합. 이것은 neo4j 및 다른 NoSQL 데이터베이스의 가장 중요 한 차이
예: 사회 관계, 대 중 교통 네트워크, 지도 및 네트워크 확장
7입니다. 카산드라
언어: 자바
특징: 가장 큰 테이블 및 발전기에 대 한 지원
사용 라이센스: 아파치
계약: 사용자 정의 이진 (경제적)
조정 가능한 배포 및 복제 (N, R, W)
키 값의 범위와 함께 열 쿼리 지원
큰 테이블에 유사한 기능: 열, 특성에 대 한 열 컬렉션
쓰기 작업은 읽기 보다 빠른
만큼 가능한 맵/리듀스 아파치 분산된 플랫폼에 따라
나는 그것은 편견 카산드라, 부분적으로 때문에 그것의 자신의 비 대 하 고 복잡 한 자연, 그리고 자바 문제 (구성, 예외 등) 때문에 인정
최고의 시나리오: 자바 (아무도 아파치 소프트웨어 선택에 대 한 발생)에 각 시스템 빌드를 작성 해야 하는 경우 쓰기-이상-읽기 작업 (로깅)를 사용 하는 경우
예: 은행, 금융 (비록 금융 거래, 하지만이 산업에서는 보다 더 많은 데이터베이스에 대 한 필요 하지 않습니다) 그래서 자연 기능은 실시간 데이터 분석 보다 읽기, 쓰기
8입니다. HBase
(Ghshephard)와
언어: 자바
기능: 지원 수십억 행 x 열의 수백만
사용 라이센스: 아파치
계약: Http/휴식 (php/73 지원 "rel =" nofollow "스타일 =" 여백-가기: 0px; 여백-오른쪽: 0px; 여백-하단: 0px; 여백-왼쪽: 0px; 여백-가기: 0px; 여백-오른쪽: 0px; 여백-하단: 0px; 여백-왼쪽: 0px; 색상: rgb (68, 102, 187); 개요-폭: 0px; 개요-스타일: 초기; 개요-색상: 초기; "> 중고품, 참고 4 참조)
BigTable 후 모델링
맵/리듀스 분산 아키텍처를 사용 하 여
실시간 쿼리 최적화
고성능 중고품 게이트웨이
사전 검색 및 서버 쪽 필터링 쿼리 작업 계약
XML, protobuf, 및 이진 http 지원
계단식, 하이브, 및 돼지 소스 및 싱크 모듈
Shell Jruby (JIRB)에 기반
구성 변경 및 사소한 업그레이드가 롤백됩니다.
단일 지점 실패
MySQL에 비해 랜덤 액세스 성능
최상의 연습 시나리오: 기본 설정 bigtable에 적합: 대용량 데이터에 대 한 무작위, 실시간 액세스를 필요 합니다.
예: 페이 스 북 메시지 데이터베이스 (더 일반적인 사용 사례 출시 예정)
4:thrift 다른 언어, 페이스 북과 오픈 소스 개발의 다양 한 정 및 생성 서비스를 제공 하는 인터페이스 정의 언어 이다.
물론, 모든 시스템 위에 나열 된 이러한 기능 보다 더 있다. 여기 난 그냥 내 자신의 의견에 생각 하는 중요 한 기능 중 일부를 나열 합니다. 동시에 과학 기술 진도 이므로 빠른, 콘텐츠를 지속적으로 업데이트 해야 합니다. 나는 내가 할 수 있는 최대한이 목록을 업데이 트 됩니다.