programing

관계형 데이터베이스 대신 NoSQL 데이터베이스를 사용해야 하는 경우둘 다 같은 사이트에서 사용해도 될까요?

goodjava 2023. 4. 5. 21:47

관계형 데이터베이스 대신 NoSQL 데이터베이스를 사용해야 하는 경우둘 다 같은 사이트에서 사용해도 될까요?

NoSQL 데이터베이스를 사용하면 어떤 이점이 있습니까?최근에 많이 읽었지만 왜 구현해야 하는지, 어떤 상황에서 사용해야 하는지 아직 잘 모르겠습니다.

릴레이셔널 데이터베이스는 ACID를 적용합니다.따라서 스키마 기반 트랜잭션 지향 데이터 저장소를 갖게 됩니다.실증되어 99%의 실제 애플리케이션에 적합합니다.관계형 데이터베이스에서는 거의 모든 작업을 수행할 수 있습니다.

그러나 대규모 고가용성 데이터 저장소의 경우 속도와 확장에 제한이 있습니다.예를 들어 Google과 Amazon은 빅데이터 센터에 테라바이트의 데이터를 저장하고 있습니다.이러한 시나리오에서는 RDBM의 블로킹/스케마/트랜잭션 특성 때문에 쿼리 및 삽입이 수행되지 않습니다.그 때문에, RDBM은 퍼포먼스의 큰 향상과 확장성을 위해서 독자적인 데이타베이스(실제로 키값 스토어)를 실장하고 있습니다.

NoSQL 데이터베이스는 오랫동안 존재해 왔습니다. 단지 새로운 용어일 뿐입니다.예를 들어 그래프, 객체, 열, XML 및 문서 데이터베이스가 있습니다.

두 번째 질문:둘 다 같은 사이트에서 사용해도 될까요?

왜 안 되나요?둘 다 목적이 다르죠?

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

장점은 보통 용도에 따라 다르지만 RDBMS에서 데이터를 모델링하는 데 문제가 없는 한 NoSQL을 선택할 이유가 없습니다.

RDBMS가 실행 가능한 솔루션이 아닌 특정 문제에 대해서는 MongoDB와 Riak를 사용하고 있으며, 그 외의 모든 문제에는 MySQL(또는 테스트용 SQLite)을 사용하고 있습니다.

일반적으로 알고 있는 NoSQL DB가 필요한 경우 다음과 같은 이유를 생각할 수 있습니다.

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

NoSQL 솔루션이 필요하지 않은 경우 이러한 솔루션은 RDBMS의 대체 솔루션이 아니라 RDBMS의 대체 솔루션이 아니라 장애가 발생한 대체 솔루션이며, 더 중요한 것은 이러한 솔루션이 비교적 새로운 버그와 기능을 여전히 많이 보유하고 있다는 것입니다.

아, 그리고 두 번째 질문입니다만, 어떤 테크놀로지를 다른 테크놀로지와 병용해도 문제 없습니다.따라서 제 경험상 MongoDB와 MySQL은 같은 머신에 있지 않는 한 함께 사용할 수 있습니다.

Martin Fowler는 NoSQL 데이터베이스에 대해 잘 설명하는 훌륭한 비디오를 가지고 있습니다.링크는 그가 그것들을 사용해야 하는 이유들로 직결되지만, 비디오 전체에는 좋은 정보가 포함되어 있습니다.

  1. 특히 NoSQL은 확장성이 뛰어나도록 설계되었기 때문에 하나의 물리 서버에 모든 데이터를 저장할 수 없는 경우에는 대량의 데이터가 있습니다.

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

NoSQL은 문서(MongoDB), 키-값 쌍(MemCache, Redis), 그래프 구조 양식(Neo4J)으로 데이터를 정리하는 데이터베이스 시스템입니다.

"NoSQ를 선택해야 할 때"에 대한 질문과 답변이 있을 수 있습니다.L":

  1. 연한한스 ?? ?? ?? ? ?? ?? ??아니면 트리와 같은 데이터를 처리하시겠습니까?
    일반적으로 민첩한 개발에서는 사전에 모든 요건을 파악하지 못한 채 시스템 설계를 시작합니다.나중에 개발 데이터베이스 시스템 전체에 걸쳐 설계 변경을 빈번히 수용하여 MVP(Minimal Available product)를 제시해야 할 수도 있습니다.또는 시스템 로그와 같이 본질적으로 동적인 데이터 스키마를 다루고 있는 경우, AWS 클라우드트레일 로그를 예로 들 수 있습니다.

  2. 이터대대대대대대?
    Yes NoSQL 데이터베이스는 데이터베이스로 성능과 가용성에 영향을 주지 않고 수백만 또는 수십억 개의 레코드를 관리해야 하는 애플리케이션에 적합합니다(다만, 최신 데이터베이스는 예외입니다만, 예를 들어 가용성에 대해 일관성을 유지할 수 있습니다).Casandra, CosmosDB, DynamoDB).

  3. 에 대한
    RDMS와 달리 NoSQL 데이터베이스는 결국 기본 동작인 다른 노드 간에 데이터 세트를 일관되게 만들 수 있지만 성능 및 가용성 측면에서 쉽게 확장할 수 있습니다. : :이는 인스턴트 메시징 앱에 온라인 상태의 사용자를 저장하고, DB에 API 토큰을 저장하며, 웹 사이트 트래픽 통계를 로깅하는 데 유용합니다.

  4. 지올로케이션 조작의 실행:MongoDB는 GeoQuerying & Geolocation 작업을 수행하기 위한 풍부한 해시 지원.MongoDB의 이 기능이 정말 마음에 들었어요.우체국도 마찬가지야SQL이지만 구현의 용이성은 사용 사례에 따라 다릅니다.

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

편집: 데이터베이스 일관성에 대한 응답을 업데이트했습니다.

질문에 답변하는 데 필요한 몇 가지 정보가 누락되었습니다.데이터베이스가 다룰 수 있는 사용 사례는 무엇입니까?기존 데이터(OLAP)에서 복잡한 분석을 수행해야 합니까, 아니면 애플리케이션이 많은 트랜잭션(OLTP)을 처리할 수 있어야 합니까?데이터 구조는 어떻게 되어 있습니까?질문 시간이 끝나려면 아직 멀었다.

제가 보기에, 테크놀로지에 대한 의사결정을 과감한 유행어로 하는 것은 그 배경에 무엇이 있는지 정확히 알지 못하고 하는 것은 잘못된 것입니다.NoSQL은 확장성이 뛰어나다는 평가를 받는 경우가 많습니다.그러나 (여러 노드에 걸쳐) 수평 확장에도 가격이 있고 무료가 아니라는 것도 알아야 합니다.그런 다음 최종 일관성 등의 문제를 처리하고 데이터베이스 수준에서 데이터 충돌을 해결할 수 없는 경우 이를 해결하는 방법을 정의해야 합니다.그러나 이는 모든 분산 데이터베이스 시스템에 적용됩니다.

NoSQL에서 "schema less"라는 단어를 사용하는 개발자들의 기쁨도 매우 큽니다.이 유행어는 기술 분석 후 빠르게 환멸을 느끼게 되는데, 이는 글을 쓸 때 스키마가 필요하지 않고 읽을 때 활용되기 때문이다.그렇기 때문에 올바르게 "Schema on read"로 해야 합니다.자신의 재량으로 데이터를 쓸 수 있다는 것은 유혹적일 수 있다.그러나 기존 데이터는 있지만 새로운 버전의 애플리케이션에서는 다른 스키마가 필요할 경우 어떻게 대처해야 합니까?

문서 모델(예: MongoDB)은 데이터 간에 관계가 많은 데이터 모델에는 적합하지 않습니다.참여는 애플리케이션 수준에서 수행해야 합니다. 이는 추가적인 작업이며 왜 데이터베이스에서 수행해야 하는 작업을 프로그래밍해야 합니까?

기존 RDBMS가 더 이상 대량의 데이터를 처리할 수 없기 때문에 Google과 Amazon이 자체 데이터베이스를 개발했다고 주장한다면 다음과 같이 말할 수 밖에 없습니다.당신은 구글과 아마존이 아닙니다.이들 기업이 선두주자입니다.기존 데이터베이스가 더 이상 적합하지 않은 시나리오의 약 0.01%를 차지하지만 나머지 국가에서는 적절합니다.

SQL은 40년 이상 사용되었으며 Oracle이나 Microsoft SQL과 같은 대규모 시스템에 수백만 시간의 개발 시간이 소요되었습니다.이 작업은 일부 새로운 데이터베이스에 의해 수행되어야 합니다.또한 MongoDB 담당자를 찾는 것보다 SQL 관리자를 찾는 것이 더 쉬울 수 있습니다.그러면 유지 보수와 관리에 대한 문제가 생깁니다.꼭 섹시하지는 않지만 테크놀로지 결정의 일부인 주제입니다.

대량의 읽기 쓰기 조작 처리

빠른 확장이 필요한 경우 NoSQL 데이터베이스를 선택하십시오.그리고 일반적으로 언제 신속하게 확장해야 합니까?

웹 사이트에서 많은 읽기/쓰기 작업이 이루어지고 대량의 데이터를 처리할 경우 NoSQL 데이터베이스가 이러한 시나리오에 가장 적합합니다.즉석에서 노드를 추가할 수 있기 때문에 더 많은 동시 트래픽과 대량의 데이터를 최소한의 레이텐시로 처리할 수 있습니다.

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

두 번째는 개발 초기 단계에서 데이터 모델, 데이터베이스 설계에 대해 확신이 서지 않는 경우입니다. 상황은 빠른 속도로 변화할 것으로 예상됩니다.NoSQL 데이터베이스는 더 많은 유연성을 제공합니다.

뛰어난 일관성보다 궁극적인 일관성

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

이것의 좋은 예는 트위터 같은 소셜 네트워킹 웹사이트이다.유명인의 트윗이 터져서 모두가 좋아하고 전 세계에서 리트윗을 할 때.좋아요 횟수가 잠깐씩 오르내리더라도 상관없나요?

이 연예인은 실제로 500만 좋아요가 아니라, 이 시스템이 잠시 동안 500만 250으로 같은 수를 나타낸다고 해도 전혀 개의치 않을 것이다.

전 세계에 분산되어 있는 수백 대의 서버에 대규모 애플리케이션을 도입하면 지리적으로 분산되어 있는 노드가 글로벌하게 합의하는 데 시간이 걸립니다.

두 기업이 합의에 도달할 때까지 기업의 가치는 일관되지 않는다.엔티티의 가치는 얼마 지나지 않아 일정해진다.이것이 궁극적인 일관성입니다.

그러나 불일치가 데이터 손실을 의미하는 것은 아닙니다.즉, 데이터가 해저의 인터넷 케이블을 통해 전 세계를 횡단하여 글로벌 컨센서스에 도달하고 일관성을 유지하는 데 시간이 오래 걸리지 않습니다.

우리는 이런 행동을 항상 경험한다.특히 유튜브에서.당신은 종종 10개의 조회수와 15개의 좋아요를 가진 비디오를 볼 수 있다.이게 어떻게 가능하죠?

아니에요.실제 뷰는 이미 비슷한 것 이상이다.뷰 수가 일관되지 않고 업데이트에 시간이 오래 걸립니다.

데이터 분석 실행

NoSQL 데이터베이스는 대량의 데이터를 처리해야 하는 데이터 분석 활용 사례에도 가장 적합합니다.

RDBMS 설계에서 벗어날 수 있는 설득력 있는 근거를 찾다가 이 질문을 하게 되었습니다.

Julian Brown의 훌륭한 은 분산 시스템의 제약을 조명한다.이 개념은 Brewer's CAP 정리라고 불리며 요약하면 다음과 같습니다.

분산형 시스템의 3가지 요건은 일관성, 가용성 및 파티션 허용(CAP)입니다.하지만 한 번에 두 개만 가질 수 있어요.

그리고 나 자신을 위해 이렇게 요약했다.

일관성을 희생하는 것이라면 NoSQL을 선택하는 것이 좋습니다.

저는 NoSQL 데이터베이스를 사용하여 솔루션을 설계 및 구현했습니다.여기에서는 SQL 또는 문서 지향 NoSQL을 선택하기 위한 체크포인트 목록입니다.

하지 않다

SQL은 구식이 아니며 경우에 따라서는 더 나은 도구로 남아 있습니다.문서 중심의 NoSQL을 사용하는 것은 정당화하기가 어렵습니다.

  • OLAP/OLTP 필요
  • 소규모 프로젝트/심플한 DB 구조
  • 애드혹 쿼리 필요
  • 즉각적인 일관성을 피할 수 없음
  • 요건이 불명확하다
  • 경험이 풍부한 개발자의 부족

실행하다

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

  • 규모에 맞는 실행 필요
  • 개발의 편리성(기술 스택과의 통합성 향상, ORM 불필요 등)

상세 정보

블로그 투고에서 자세한 이유를 설명하겠습니다.

주의: 위의 내용은 문서 지향 NoSQL에만 적용됩니다.다른 유형의 NoSQL도 있습니다.다른 고려사항이 필요합니다.

언급URL : https://stackoverflow.com/questions/3713313/when-should-i-use-a-nosql-database-instead-of-a-relational-database-is-it-okay