관계형 데이터베이스 대신 NoSQL 데이터베이스를 언제 사용해야합니까? 같은 사이트에서 둘 다 사용해도 되나요?


141

NoSQL 데이터베이스를 사용하면 어떤 이점이 있습니까? 나는 최근에 그들에 대해 많은 것을 읽었지만, 왜 내가 그것을 구현하고 싶은지, 어떤 상황에서 내가 그것을 사용하고 싶은지 여전히 확실하지 않습니다.

답변:


84

관계형 데이터베이스는 ACID를 시행 합니다. 따라서 스키마 기반 트랜잭션 지향 데이터 저장소가 있습니다. 실제 응용 프로그램의 99 %에 입증되고 적합합니다. 관계형 데이터베이스로 실제로 무엇이든 할 수 있습니다.

그러나 대규모 고 가용성 데이터 저장소의 경우 속도 및 확장에 제한이 있습니다. 예를 들어 Google과 Amazon에는 빅 데이터 센터에 테라 바이트 단위의 데이터가 저장되어 있습니다. 이러한 시나리오에서는 RDBM의 차단 / 스키마 / 트랜잭션 특성으로 인해 쿼리 및 삽입이 수행되지 않습니다. 이것이 대규모 성능 향상과 확장 성을 위해 자체 데이터베이스 (실제로 키-값 저장소)를 구현 한 이유입니다.

NoSQL 데이터베이스는 오랫동안 사용되어 왔으며 새로운 용어입니다. 몇 가지 예는 그래프, 객체, 열, XML 및 문서 데이터베이스입니다.

두 번째 질문 : 같은 사이트에서 두 가지를 모두 사용해도 되나요?

왜 안돼? 둘 다 다른 목적으로 사용됩니까?


1
ACID가 관계형 데이터베이스에서만 사용할 수 있다고 생각하지 않습니다. 비 관계형 데이터베이스에서 내구성을 보장하고 트랜잭션을 보며 일관성을 볼 수 있습니다.
Thilo

@RamshVel 키-값 저장소 유형 데이터베이스의 예를들 수 있습니까? 감사.
Rachael

1
@Rachael, 몇 가지 예는 redis, leveldb 및 riak입니다. 주위에 많은 수의 구글이 있습니다
RameshVel

76

NoSQL 솔루션은 일반적으로 관계형 데이터베이스가 적합하지 않거나 Oracle과 같이 사용하기에는 너무 비싸거나 db의 관계형 특성을 어기는 것을 구현해야하는 문제를 해결하기위한 것입니다.

장점은 일반적으로 사용량에 따라 다르지만 RDBMS에서 데이터 모델링에 문제가없는 한 NoSQL을 선택해야 할 이유가 없습니다.

RDBMS가 실행 가능한 솔루션이 아닌 특정 문제, MySQL (또는 테스트를 위해 SQLite)을 사용하는 다른 모든 문제에 대해 MongoDB와 Riak을 사용합니다.

NoSQL db 가 필요한 경우 일반적으로 알고있는 가능한 이유는 다음과 같습니다.

  • 클라이언트는 트래픽이 많은 사이트에서 99.999 %의 가용성을 원합니다.
  • SQL에서는 데이터가 의미가 없으므로 일부 정보에 액세스하기 위해 여러 개의 JOIN 쿼리를 수행하고 있습니다.
  • 관계형 모델을 깨뜨리고 비정규 화 된 데이터를 저장하는 CLOB가 있으며 해당 데이터를 검색하기 위해 외부 인덱스를 생성합니다.

NoSQL 솔루션이 필요하지 않은 경우, 이러한 솔루션은 RDBMS를 대체하는 것이 아니라 전자가 실패하고 대체적으로 새로운 버그가 많은 대안이 아니라 여전히 버그가 많으며 누락 된 기능.

아, 그리고 두 번째 질문에 관해서는 다른 기술과 함께 어떤 기술을 사용하는 것이 완벽하므로 내 경험에서 완성되기 위해서는 MongoDB와 MySQL이 동일한 컴퓨터에 있지 않는 한 잘 작동합니다.


3
답변 해주셔서 감사합니다. NoSQL 사용시기에 대한 예는 모호합니다. 더 구체적인 사용 사례를 원했기 때문에 NoSQL 데이터베이스에 데이터가 더 잘 저장되는지 결정할 수 있습니다.
smfoote

같은 질문에 두 번 대답하지 않고 비슷한 질문에 대한 이전 답변을 살펴보십시오 stackoverflow.com/questions/3621415/…
Asaf

Asaf의 훌륭한 답변에 동의합니다. RDBMS를 통해 NoSQL이 필요한 시나리오는 거의 없습니다. NoSQL은 기본 db보다 백업 db 또는 "add-on db"로 간주됩니다. 코어 db가 NoSQL 인 좋은 시스템은 아직 보지 못했습니다.
Jo Smo

38

Martin Fowler는 NoSQL 데이터베이스에 대한 좋은 설명을 제공 하는 훌륭한 비디오 를 제공합니다. 링크는 그의 사용 이유와 직결되지만 전체 비디오에는 좋은 정보가 포함되어 있습니다.

  1. NoSQL은 확장 성이 뛰어나도록 설계 되었기 때문에 많은 양의 데이터가 있습니다. 특히 하나의 물리적 서버에 모두 맞지 않을 경우 더욱 그렇습니다.

  2. 개체 관계형 임피던스 불일치 -도메인 개체가 관계형 데이터베이스 스키마에 적합하지 않습니다. NoSQL을 사용하면 데이터를 문서 (또는 그래프)로 유지하여 데이터 모델에 훨씬 더 가깝게 매핑 할 수 있습니다.


16

NoSQL은 데이터가 문서 (MongoDB), 키-값 쌍 (MemCache, Redis), 그래프 구조 형식 (Neo4J)으로 구성된 데이터베이스 시스템입니다.

어쩌면 다음은 "NoSQL로 갈 때"에 대한 가능한 질문과 답변입니다.

  1. 유연한 스키마가 필요하거나 데이터와 같은 트리를 처리합니까?
    일반적으로 민첩한 개발에서는 모든 요구 사항을 사전에 알 필요없이 시스템 설계를 시작합니다. 나중에 개발 데이터베이스 시스템 전체에서 잦은 설계 변경을 수용하여 MVP (Minimal Viable Product)를 소개합니다. 또는 본질적으로 동적 인 데이터 스키마를 다루고 있습니다. 예를 들어 시스템 로그, 매우 정확한 예는 AWS 클라우드 워치 로그입니다.

  2. 데이터 세트가 방대하거나 큽니까?
    예 NoSQL 데이터베이스는 데이터베이스가 성능을 저하시키지 않으면 서 수백만 또는 수십억 개의 레코드를 관리해야하는 응용 프로그램에 더 적합한 후보입니다.

  3. 일관성 확장
    과의 균형 조정 RDMS와 달리 NoSQL 데이터베이스는 여기저기서 작은 데이터를 잃을 수 있지만 (참고 : 확률은 .x % 임) 성능 측면에서 쉽게 확장 할 수 있습니다. 예 : 인스턴트 메시징 앱에서 온라인 상태 인 사람, DB의 토큰, 웹 사이트 트래픽 통계 로깅에 유용합니다.

  4. Geolocation 작업 수행 : GeoQuerying & Geolocation 작업을위한 MongoDB 해시 지원. 나는 MongoDB 의이 기능을 정말 좋아했습니다.

간단히 말해, MongoDB는 동적으로 구조화 된 데이터를 대규모로 저장할 수있는 애플리케이션에 매우 적합합니다.


4
"NoSQL 데이터베이스는 여기저기서 작은 데이터를 잃을 수 있습니다"WTF !? 이제 올바른 마음에 누가 위험을 감수하고 싶습니까? 이것은 거짓이어야합니다.
Jay Q.

1
@JayQ. 예, 거짓 일 수 있습니다. 그것이 내가 어쩌면 그렇게 말한 이유입니다. 그렇다면 트랜잭션 작업에 NpSQL DB를 사용할 수없는 이유는 무엇입니까?
Hrishikesh

7

질문에 대한 몇 가지 필수 정보가 누락되었습니다. 데이터베이스는 어떤 유스 케이스를 포함해야합니까? 기존 데이터 ( OLAP ) 에서 복잡한 분석을 수행해야 합니까, 아니면 애플리케이션이 많은 트랜잭션 ( OLTP ) 을 처리 할 수 ​​있어야 합니까? 데이터 구조는 무엇입니까? 그것은 질문 시간의 끝과는 거리가 멀다.

제 생각에, 그 뒤에 무엇이 있는지 정확히 알지 못하고 대담한 유행어를 기반으로 기술 결정을 내리는 것은 잘못입니다. NoSQL은 종종 확장 성으로 칭찬을받습니다. 그러나 수평 스케일링 (여러 노드에 걸친)도 가격이 있으며 무료가 아님을 알아야합니다. 그런 다음 최종 일관성 과 같은 문제를 처리해야합니다. 과 하고 데이터베이스 수준에서 해결할 수없는 경우 데이터 충돌을 해결하는 방법을 정의해야합니다. 그러나 이것은 모든 분산 데이터베이스 시스템에 적용됩니다.

NoSQL에서 "schema less"라는 단어를 사용하는 개발자들의 기쁨 또한 처음에는 매우 큽니다. 이 버즈 워드는 기술 분석 후에는 작성시 스키마가 필요하지 않지만 읽을 때 작동하기 때문에 신속하게 마비됩니다. 이것이 바로 "스키마 온 스키마"가되어야하는 이유입니다. 자신의 재량에 따라 데이터를 쓰려고 할 수도 있습니다. 그러나 기존 데이터가 있지만 새로운 버전의 응용 프로그램이 다른 스키마를 기대하는 경우 상황을 어떻게 처리합니까?

문서 모델 (예 : MongoDB)은 적합하지 않습니다 데이터간에 많은 관계가있는 데이터 모델에는 . 조인은 응용 프로그램 수준에서 수행해야하며, 이는 추가적인 노력이며 데이터베이스가 수행해야하는 작업을 프로그래밍해야하는 이유입니다.

기존 RDBMS가 더 이상 데이터 플러드를 처리 할 수 ​​없기 때문에 Google과 Amazon이 자체 데이터베이스를 개발했다는 ​​주장을하는 경우 다음과 같이 말할 수 있습니다. Google과 Amazon이 아닙니다. 이 회사는 전통적인 데이터베이스가 더 이상 적합하지 않지만 나머지 세계에는 적합하지 않은 시나리오의 약 0.01 %를 이끄는 선두 주자입니다.

중요하지 않은 사항 : SQL 은 40 년 이상 사용되어 왔으며 수백만 시간의 개발이 Oracle 또는 Microsoft SQL과 같은 대규모 시스템에 적용되었습니다. 이것은 일부 새로운 데이터베이스에 의해 달성되어야합니다. 때로는 MongoDB 사용자보다 SQL 관리자를 찾는 것이 더 쉽습니다. 유지 보수 및 관리 문제가 발생합니다. 정확히 섹시하지는 않지만 기술 결정의 일부입니다.


1
올바른 것 같다하지만 난 경우 모두가 내가 오히려 항상 응용 프로그램과 쓰임새에 내려 오는 말을 자신의 응용 프로그램의 모든에서 어셈블리 언어를 사용하는 것입니다라고하면 그 또한 바로이 소요 된 시간을 비교하는 것 같아요
Gopherine

3

나는 RDBMS 디자인에서 벗어나는 설득력있는 근거를 찾는 동안이 질문에 부딪쳤다.

Julian Brown이 분산 시스템의 제약 조건을 밝히는 훌륭한 게시물 이 있습니다. 이 개념을 Brewer 's CAP 정리라고합니다.

분산 시스템의 세 가지 요구 사항은 일관성, 가용성 및 파티션 허용 오차 (간결한 CAP)입니다. 그러나 한 번에 두 개만 가질 수 있습니다.

그리고 이것이 내가 직접 요약 한 방법입니다.

Consistency가 희생하는 것이면 NoSQL을 사용하는 것이 좋습니다.


0

저는 NoSQL 데이터베이스를 사용하여 솔루션을 설계하고 구현했으며 여기에 SQL 또는 문서 지향 NoSQL 을 사용하기로 결정한 체크 포인트 목록이 있습니다.

하지마

SQL은 더 이상 사용되지 않으며 경우에 따라 더 나은 도구로 남아 있습니다. 문서 지향 NoSQL의 사용을 정당화하기는 어렵습니다.

  • OLAP / OLTP 필요
  • 작은 프로젝트 / 간단한 DB 구조입니다.
  • 임시 쿼리 필요
  • 즉각적인 일관성을 피할 수 없습니다
  • 불분명 한 요구 사항
  • 숙련 된 개발자 부족

해야 할 일

이러한 조건이 없거나 완화 할 수있는 경우 다음과 같은 두 가지 이유가 있습니다. NoSQL의 이점 :

  • 대규모로 실행해야 함
  • 개발 편의성 (기술 스택과의 통합, ORM 불필요 등)

더 많은 정보

내 블로그 게시물에서 자세한 이유를 설명합니다.

참고 : 위의 내용은 문서 지향 NoSQL에만 적용됩니다. 있다 다른 종류의 다른 고려 사항이 필요없는 NoSQL의는.


0

많은 수의 읽기 / 쓰기 작업 처리

빠르게 확장해야하는 경우 NoSQL 데이터베이스를 찾으십시오. 그리고 일반적으로 빠른 확장이 필요한 시점은 언제입니까?

웹 사이트에 많은 수의 읽기 / 쓰기 작업이 있거나 많은 양의 데이터를 처리 할 때 NoSQL 데이터베이스가 이러한 시나리오에 가장 적합합니다. 즉석에서 노드를 추가 할 수 있기 때문에 대기 시간을 최소화하면서 더 많은 동시 트래픽 및 대량의 데이터를 처리 할 수 ​​있습니다.

데이터 모델링을 통한 유연성

두 번째 신호는 데이터 모델, 데이터베이스 디자인, 상황이 빠른 속도로 변화 할 것으로 예상되지 않는 개발 초기 단계입니다. NoSQL 데이터베이스는 우리에게 더 많은 유연성을 제공합니다.

강력한 일관성에 대한 최종 일관성

강력한 일관성을 포기하고 트랜잭션이 필요하지 않은 경우 NoSQL 데이터베이스를 선택하는 것이 좋습니다.

이에 대한 좋은 예는 Twitter와 같은 소셜 네트워킹 웹 사이트입니다. 유명인의 트윗이 폭발하고 모두가 좋아하고 전 세계에서 다시 트윗 할 때. 좋아하는 숫자가 잠시 동안 조금씩 올라가거나 내려가는 것이 중요합니까?

유명인은 실제 500 만 명 대신에 500 만 명으로 짧은 시간 동안 500 만 명으로 표시 될 경우 확실히 신경 쓰지 않을 것입니다.

전 세계에 퍼져있는 수백 대의 서버에 대규모 응용 프로그램을 배포하면 지리적으로 분산 된 노드가 글로벌 합의에 도달하는 데 시간이 걸립니다.

그들이 합의에 도달 할 때까지 실체의 가치는 일치하지 않습니다. 개체의 가치는 잠시 후에 일관되게 유지됩니다. 이것이 최종 일관성입니다.

불일치가 일종의 데이터 손실이 있음을 의미하지는 않습니다. 단지 바다 아래의 인터넷 케이블을 통해 전 세계를 여행하면서 전 세계적으로 합의에 도달하고 일관성을 유지하는 데 데이터가 짧다는 것을 의미합니다.

우리는 항상이 행동을 경험합니다. 특히 YouTube에서. 조회수가 10이고 좋아요가 15 인 동영상이 종종 표시됩니다. 이것이 어떻게 가능합니까?

그렇지 않습니다. 실제 견해는 이미 좋아하는 것 이상입니다. 조회수가 일치하지 않고 업데이트되는 데 시간이 조금 걸립니다.

데이터 분석 실행

NoSQL 데이터베이스는 또한 대량의 데이터 유입을 처리해야하는 데이터 분석 사용 사례에 가장 적합합니다.

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