NoSQL 유스 케이스 시나리오 또는 NoSQL을 사용하기위한시기 [닫기]


252

모든 과대 광고를 통해이 사용 시점에 대한 신뢰할 수있는 정보를 찾기가 정말 어렵습니다. 그래서 나는 다음과 같은 질문을 제기하며, 이것이 실제로 멍청한 질문이라면 미안합니다.

  1. 사용자 데이터에 NoSQL을 사용해야합니까? 예 : 프로필, 사용자 이름 + 비밀번호 등
  2. 중요한 콘텐츠에 NoSQL을 사용해야합니까? 예 : 기사, 블로그 게시물, 제품 인벤토리 등

나는 아니오라고 가정합니까? 그리고 NoSQL은 데이터를 잃어도 빨리 접근 할 수있는 것 같습니다. 그러나 NoSQL 앱에는 중복성이 내장되어있어 데이터를 잃지 않도록합니다.

또한 위의 두 가지 예가 나쁜 경우 NoSQL을 사용하는 특정 비즈니스 사용 사례를 알려주시겠습니까? 일반적인 설명은 많지만 실제 예제는 많지 않습니다. 내가 생각할 수있는 유일한 것은 사용자 간 메시징 및 분석입니다.

감사!

답변:


183

그것은 실제로 "의존"질문이다. 몇 가지 일반적인 사항 :

  • NoSQL은 일반적으로 비정형 / "스키마없는"데이터에 적합합니다. 일반적으로 스키마를 명시 적으로 미리 정의 할 필요가 없으며 식없이 새 필드 만 포함 할 수 있습니다.
  • NoSQL은 일반적으로 RDBMS 세계 당 JOIN을 지원하지 않기 때문에 비정규 화 된 스키마를 선호합니다. 따라서 일반적으로 평평하고 비정규 화 된 데이터 표현을 갖게됩니다.
  • NoSQL을 사용한다고해서 데이터가 손실 될 수있는 것은 아닙니다. DB마다 전략이 다릅니다. 예를 들어 MongoDB-본질적으로 성능과 데이터 손실 가능성을 비교할 수준을 선택할 수 있습니다. 최고의 성능 = 데이터 손실 범위가 더 큽니다.
  • NoSQL 솔루션을 확장하는 것은 종종 매우 쉬운 일입니다. 데이터를 복제 할 노드를 더 추가하면 a) 확장 성이 향상되고 b) 한 노드가 다운 될 경우 데이터 손실에 대한 보호 기능을 강화할 수 있습니다. 그러나 NoSQL DB / 구성에 따라 다릅니다. NoSQL은 반드시 유추 한 것처럼 "데이터 손실"을 의미하지는 않습니다.
  • IMHO, 복잡한 / 동적 쿼리 /보고는 RDBMS에서 가장 잘 제공됩니다. 종종 NoSQL DB의 쿼리 기능이 제한됩니다.
  • 1 또는 다른 선택 일 필요는 없습니다. 내 경험은 특정 사용 사례에 대해 NoSQL과 함께 RDBMS를 사용하고 있습니다.
  • NoSQL DB는 종종 여러 "테이블"에서 원자 적 작업을 수행 할 수있는 능력이 부족합니다.

다양한 유형의 NoSQL 스토어가 무엇인지, 그리고 확장 성 / 데이터 보안 등을 제공하는 방법을보고 이해해야합니다. 실제로는 완전히 다르고 다르게 다루기 때문에 전체적으로 답변을하기가 어렵습니다. .

예를 들어 MongoDb의 경우 사용 사례 를 확인하여 MongoDb의 "적합한"사용과 "적합한 사용"으로 제안 된 내용을 확인하십시오.


16
조인을 지원하지 않는 NoSQL에 대한 주장은 잘못된 것입니다. 일부 NoSQL 데이터베이스는 실제로 관계형 데이터베이스보다 조인이 훨씬 뛰어납니다. 일부는 전혀 지원하지 않습니다. 이 답변은 일반적으로 NoSQL보다 MongoDB에 대한 것 같습니다.
Alan Plum

1
훌륭한 요약. @AlanPlum, 어떤 NoSQL 데이터베이스를 언급하고 있습니까?
brian

2
@brian 저는 ArangoDB ( arangodb.com )에 기여했습니다. 이 문서 데이터베이스 (MongoDB 생각)와 그래프 데이터베이스 (Neo4J 생각)가 저렴한 조인뿐만 아니라 실제 거래도 혼합되어 있습니다. 즉, NoSQL 데이터베이스는 동종 그룹이 아니며, 하나의 NoSQL 데이터베이스에서 전체 "범주"로 일반화 할 수 없습니다.
Alan Plum

NoSQL에서 "join이 지원되지 않기 때문에"RDB 사용을 고려하고 있다면 AWS re : Invent에서이 비디오를 시청하는 것이 좋습니다. NoSQL 접근 방식 전체를 분석하십시오! 많은 도움이되었습니다. youtu.be/HaEPXoXVf2k
dillon.harless

9

이 시나리오에서는 Nosql이 "보다 적합"하다고 생각합니다 (보충은 더 환영합니다).

  1. 더 많은 노드를 추가하여 수평 확장이 쉽습니다.

  2. 큰 데이터 세트에 대한 쿼리

    매일 트위터에 수많은 트윗이 게시되어 있다고 상상해보십시오. RDMS에는 행이 수백만 (또는 수십억?) 인 테이블이있을 수 있으며 복잡한 쿼리에는 테이블 조인이 필요하지만 언급하지 않아도 해당 테이블에 대해 직접 쿼리를 수행하고 싶지 않습니다.

  3. 디스크 I / O 병목

    웹 사이트가 사용자의 실시간 정보를 기반으로 다른 사용자에게 결과를 보내야하는 경우 초당 약 수십 또는 수십만 건의 SQL 읽기 / 쓰기 요청에 대해 이야기하고있을 것입니다. 그런 다음 디스크 I / O는 심각한 병목 현상이 발생합니다.


20
RDBMS # 2의 문제가 무엇인지 이해할 수 없습니다. 그리고 NoSQL은 # 3에 따라 디스크 I / O가 적습니까?
avi

5
@avi가 말했듯이 인덱스에서 테이블을 쿼리하는 한 # 2에는 아무런 문제가 없다고 생각합니다. 수백만 행? 좋아, 내가 사용하고 싶은 인덱스 만 검색
Xtreme Biker

11
# 2와 3은 모두 거짓입니다. 2의 경우, 데이터 가져 오기 / 내보내기에 대한 성능 테스트를 수행했으며 SQL Server 2014가 대규모 데이터 가져 오기 및 내보내기에서 Mongo를 망쳤습니다. 3의 경우 SQL의 강력한 형식의 데이터는 일반적으로 문서 데이터베이스보다 훨씬 적은 공간을 차지합니다 (압축 전에 50 % 이상을 보았습니다).
brian

7
예, 심지어 1 번도 얻지 못합니다. 확장은 모든 주요 rdbms가 제안하는 클러스터링 계약의 일부입니다.
Sebas

2
무제한 돈이 있다면 세 가지 모두 잘못되었습니다
Chazt3n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.