NoSQL과 기존 RDBMS의 차이점은 무엇입니까?


71

NoSQL과 기존 RDBMS의 차이점은 무엇입니까?

지난 몇 달 동안 NoSQL은 기술 뉴스에서 자주 언급되었습니다. 기존 RDBMS와 비교하여 가장 중요한 기능은 무엇입니까? 차이는 어떤 수준 (물리적, 논리적)으로 발생합니까?

NoSQL을 사용하기 가장 좋은 곳은 어디입니까? 왜?

답변:


61

NoSQL은 "SQL뿐만 아니라"의 약자이며 일반적으로 데이터베이스가 관계형 데이터베이스가 아니므로 지난 수십 년 동안 매우 인기가있었습니다.

지난 몇 년 동안 NoSQL이 인기를 얻은 이유는 주로 관계형 데이터베이스가 하나의 서버에서 커질 때 더 이상 사용하기 쉽지 않기 때문입니다. 다시 말해, 분산 시스템에서는 확장 성이 떨어집니다. Google, Yahoo, Facebook 및 Amazon (Digg에 대해 잘 모르겠습니다)을 언급 한 모든 대형 사이트에는 여러 가지 데이터가 있으며 여러 가지 이유로 분산 시스템 에 데이터를 저장합니다 . 데이터가 하나의 서버에 맞지 않거나 고 가용성에 대한 요구 사항이있을 수 있습니다.

CAP 정리

분산 시스템의 속성은 CAP 정리에 의해 설명 될 수 있습니다 . 세 가지 속성 중 최대 두 개만 가질 수 있습니다.

  • C 반발
  • vailability
  • 네트워크 P 부여에 대한 내성

Amazon Dynamo는 Evental Consistency 를 사용 하여 세 가지 속성을 모두 확보합니다. Dynamo : Amazon의 고 가용성 키-값 저장소 ( High -Available Key-value Store ) 백서 는 NoSQL 데이터베이스 및 분산 시스템에 대해 배울 때 읽을 가치가 있습니다. Amazon Dynamo에는 A 및 P 속성이 있습니다.

Google은 BigTable 을 사용하여 C 및 A 속성 이있는 다른 접근 방식을 취 합니다.

다른 NoSQL 데이터베이스

처음에 썼 듯이 다른 요구 사항에 맞게 설계된 다른 종류의 NoSQL 데이터베이스가 있습니다. 예를 들어 Neo4j 와 같은 그래프 데이터베이스 , CouchDB 와 같은 문서 데이터베이스 및 OrientDB 와 같은 다중 모델 / 객체 데이터베이스 .

마지막으로 관계형 데이터베이스는 계속 인기를 유지하고 싶습니다. 매우 유연하고 유지 관리가 가능합니다. 그러나 항상 최선의 선택은 아닙니다.


1
좋은 대답입니다.
TML

NoSQL은 비 관계형을 의미하지 않으며 단지 SQL DBMS 이외의 것을 의미합니다.
nvogel

1
최근의 O'Reilly Strata Conference에서 Mark Madsen은 "SQL뿐만 아니라"를 대체하기 위해 데이터베이스의 역사 에서 "NoSQL"에 대한 새로운 해석을 만들어 낸 것 같습니다 . "No, SQL";-)
Lukas Eder

6
"아니오"는 개장일뿐 아니라 초기 NoSQL 운동은 관계형 데이터베이스에 대해 열악한 것이었다. 그런 다음 그들은 실제 세계를 강타했습니다.
Gaius

22

NoSQL은 매우 광범위한 용어이며 일반적으로 "SQL뿐만 아니라"를 의미합니다. 비 RDBMS 커뮤니티에서는이 용어가 유리하지 않습니다.

NoSQL 데이터베이스에는 공통적 인 특성이 거의 없습니다. 그것들은 대략 몇 가지 범주로 나눌 수 있습니다 :

  • 키 / 값 저장소
  • 영감을 얻은 Bigtable 데이터베이스 (Google Bigtable 논문을 기반으로 함)
  • 다이너 모 영감 데이터베이스
  • 분산 데이터베이스
  • 문서 데이터베이스

이것은 큰 질문이지만이 분산 데이터베이스 설문 조사 에서 상당히 잘 대답되었습니다 .

짧은 대답 :

NoSQL 데이터베이스는 파티션 허용 오차, 성능,로드 분산 또는 새로운 하드웨어 추가로 선형 확장 할 수있는 다른 이점을 얻기 위해 ACID의 다양한 부분을 생략 할 수 있습니다.

사용시기까지는 전적으로 응용 프로그램의 요구에 달려 있습니다.


12

NoSQL은 전통적인 RDBMS처럼 고정 스키마가없는 일종의 데이터베이스입니다. NoSQL 데이터베이스를 사용하면 런타임시 개발자가 스키마를 정의합니다. 데이터베이스에 대해 일반 SQL 문을 쓰지 않고 대신 API를 사용하여 필요한 데이터를 얻습니다. NoSQL 데이터베이스는 일반적으로 찾고있는 데이터가 어떤 서버인지 알 필요없이 다른 물리적 서버로 쉽게 확장 할 수 있습니다.

그러나 NoSQL 데이터베이스는 SQL Server, Oracle, DB2, MySQL 등과 같은 RDBMS 시스템에 비해 기능이 부족합니다. Service Broker, 트랜잭션 로깅, ETL 패키지 등은 없습니다.

NoSQL은 새로운 것이 아닙니다. 실제로 50-60 년 동안있었습니다. 당시에는 COBOL이라고 불 렸습니다. 똑같은 생각, 다른 그룹이 생각해 냈습니다.


3
쓰기 성공 여부에 상관없이 데이터베이스에 명시 적으로 지시하지 않는 한 많은 (모든?) NoSQL 데이터베이스에 대해 포인트 1이 올바르지 않습니다. 예를 들어 하둡 기반의 모든 데이터베이스는 세 곳의 데이터를 쓸 수 없거나 지저분합니다. 기본적으로 Cassandra는 세 위치에 쓰고 두 개가 성공하면 쓰기가 성공한 것으로 인식합니다.
예레미아 페 쉬카

3
이러한 업데이트를 수행 할 때 동시성을 어떻게 처리합니까? 그들 사이에 분산 형 트랜잭션이 있습니까, 아니면 쓰기가 ACK되어 있고 서버가 백그라운드에서 나머지를 처리합니까?
mrdenny

동시성은 전적으로 구현에 달려 있습니다. Riak은 벡터 클럭을 사용하여 동시성을 보장하며 쓰기가 충돌하는 경우 호출을 위해 호출 응용 프로그램으로 반환 될 수 있습니다. 다른 사람들은 마지막 쓰기 승리를 사용합니다.
예레미아 페 쉬카

쓰기 승인 인 한, 대부분의 경우 OS가 쓰기를 승인 할 때까지 쓰기가 승인되지 않습니다. 내구성있는 쓰기에 대한 승인을 요청하기 위해 갈 수도 있습니다. 즉, 비트가 실제로 OS 버퍼에 있지 않고 디스크로 플러시됩니다. MongoDB는 기본적으로 메모리 쓰기를 승인하지만 디스크 쓰기 승인을 요구하도록 구성 할 수 있습니다. 복제는 모든 제품마다 다르게 처리됩니다. Hadoop을 사용하면 클라이언트는 C에 쓰는 B에 쓰는 서버 A에 씁니다. C가 응답하면 쓰기가 완료되고 클라이언트가 쓰기 ack를받습니다.
예레미야 페 쉬카

그 경우에 나는 서 있습니다. 잘못된 진술을 삭제했습니다. FUBAR 다른 거 있었어?
mrdenny

6

기본적으로 관계형 설정, 기본 및 외래 키, 트랜잭션 안전 유지와 관련된 추가 오버 헤드를 사용하면 성능이 크게 향상됩니다. 그러나 이것은 MySQL이 계층을 우회함으로써 "NoSQL 레벨"에서 수행되도록 조정 되었기 때문에 새로운 데이터베이스 / 데이터 저장소에 고유하지 않습니다.

간단히 말해서, 데이터 손실 가능성이 높은 경우 종종 인상적인 성능을 얻을 수 있습니다. 대부분의 NoSQL 시스템이이를 수행합니다. 예를 들어 MongoDB는 편리 할 때 데이터 변경 내용을 기록합니다. 데이터 자체는 안전하고 트랜잭션 방식으로 안전하지만 휘발성 저장소 (메모리)에 보관됩니다. 전원이 꺼지면 데이터를 잃지 않았거나 데이터가 손상되지 않았 음을 100 % 확신 할 수 없습니다.

보안과 성능 사이의 균형입니다.


5

시작하기 좋은 곳은 Wikipedia 항목 입니다. 본질적으로 한 테이블의 데이터를 다른 테이블의 데이터와 관련 시키면 키 값 쌍으로 항목을 저장하고 데이터베이스 스키마가 없으며 대신 코드에서 처리됩니다.

일부 사이트는 NoSQL과 일반 RDBMS 서버를 동시에 사용하지만 다른 데이터를 저장합니다. 따라서 하나 또는 다른 것을 선택할 필요가 없습니다.


WP로 이동 하여이 질문의 대부분을 대답 할 수 있다는 사실은 여기서 대답을 숙고하면서 턱을 문지릅니다. 나는 그것이 너무 "충분한 질문"이라고 생각하지만, 이것이 우리가 지금 가진 전부입니다.
jcolebrand

1
여기서 중요한 점은 데이터베이스 / 서버 인프라에서 관계 해제 (외부 키) 지원이 참조 무결성을 유지 관리하는로드 및 잠금 관리 오버 헤드로부터 데이터베이스 / 서버를 덜어 준다는 것입니다. 그 결과 트레이드 오프 (trade-off)는 참조 무결성, 일관성 및 기타 ACID 문제가 응용 프로그램으로 전달됩니다. 많은 응용 프로그램이 이것에 의해 제한되는 것이 아니라 이로부터 이익을 얻습니다. (일부 응용 프로그램은 클라이언트 / 서버 모델에 연결해야합니다).
Jim Dennis

0

MongoDB NoSQL 데이터베이스 및 Oracle에서 많은 작업을 수행했습니다.

개요

SQL 데이터베이스에는 구조화 된 데이터를 저장하기 위해 자체 사전 정의 된 스키마가 있습니다.

NoSQL 데이터베이스에는 사전 정의 된 스키마가 없습니다. 여기서 스키마는 데이터 요소를 기반으로하는 가장 동적 요소입니다.

확장 성

SQL 데이터베이스는 수직 확장이 가능하므로 SQL 기반 데이터베이스를 확장하려면 DBMS 시스템이 설치된 하드웨어를 강화해야합니다. 확장 성이 제한되는 경우가 있습니다.

NoSQL 데이터베이스는 수평 적으로 확장 가능하므로, 확장을 원한다면 더 많은 노드를 추가하고 자체 요구와 필요한 전력을 기반으로 배포 네트워크를 만들어야합니다. 이것이 데이터베이스의로드를 줄이는 방법입니다

데이터 검색

SQL 기반 데이터베이스에서 데이터를 정의하고 조작하기 위해 오늘날 매우 강력한 SQL (Structured Query Language)을 사용할 수 있습니다.

NoSQL 데이터베이스와 관련하여 쿼리는 수집 및 문서에 중점을 둡니다. 때로는 UnQL (Unstructured Query Language)이라고합니다. 이것은 여전히 ​​진화 단계에 있으므로 NoSQL 데이터베이스의 공급 업체마다 다릅니다.

주요 차이점에 대한 자세한 내용은 내 블로그 : SQL과 NoSQL 데이터베이스의 차이점

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.