답변:
관계형 데이터베이스는 ACID를 시행 합니다. 따라서 스키마 기반 트랜잭션 지향 데이터 저장소가 있습니다. 실제 응용 프로그램의 99 %에 입증되고 적합합니다. 관계형 데이터베이스로 실제로 무엇이든 할 수 있습니다.
그러나 대규모 고 가용성 데이터 저장소의 경우 속도 및 확장에 제한이 있습니다. 예를 들어 Google과 Amazon에는 빅 데이터 센터에 테라 바이트 단위의 데이터가 저장되어 있습니다. 이러한 시나리오에서는 RDBM의 차단 / 스키마 / 트랜잭션 특성으로 인해 쿼리 및 삽입이 수행되지 않습니다. 이것이 대규모 성능 향상과 확장 성을 위해 자체 데이터베이스 (실제로 키-값 저장소)를 구현 한 이유입니다.
NoSQL 데이터베이스는 오랫동안 사용되어 왔으며 새로운 용어입니다. 몇 가지 예는 그래프, 객체, 열, XML 및 문서 데이터베이스입니다.
두 번째 질문 : 같은 사이트에서 두 가지를 모두 사용해도 되나요?
왜 안돼? 둘 다 다른 목적으로 사용됩니까?
NoSQL 솔루션은 일반적으로 관계형 데이터베이스가 적합하지 않거나 Oracle과 같이 사용하기에는 너무 비싸거나 db의 관계형 특성을 어기는 것을 구현해야하는 문제를 해결하기위한 것입니다.
장점은 일반적으로 사용량에 따라 다르지만 RDBMS에서 데이터 모델링에 문제가없는 한 NoSQL을 선택해야 할 이유가 없습니다.
RDBMS가 실행 가능한 솔루션이 아닌 특정 문제, MySQL (또는 테스트를 위해 SQLite)을 사용하는 다른 모든 문제에 대해 MongoDB와 Riak을 사용합니다.
NoSQL db 가 필요한 경우 일반적으로 알고있는 가능한 이유는 다음과 같습니다.
NoSQL 솔루션이 필요하지 않은 경우, 이러한 솔루션은 RDBMS를 대체하는 것이 아니라 전자가 실패하고 대체적으로 새로운 버그가 많은 대안이 아니라 여전히 버그가 많으며 누락 된 기능.
아, 그리고 두 번째 질문에 관해서는 다른 기술과 함께 어떤 기술을 사용하는 것이 완벽하므로 내 경험에서 완성되기 위해서는 MongoDB와 MySQL이 동일한 컴퓨터에 있지 않는 한 잘 작동합니다.
Martin Fowler는 NoSQL 데이터베이스에 대한 좋은 설명을 제공 하는 훌륭한 비디오 를 제공합니다. 링크는 그의 사용 이유와 직결되지만 전체 비디오에는 좋은 정보가 포함되어 있습니다.
NoSQL은 확장 성이 뛰어나도록 설계 되었기 때문에 많은 양의 데이터가 있습니다. 특히 하나의 물리적 서버에 모두 맞지 않을 경우 더욱 그렇습니다.
개체 관계형 임피던스 불일치 -도메인 개체가 관계형 데이터베이스 스키마에 적합하지 않습니다. NoSQL을 사용하면 데이터를 문서 (또는 그래프)로 유지하여 데이터 모델에 훨씬 더 가깝게 매핑 할 수 있습니다.
NoSQL은 데이터가 문서 (MongoDB), 키-값 쌍 (MemCache, Redis), 그래프 구조 형식 (Neo4J)으로 구성된 데이터베이스 시스템입니다.
어쩌면 다음은 "NoSQL로 갈 때"에 대한 가능한 질문과 답변입니다.
유연한 스키마가 필요하거나 데이터와 같은 트리를 처리합니까?
일반적으로 민첩한 개발에서는 모든 요구 사항을 사전에 알 필요없이 시스템 설계를 시작합니다. 나중에 개발 데이터베이스 시스템 전체에서 잦은 설계 변경을 수용하여 MVP (Minimal Viable Product)를 소개합니다. 또는 본질적으로 동적 인 데이터 스키마를 다루고 있습니다. 예를 들어 시스템 로그, 매우 정확한 예는 AWS 클라우드 워치 로그입니다.
데이터 세트가 방대하거나 큽니까?
예 NoSQL 데이터베이스는 데이터베이스가 성능을 저하시키지 않으면 서 수백만 또는 수십억 개의 레코드를 관리해야하는 응용 프로그램에 더 적합한 후보입니다.
일관성 확장
과의 균형 조정 RDMS와 달리 NoSQL 데이터베이스는 여기저기서 작은 데이터를 잃을 수 있지만 (참고 : 확률은 .x % 임) 성능 측면에서 쉽게 확장 할 수 있습니다. 예 : 인스턴트 메시징 앱에서 온라인 상태 인 사람, DB의 토큰, 웹 사이트 트래픽 통계 로깅에 유용합니다.
Geolocation 작업 수행 : GeoQuerying & Geolocation 작업을위한 MongoDB 해시 지원. 나는 MongoDB 의이 기능을 정말 좋아했습니다.
간단히 말해, MongoDB는 동적으로 구조화 된 데이터를 대규모로 저장할 수있는 애플리케이션에 매우 적합합니다.
질문에 대한 몇 가지 필수 정보가 누락되었습니다. 데이터베이스는 어떤 유스 케이스를 포함해야합니까? 기존 데이터 ( OLAP ) 에서 복잡한 분석을 수행해야 합니까, 아니면 애플리케이션이 많은 트랜잭션 ( OLTP ) 을 처리 할 수 있어야 합니까? 데이터 구조는 무엇입니까? 그것은 질문 시간의 끝과는 거리가 멀다.
제 생각에, 그 뒤에 무엇이 있는지 정확히 알지 못하고 대담한 유행어를 기반으로 기술 결정을 내리는 것은 잘못입니다. NoSQL은 종종 확장 성으로 칭찬을받습니다. 그러나 수평 스케일링 (여러 노드에 걸친)도 가격이 있으며 무료가 아님을 알아야합니다. 그런 다음 최종 일관성 과 같은 문제를 처리해야합니다. 과 하고 데이터베이스 수준에서 해결할 수없는 경우 데이터 충돌을 해결하는 방법을 정의해야합니다. 그러나 이것은 모든 분산 데이터베이스 시스템에 적용됩니다.
NoSQL에서 "schema less"라는 단어를 사용하는 개발자들의 기쁨 또한 처음에는 매우 큽니다. 이 버즈 워드는 기술 분석 후에는 작성시 스키마가 필요하지 않지만 읽을 때 작동하기 때문에 신속하게 마비됩니다. 이것이 바로 "스키마 온 스키마"가되어야하는 이유입니다. 자신의 재량에 따라 데이터를 쓰려고 할 수도 있습니다. 그러나 기존 데이터가 있지만 새로운 버전의 응용 프로그램이 다른 스키마를 기대하는 경우 상황을 어떻게 처리합니까?
문서 모델 (예 : MongoDB)은 적합하지 않습니다 데이터간에 많은 관계가있는 데이터 모델에는 . 조인은 응용 프로그램 수준에서 수행해야하며, 이는 추가적인 노력이며 데이터베이스가 수행해야하는 작업을 프로그래밍해야하는 이유입니다.
기존 RDBMS가 더 이상 데이터 플러드를 처리 할 수 없기 때문에 Google과 Amazon이 자체 데이터베이스를 개발했다는 주장을하는 경우 다음과 같이 말할 수 있습니다. Google과 Amazon이 아닙니다. 이 회사는 전통적인 데이터베이스가 더 이상 적합하지 않지만 나머지 세계에는 적합하지 않은 시나리오의 약 0.01 %를 이끄는 선두 주자입니다.
중요하지 않은 사항 : SQL 은 40 년 이상 사용되어 왔으며 수백만 시간의 개발이 Oracle 또는 Microsoft SQL과 같은 대규모 시스템에 적용되었습니다. 이것은 일부 새로운 데이터베이스에 의해 달성되어야합니다. 때로는 MongoDB 사용자보다 SQL 관리자를 찾는 것이 더 쉽습니다. 유지 보수 및 관리 문제가 발생합니다. 정확히 섹시하지는 않지만 기술 결정의 일부입니다.
저는 NoSQL 데이터베이스를 사용하여 솔루션을 설계하고 구현했으며 여기에 SQL 또는 문서 지향 NoSQL 을 사용하기로 결정한 체크 포인트 목록이 있습니다.
하지마
SQL은 더 이상 사용되지 않으며 경우에 따라 더 나은 도구로 남아 있습니다. 문서 지향 NoSQL의 사용을 정당화하기는 어렵습니다.
해야 할 일
이러한 조건이 없거나 완화 할 수있는 경우 다음과 같은 두 가지 이유가 있습니다. NoSQL의 이점 :
더 많은 정보
내 블로그 게시물에서 자세한 이유를 설명합니다.
참고 : 위의 내용은 문서 지향 NoSQL에만 적용됩니다. 있다 다른 종류의 다른 고려 사항이 필요없는 NoSQL의는.
많은 수의 읽기 / 쓰기 작업 처리
빠르게 확장해야하는 경우 NoSQL 데이터베이스를 찾으십시오. 그리고 일반적으로 빠른 확장이 필요한 시점은 언제입니까?
웹 사이트에 많은 수의 읽기 / 쓰기 작업이 있거나 많은 양의 데이터를 처리 할 때 NoSQL 데이터베이스가 이러한 시나리오에 가장 적합합니다. 즉석에서 노드를 추가 할 수 있기 때문에 대기 시간을 최소화하면서 더 많은 동시 트래픽 및 대량의 데이터를 처리 할 수 있습니다.
데이터 모델링을 통한 유연성
두 번째 신호는 데이터 모델, 데이터베이스 디자인, 상황이 빠른 속도로 변화 할 것으로 예상되지 않는 개발 초기 단계입니다. NoSQL 데이터베이스는 우리에게 더 많은 유연성을 제공합니다.
강력한 일관성에 대한 최종 일관성
강력한 일관성을 포기하고 트랜잭션이 필요하지 않은 경우 NoSQL 데이터베이스를 선택하는 것이 좋습니다.
이에 대한 좋은 예는 Twitter와 같은 소셜 네트워킹 웹 사이트입니다. 유명인의 트윗이 폭발하고 모두가 좋아하고 전 세계에서 다시 트윗 할 때. 좋아하는 숫자가 잠시 동안 조금씩 올라가거나 내려가는 것이 중요합니까?
유명인은 실제 500 만 명 대신에 500 만 명으로 짧은 시간 동안 500 만 명으로 표시 될 경우 확실히 신경 쓰지 않을 것입니다.
전 세계에 퍼져있는 수백 대의 서버에 대규모 응용 프로그램을 배포하면 지리적으로 분산 된 노드가 글로벌 합의에 도달하는 데 시간이 걸립니다.
그들이 합의에 도달 할 때까지 실체의 가치는 일치하지 않습니다. 개체의 가치는 잠시 후에 일관되게 유지됩니다. 이것이 최종 일관성입니다.
불일치가 일종의 데이터 손실이 있음을 의미하지는 않습니다. 단지 바다 아래의 인터넷 케이블을 통해 전 세계를 여행하면서 전 세계적으로 합의에 도달하고 일관성을 유지하는 데 데이터가 짧다는 것을 의미합니다.
우리는 항상이 행동을 경험합니다. 특히 YouTube에서. 조회수가 10이고 좋아요가 15 인 동영상이 종종 표시됩니다. 이것이 어떻게 가능합니까?
그렇지 않습니다. 실제 견해는 이미 좋아하는 것 이상입니다. 조회수가 일치하지 않고 업데이트되는 데 시간이 조금 걸립니다.
데이터 분석 실행
NoSQL 데이터베이스는 또한 대량의 데이터 유입을 처리해야하는 데이터 분석 사용 사례에 가장 적합합니다.