NoSQL 시스템은 일반적으로 좋은 성능과 그때 왜 기능 광고? 그래서 많은 년, 다양 한 최적화 작업 기술, 데이터베이스 일반적으로 관계형 흡수는 매우 깊고, nosql 시스템 완료 다음, 결국에서 무엇 이며 관계형 데이터베이스의 성능에 제약 조건에 대 한 관계형 데이터베이스 개발 했다? 우리 http://www.aliyun.com/zixun/aggregation/9344.html의 관점에서이 문제를 보면 "> 시스템 설계."
1, 색인 지원입니다. 관계형 데이터베이스의 설립의 시작 부분에는 오늘날의 인터넷 응용 프로그램 확장성에 대 한 이러한 높은 수요가 만든 생각 아니 었, 따라서, 주요 고려 사항은의 디자인 사용자의 작업, 데이터베이스 인터페이스, 오라클 등 데이터베이스 회사 형성의 표준화를 촉진 하기 위해 SQL 언어의 생산을 단순화 하 고 업스트림과 다운스트림 산업 체인 개발을 주도. 관계형 데이터베이스 인덱싱, NoSQL 시스템 독립 실행형 저장소 엔진 순수 하 고 임의 읽기 및 기본 키를 기준으로 범위 쿼리를 지 원하는 지 원하는 데 필요한 MySQL의 InnoDB 스토리지 엔진 같은 독립 저장 엔진에 인덱스를 지원 합니다. NoSQL 시스템 사용자 테이블, user_id의 기본 키 및 사용자 이름을 포함 한 사용자 당 특성의 수 사진 ID (photo_id), 사진 URL, 고 photo_id NoSQL 시스템에서 색인을 생성 하는 경우 시스템 수준에서 인덱싱에 대 한 지원을 제공 합니다. 분산된 테이블, 2-튜플 그룹의 형성에 대 한 테이블의 기본 키를 유지할 수 있습니다. 관계형 데이터베이스 단일 저장소 엔진 수준에서 인덱스를 지원 하기 때문에, 시스템의 확장성 단일 저장소 엔진의 디자인은 매우 복잡 하므로 크게 감소 된다.
2, 트랜잭션 동시성 처리입니다. 잠금 세분성은 테이블 수준, 페이지 수준 또는 행 수준, 다중 버전 동시성 제어 메커니즘 MVCC, 트랜잭션 격리 수준, 교착 상태 감지, 롤백 및 등 같은 관계형 데이터베이스 트랜잭션 동시성에 대 한 이론의 집합이 있습니다. 그러나, 인터넷 애플 리 케이 션의 특성의 대부분은 덜 읽기의 비율 등 쓰기는 10:1, 고 거의 복잡 한 트랜잭션 요구 사항, 따라서 일반적으로 더 간단한 쓰기 시 복사 기술을 채택할 수 있습니다: 단일 스레드 쓰기, 다중 스레딩 읽기, 쓰기 때 복사-쓰기, 구현 쓰기 읽기 서비스에 영향을 미치지 않습니다. NoSQL 시스템의 가정 시스템의 설계를 간소화, 많은 작업의 오버 헤드를 감소 하 고 성능을 향상 시킵니다.
3, 동적 또는 정적 데이터 구조입니다. 관계형 데이터베이스 저장소 엔진은 항상 디스크 B + 트리, 성능을 향상 시키기 위해, 삽입 버퍼 집계 쓰기, 읽기 캐시 캐시 쿼리, 종종 구현 해야 리눅스 페이지 캐시 관리 메커니즘과 해야 할 수 있습니다. 읽기 및 쓰기 데이터베이스에서 서로, 상호 작용 그리고 쓰기 작업은 디스크에 데이터를 가끔 하는 필요 때문에 효율적인 성능. 그러나 즉, 관계형 데이터베이스 저장소 엔진의 데이터 구조는 일반적인, 동적으로 업데이트 된 B + 트리,, NoSQL 시스템에서 같은 bigtable은 sstable + memtable 데이터 구조, 데이터는 먼저 memtable의 메모리에 기록 특정 크기에 도달 하거나 sstable 파일을 생성 하는 디스크를 덤프 하기 전에 시간이 일정 금액 이상의 sstable 읽기 전용입니다. 관계형 데이터베이스 저장소 엔진 데이터 구조는 동적 B + 트리의 경우 다음 sstable은는 정렬 된 배열 주문. 그것은 분명 훨씬 간단 하 고 구현 하려면 동적 B + 트리를 구현 하 고 포함 하는 복잡 한 동시성 제어 보다 정렬 된 데이터를 보다 효율적인 메커니즘입니다.
4, 조인 작업입니다. 관계형 데이터베이스 저장소 엔진 수준에서 조인을 지원 해야 하 고 nosql 시스템 일반적으로 조인 구현은 응용 프로그램에 기반으로 하는 방법을 결정 합니다. 예를 들어, 두 테이블이 있습니다: 여러 항목, 사용자 테이블의 기본 키, 사용자와 관련 된 상품 특성 사용자 테이블에 저장 된 각 사용자 할 수 있습니다 사용자 테이블 및 상품 테이블, 상품 테이블의 주요 키 item_id, 상품 특성 등 상품 이름, 상품 URL, 등등. 일반적인 연습 모든 사용자 테이블에서 그리고 각 item_id 지정된 된 사용자의 item_id 즉 상품 테이블 쿼리 세부 사항에가 서, 많은 임의 디스크 읽기를 필연적으로 가져온다 데이터베이스 조인 작업을 수행 하는 응용 프로그램은 사용자의 모든 제품 하 고는 제품의 세부 사항을 표시 해야, 가정 그리고 조인 로컬 나쁜의 임의 읽기 제공, 하기 때문에 캐시의 효과 종종 제한 됩니다. NoSQL 시스템에서 우리가 자주 통합할 수 상품 테이블과 사용자 테이블 넓은 테이블을 중복 효율적에 대 한 쿼리 하지만 제품의 세부 정보를 저장 하는 있지만.
관계형 데이터베이스의 성능 병목은 종종 SQL 문을 구문 분석, 아니지만 완전 한 SQL 기능을 지원 하기 위해 필요에. 인터넷 기업에 대 한 문제는 응용 프로그램 성능 및 확장성, 요구 하 고 Dba 및 개발 엔지니어는 일부 인터페이스 편의성을 희생 하 여 손상 될 수 있는 성능 높은 수준 이다. 넓은 테이블의 사용과 같은 NoSQL 시스템 디자인의 일부 조인 작업, 인터넷 회사의 DBA와 개발 엔지니어는 또한, NoSQL 시스템에만이 제약 조건을 강화. 긴 안목으로 보면, 제약 조건 집합을 요약 하 고 확장성을 희생 하지 않고도 인터넷 애플 리 케이 션의 90%를 지 원하는 SQL의 하위 집합을 정의할 수 있습니다. 그것은 우리가 궁극적으로 원하는이 단계에 오면 NoSQL 기술 더 성숙한는 같아요. 때 우리는 디자인과 NoSQL 시스템을 사용 하 여, 우리 또한 제대로 우리의 생각을 다음과 같이 변형할 수 있다.
1, 데이터의 큰 금액입니다. 이 값은 테스트의 많은 통해 갈 필요가 종종, 레코드, 2000W, 데이터베이스 성능 등의 특정 숫자 보다 더 많은 발생 하는 MySQL을 사용 하는 과정에서 많은 사람들이 감소 하기 시작 했다. 그러나, 대부분의 nosql 시스템 확장성 있으며 가입에 대 한 넓은 테이블 접근 등 일부 공간 교환 관행 되므로 많은 양의 데이터를 지원할 수 있습니다.
2, 성능 예측이 쉽습니다. 복잡 한 동시성 제어로 인해 버퍼 넣고 읽기-쓰기 페이지 캐시, 같은 최적화 메커니즘 성능 추정 상대적으로 어렵습니다, 그리고 여러 번 경험이 나 테스트 시스템의 성능을 얻을 수 필요 합니다. 그런 다음, 저장소 엔진 및 동시성 제어 메커니즘, NOSQL 시스템 하드웨어의 성과 지표에 의해 시스템의 성능을 예측할 수 있습니다 하 고 성능 예측 더 운영 하실 수 있습니다 키를 누릅니다.
(책임 편집기: 루 광)