NoSQL 데이터베이스를 사용하면 어떤 이점이 있습니까? 나는 최근에 그들에 대해 많은 것을 읽었지만, 왜 내가 그것을 구현하고 싶은지, 어떤 상황에서 내가 그것을 사용하고 싶은지 여전히 확실하지 않습니다.
답변
관계형 데이터베이스는 ACID를 시행 합니다. 따라서 스키마 기반 트랜잭션 지향 데이터 저장소가 있습니다. 실제 응용 프로그램의 99 %에 입증되고 적합합니다. 관계형 데이터베이스로 실제로 무엇이든 할 수 있습니다.
그러나 대규모 고 가용성 데이터 저장소의 경우 속도 및 확장에 제한이 있습니다. 예를 들어 Google과 Amazon에는 빅 데이터 센터에 테라 바이트 단위의 데이터가 저장되어 있습니다. 이러한 시나리오에서는 RDBM의 차단 / 스키마 / 트랜잭션 특성으로 인해 쿼리 및 삽입이 수행되지 않습니다. 이것이 대규모 성능 향상과 확장 성을 위해 자체 데이터베이스 (실제로 키-값 저장소)를 구현 한 이유입니다.
NoSQL 데이터베이스는 오랫동안 사용되어 왔으며 새로운 용어입니다. 몇 가지 예는 그래프, 객체, 열, XML 및 문서 데이터베이스입니다.
두 번째 질문 : 같은 사이트에서 두 가지를 모두 사용해도 되나요?
왜 안돼? 둘 다 다른 목적으로 사용됩니까?
답변
NoSQL 솔루션은 일반적으로 관계형 데이터베이스가 적합하지 않거나 Oracle과 같이 사용하기에는 너무 비싸거나 db의 관계형 특성을 어기는 것을 구현해야하는 문제를 해결하기위한 것입니다.
장점은 일반적으로 사용량에 따라 다르지만 RDBMS에서 데이터 모델링에 문제가없는 한 NoSQL을 선택해야 할 이유가 없습니다.
RDBMS가 실행 가능한 솔루션이 아닌 특정 문제, MySQL (또는 테스트를 위해 SQLite)을 사용하는 다른 모든 문제에 대해 MongoDB와 Riak을 사용합니다.
NoSQL db 가 필요한 경우 일반적으로 알고있는 가능한 이유는 다음과 같습니다.
- 클라이언트는 트래픽이 많은 사이트에서 99.999 %의 가용성을 원합니다.
- SQL에서는 데이터가 의미가 없으므로 일부 정보에 액세스하기 위해 여러 개의 JOIN 쿼리를 수행하고 있습니다.
- 관계형 모델을 깨뜨리고 비정규 화 된 데이터를 저장하는 CLOB가 있으며 해당 데이터를 검색하기 위해 외부 인덱스를 생성합니다.
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 관리자를 찾는 것이 더 쉽습니다. 유지 보수 및 관리 문제가 발생합니다. 정확히 섹시하지는 않지만 기술 결정의 일부입니다.
답변
나는 RDBMS 디자인에서 벗어나는 설득력있는 근거를 찾는 동안이 질문에 부딪쳤다.
Julian Brown이 분산 시스템의 제약 조건을 밝히는 훌륭한 게시물 이 있습니다. 이 개념을 Brewer ‘s CAP 정리라고합니다.
분산 시스템의 세 가지 요구 사항은 일관성, 가용성 및 파티션 허용 오차 (간결한 CAP)입니다. 그러나 한 번에 두 개만 가질 수 있습니다.
그리고 이것이 내가 직접 요약 한 방법입니다.
Consistency가 희생하는 것이면 NoSQL을 사용하는 것이 좋습니다.
답변
저는 NoSQL 데이터베이스를 사용하여 솔루션을 설계하고 구현했으며 여기에 SQL 또는 문서 지향 NoSQL 을 사용하기로 결정한 체크 포인트 목록이 있습니다.
하지마
SQL은 더 이상 사용되지 않으며 경우에 따라 더 나은 도구로 남아 있습니다. 문서 지향 NoSQL의 사용을 정당화하기는 어렵습니다.
- OLAP / OLTP 필요
- 작은 프로젝트 / 간단한 DB 구조입니다.
- 임시 쿼리 필요
- 즉각적인 일관성을 피할 수 없습니다
- 불분명 한 요구 사항
- 숙련 된 개발자 부족
해야 할 일
이러한 조건이 없거나 완화 할 수있는 경우 다음과 같은 두 가지 이유가 있습니다. NoSQL의 이점 :
- 대규모로 실행해야 함
- 개발 편의성 (기술 스택과의 통합, ORM 불필요 등)
더 많은 정보
내 블로그 게시물에서 자세한 이유를 설명합니다.
참고 : 위의 내용은 문서 지향 NoSQL에만 적용됩니다. 있다 다른 종류의 다른 고려 사항이 필요없는 NoSQL의는.