noSQL 데이터베이스가 SQL보다 확장 성이 뛰어난 이유는 무엇입니까?


98

최근에는 noSQL DBMS에 대해 많이 읽었습니다. 나는 CAP 정리 , ACID 규칙, 기본 규칙 및 기본 이론을 이해합니다. 그러나 왜 noSQL이 RDBMS보다 더 쉽게 확장 가능한지에 대한 리소스를 찾지 못했습니다 (예 : 많은 DB 서버가 필요한 시스템의 경우)?

제약 조건과 외래 키를 유지하는 데 리소스가 필요하고 DBMS가 배포되면 훨씬 복잡합니다. 그러나 나는 이것보다 훨씬 더 많은 것을 기대합니다.

noSQL / SQL이 확장성에 어떤 영향을 미치는지 설명해 주시겠습니까?


7
"제약과 외래 키를 유지하는 데 리소스가 필요하고 DBMS가 배포 될 때 훨씬 더 복잡하다고 생각합니다. 그러나 이보다 더 많은 것이있을 것으로 기대합니다." -사실입니다. 더 정확하게 말하면, 이는 대부분의 NoSQL 솔루션을 SQL 사촌 (특정 데이터 모델의 경우)보다 확장 성있게 만드는 공통된 특징 중 하나입니다. 그러나 NoSQL은 매우 모호한 용어이며, NoSQL 데이터베이스의 서로 다른 제품군은 서로 다른 특성으로 인해 확장 성이 뛰어납니다.
yannis

8
물론 SQL 데이터베이스는 수조 개의 레코드로 완벽하게 확장되므로 응용 프로그램 개발자가 갖지 않은 데이터베이스를 설계하고 설정하는 데 전문 지식이 필요합니다. 그리고 일반적으로 상당히 비싼 하드웨어 및 라이센스 세트.
HLGEM


6
내 생각 에이 질문은 그중 하나와 중복되지 않습니다. mongodb 질문은 사실보다 일반적인 다른 것을 요구하는 것입니다 (잘못된 제목을 제외하고는 더 구체적으로 보이게합니다). 다시 열기로 투표
Joeri Sebrechts

답변:


77

noSQL 데이터베이스는 본질적으로 SQL 데이터베이스가 제공하는 방대한 기능을 포기합니다.

참조 무결성, 트랜잭션 등의 자동 시행과 같은 것. 일부 문제에 대해 매우 편리하며 단일 서버 외부에서 확장하기 위해 흥미로운 기술이 필요합니다. 원자 트랜잭션을위한 테이블이며 다른 서버에 있습니다!).

noSQL 데이터베이스에는이 모든 것이 없습니다. 그 물건이 필요하다면 직접해야하지만 필요하지 않은 경우 (그리고 많은 응용 프로그램이 필요하지 않은 경우), 소년 짖는 소리가 운이 있습니다. DB는 이러한 복잡한 작업을 모두 수행 할 필요가 없으며 많은 데이터 세트에서 잠금을 수행 할 필요가 없으므로 많은 서버 / 디스크 / 무엇을 통해 파티션을 나누고 실제로 빠르게 작업 할 수 있습니다.


2
그것이 그렇게 단순하다는 것을 몰랐다
Abdul

7
이 허용 된 답변은 SQL에서 누락 된 NoSQL 샤딩 기능을 언급하지 못했습니다. 샤딩은 NoSQL을 수평 확장 할 수있게 만드는 것입니다.
hyankov

8
@HristoYankov 그리고 그것은 NoSQL 시스템이 샤딩과 잘 어울리지 않는 모든 것을하지 않기 때문에 작동합니다.
immibis

1
@HristoYankov : SQL 데이터베이스를 수평으로 분할 할 수 있으며 모든 NoSQL 데이터베이스를 수평으로 쉽게 분할 할 수있는 것은 아닙니다. 샤딩이 실제로 NoSQL을 사용하려는 이유는 아닙니다.
거짓말 라이언

@HristoYankov 받아 들여진 대답은 "SQL에서 빠진 NoSQL 샤딩 기능을 완전히 언급하지 않았다"는 것보다 한 단계 깊숙이갑니다. 올바른 대답은 SQL 데이터베이스에서 WHY 수평 샤딩에 대해 이야기하는 것입니다. 사실, 나는 이것에 대한 답을 찾기 위해 20 분을 보냈으며, 거의 모든 사람들이 아무 이유도 언급하지 않고 "ohhNoSQL 샤드를 더 잘"출시했습니다. 완전히 쓸모없는 반응. 여기에 허용 된 답변은 아주 간단하지만 질문에 완벽하게 답변합니다. 더 많은 이유가 나열되어 있으면 좋을 것입니다.
Phoeniyx

175

NoSQL과 SQL에 관한 것이 아니라 BASE와 ACID에 관한 것입니다.

Scalable 은 다음과 같은 구성 요소로 분류되어야합니다.

  • 읽기 스케일링 = 대량의 읽기 작업 처리
  • 쓰기 스케일링 = 대량의 쓰기 작업 처리

기존 RDBMS와 같은 ACID 호환 데이터베이스는 읽기를 확장 할 수 있습니다. (가능한) 성능 병목 현상은 NoSQL (때로는 조인 및 제한과 같은)으로 인해 사용하지 않을 수 있기 때문에 NoSQL 데이터베이스보다 본질적으로 비효율적이지 않습니다. 클러스터 된 SQL RDBMS는 클러스터에 추가 노드를 도입하여 읽기를 확장 할 수 있습니다. 읽기 작업을 확장 할 수있는 범위에는 제한이 있지만 클러스터에 더 많은 노드를 도입 할 때 쓰기를 확장하기가 어렵 기 때문에 적용됩니다.

쓰기 스케일링은 문제가 많은 부분입니다. ACID 원칙에 의해 부과되는 다양한 제약이 있으며, 이는 일관된 기본 아키텍처에서 보이지 않습니다.

  • Atomicity는 거래가 전체적으로 완료되거나 실패해야 함을 의미하므로이를 보장하기 위해 많은 부기를 유지해야합니다.
  • 일관성 제약 조건은 클러스터의 모든 노드가 동일해야 함을 의미합니다. 한 노드에 쓰는 경우 클라이언트에 응답을 반환하기 전에이 쓰기를 다른 모든 노드에 복사해야합니다. 따라서 기존 RDBMS 클러스터를 확장하기가 어렵습니다.
  • 내구성 제약 조건은 쓰기를 잃지 않기 위해 응답이 클라이언트에 반환되기 전에 쓰기가 디스크로 플러시되었는지 확인해야합니다.

특정 지점을 넘어 클러스터의 쓰기 작업 또는 노드 수를 늘리려면 일부 ACID 요구 사항을 완화 할 수 있어야합니다.

  • 원자를 삭제하면 테이블 (데이터 세트)이 잠기는 기간을 단축 할 수 있습니다. 예 : MongoDB, CouchDB
  • 일관성 삭제를 사용하면 클러스터 노드에서 쓰기를 확장 할 수 있습니다. 예 : riak, cassandra.
  • Dropping Durability를 사용하면 디스크를 비우지 않고도 쓰기 명령에 응답 할 수 있습니다. 예 : memcache, redis.

NoSQL 데이터베이스는 일반적으로 ACID 모델 대신 BASE 모델을 따릅니다. A, C 및 / 또는 D 요구 사항을 포기하고 그에 따라 확장 성을 향상시킵니다. Cassandra와 같은 일부는 필요할 때 ACID 보증을 선택할 수 있습니다. 그러나 모든 NoSQL 데이터베이스가 항상 확장 가능한 것은 아닙니다.

SQL API에는 ACID 요구 사항이 완화 된 쿼리를 설명하는 메커니즘이 없습니다. 이것이 BASE 데이터베이스가 모두 NoSQL 인 이유입니다.

개인 참고 사항 : 내가 만들고 싶은 마지막 요점은 NoSQL이 현재 성능을 개선하는 데 사용되는 대부분의 경우 적절한 인덱스가있는 올바르게 정규화 된 스키마를 사용하여 적절한 RDBMS에서 솔루션을 사용할 수 있다는 것입니다. 이 사이트 (MS SQL Server 기반)에서 입증 한 바와 같이 RDBMS는 적절하게 사용하는 경우 높은 워크로드로 확장 할 수 있습니다. RDBMS를 최적화하는 방법을 이해하지 못하는 사람들은 데이터에 어떤 위험을 초래하는지 이해하지 못하기 때문에 NoSQL을 멀리해야합니다.

업데이트 (2019-09-17) :

이 답변을 게시 한 이후 데이터베이스 환경이 발전했습니다. RDBMS ACID 세계와 NoSQL BASE 세계 사이에는 여전히 이분법이 있지만, 그 선은 더 희미 해졌습니다. NoSQL 데이터베이스는 SQL API 및 트랜잭션 지원과 같은 RDBMS 세계의 기능을 추가했습니다. Google Cloud Spanner, YugabyteDB 또는 CockroachDB와 같이 SQL, ACID 쓰기 확장 을 약속하는 데이터베이스도 있습니다 . 일반적으로 악마는 세부 사항에 있지만 대부분의 경우 "충분히 ACID"입니다. 데이터베이스 기술과 그 발전 방식에 대해 자세히 살펴 보려면 이 슬라이드 데크를 살펴보십시오 (슬라이드 노트에는 함께 설명되어 있음).


일부 NoSQL 매장이 ACID를 BASE로 대체 한다는 데 동의하지만 , NoSQL "카테고리"에 해당하는 모든 매장에 공통적 인 기능은 아닙니다 . 얼마 지나지 않아이 용어의 해석은 "No SQL"에서 "SQL뿐만 아니라"로 전환되었지만 많은 데이터베이스가 여전히 JOIN을 수행하거나 SQLesque 방언을 구현하기 시작함에 따라 Mark Madsen은이 용어를 다른 의미로 다시 정의했습니다. no-tation에서 데이터베이스의 그의 역사 : "No, SQL" ;-)
Lukas Eder

2
조인을 피하기 위해 NoSQL에서 데이터를 비정규 화하여 반복 및 더 많은 스토리지로 연결합니다. 그러나 비정규 화로도 괜찮다면 RDBMS에서도 마찬가지입니다. 따라서 "조인"또는 "조인 없음"은 데이터베이스 유형이 아니라 DBA에 따라 다릅니다. 맞습니까?
Kaushik Lele

2
@dynamic 이러한 사이트는 과도한 캐싱을 사용하거나 샤드를 사용합니다. 이러한 설계는 데이터를 DB 외부로 확장하는 데 복잡성을 가중시킵니다. 이러한 경우 nosql을 사용하는 것이 좋습니다. 왜냐하면 nosql이 만드는 절충점이기 때문입니다.
Joeri Sebrechts

1
"SQL API에는 ACID의 요구 사항이 완화 된 쿼리를 설명하는 메커니즘이 없습니다." 기술적으로는 사실이지만 SQL Server는 그 방향으로 소심한 조치를 취했습니다. SQL 2014에서는 쓰기 로그 압력을 줄이면서 DID를 ACID로 완화하면서 지연된 내구성을 도입했습니다.
EBarr

3
허용되는 답변 imo 여야합니다. 예제는 매우 명확하지만 간결하게 유지합니다.
Olshansk

4

NoSQL 데이터베이스 (MongoDB, Redis, Riak, Memcached 등)는 외래 키 제약 조건을 유지하지 않으며 원자 연산을보다 명시 적으로 지정해야합니다. SQL 데이터베이스 (SQL Server, Oracle, PostgreSQL 등)는 노련한 DBA에 의해 매우 큰 성능 요구 사항을 처리하도록 확장 될 수 있습니다.

NoSQL 데이터베이스를 사용하면 경쟁 조건 및 원 자성 작업을 잘 알고있는 노련한 프로그래머가 오늘날의 웹 응용 프로그램 코드 중 적은 비율로만 필요한 대량의 처리를 포기할 수 있습니다. NoSQL 데이터베이스는 확실히 원 자성 연산을 가지며 SQL 데이터베이스에 존재하는 대부분의 모든 트랜잭션 요구 사항은 NoSQL 데이터베이스를 얻을 수도 있습니다. 차이점은 추상화 수준입니다. NoSQL 데이터베이스는 더 높은 수준의 추상화를 제거하고 해당 기능을 응용 프로그램 프로그래머에게 넘겨 주므로 비 시즌적인 프로그래머에 의한 데이터 손상 가능성이 높아져 코드 전체가 더 빨라집니다.

결과적으로 개발 시간과 성능이 매우 중요한 웹 애플리케이션 공간에서 NoSQL 데이터베이스가 점점 더 많이 사용되는 것을 볼 수 있습니다. 금융 및 기업 소프트웨어는 하드웨어 성능이 상대적으로 저렴하고 DBA에 대한 경험이 풍부하고 비 시즌적인 프로그래머로 인한 위험 증가가 만족스럽지 않기 때문에 SQL 유산을 유지할 가능성이 높습니다.


2
ACID의 의미에서 원자 트랜잭션에 대한 부분에 대해서는 잘 모르겠습니다. "NoSQL"에 대해서는 언급하기가 어렵지만 "우리가 정확히 무엇을 의미하는지에 대한 논란이 있기 때문입니다." "일반적인"NoSQL DB의 성능 향상은 대부분 일관성 보장을 느슨하게하여 달성됩니다 ( 최종 일관성 , ACID 및 BASE 참조). 최종 일관성이 응용 프로그램에 충분할 경우 (그리고 종종), 훨씬 더 효율적인 수평 확장이 가능합니다.
Daniel B

4

IBM developerWorks : NoSQL 데이터베이스로 클라우드 레벨 데이터 확장 성 제공

확장 성은 매우 낮은 대기 시간으로 요청 속도가 매우 높은 매우 큰 데이터베이스를 지원할 수있는 시스템입니다.

NoSQL 시스템에는 다음과 같은 여러 가지 디자인 기능이 있습니다.

  • 많은 서버에서 처리량을 수평으로 확장 할 수 있습니다.
  • 간단한 호출 레벨 인터페이스 또는 프로토콜 (SQL 바인딩과 대조).
  • 대부분의 기존 RDBMS에서 ACID 트랜잭션보다 약한 일관성 모델을 지원합니다.
  • 데이터 저장을 위해 분산 인덱스 및 RAM을 효율적으로 사용합니다.
  • 새로운 속성 또는 데이터 스키마를 동적으로 정의하는 기능.

관계형 데이터베이스가 스케일링에 최적이 아닌 이유

일반적으로 관계형 데이터베이스 관리 시스템은 수십 년 동안 "데이터 지속성 및 검색을위한 모든 규모의 솔루션"으로 간주되었습니다. 그들은 광범위한 연구 개발 노력을 거쳐 성숙해 왔으며 다양한 비즈니스 영역에서 대규모 시장과 솔루션을 성공적으로 창출했습니다.

확장 성과 새로운 애플리케이션 요구 사항에 대한 요구가 계속 증가함에 따라 일부 웹 스케일 애플리케이션에서이 모든 규모의 접근 방식에 대한 불만이 발생하는 등 기존 RDBMS에 새로운 과제가 발생했습니다. 이에 대한 답은 관계형 데이터베이스 관리 시스템의 지배에 도전하도록 설계된 차세대 저비용 고성능 데이터베이스 소프트웨어입니다. NoSQL의 움직임에 대한 큰 이유는 웹, 엔터프라이즈 및 클라우드 컴퓨팅 응용 프로그램의 구현마다 데이터베이스 요구 사항이 다르기 때문입니다. 예를 들어 모든 응용 프로그램에 엄격한 데이터 일관성이 필요한 것은 아닙니다.

또 다른 예 : eBay, Amazon, Twitter 또는 Facebook과 같은 대용량 웹 사이트의 경우 확장 성과 고 가용성은 타협 할 수없는 필수 요구 사항입니다. 이러한 응용 프로그램의 경우 약간의 중단이라도 중대한 재정적 영향을 미치고 고객의 신뢰에 영향을 줄 수 있습니다.

DBA.SE 이상 : 수평 스케일링이란 무엇입니까?

수평 스케일링은 기본적으로 구축되는 대신 구축됩니다. 더 큰 서버를 구입하지 않고 모든 부하를 서버로 옮기는 대신 1 대 이상의 추가 서버를 구입하여 서버간에 부하를 분산시킵니다.

수평 확장은 서버에서 여러 인스턴스를 동시에 실행할 수있는 경우에 사용됩니다. 일반적으로 1 서버에서 2 서버로 이동하는 것이 훨씬 어렵습니다. 그런 다음 2에서 5, 10, 50 등으로 이동합니다.

병렬 인스턴스 실행 문제를 해결 한 후에는 Amazon EC2, Rackspace 's Cloud Service, GoGrid 등의 환경을 활용하여 필요에 따라 인스턴스를 위 / 아래로 끌어 올릴 수 있으므로 서버 전력 비용을 절감 할 필요가 없습니다. 이러한 최대 부하를 다루기 위해 사용하지는 않습니다.

관계형 데이터베이스는 전체 읽기 / 쓰기를 병렬로 실행하기 어려운 항목 중 하나입니다.

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