mysql을 통해 mongodb와 같은 nosql 데이터베이스를 언제 사용해야합니까?


13

나는 nosql 데이터베이스 개념에 익숙하지 않으며 결코 사용하지 않았습니다. 내가 읽은 내용과 내가 이해 한 작은 내용을 기반으로 외래 키 개념이없는 경우 데이터간에 참조를 만들 수없는 경우 특히 유용 할 수있는 방법을 아직 알지 못합니다.

예를 들어 '이 사용자가 게시 한 모든 댓글 찾기', '앨범 항목에 속하는 모든 사진 찾기'등과 같은 간단한 것을 어떻게 쿼리합니까?

nosql 시스템은 정적 관계형 데이터 모델에서 멀어 지지만 여전히 그러한 참조를 추적 할 수 있습니까? 쿼리에 활용할 수있는 외래 키와 비슷한 것이 있습니까?

답변:


19

일반적인 용도

  • 시스템을 만들 때 명확하게 정의되지 않은 데이터 구조가있는 경우 예를 들어 사용자 설정을 nosql로 유지하는 경향이 있습니다. 또 다른 예로 사용자가 런타임에 필드를 추가 할 수 있어야하는 시스템이있었습니다. RDBMS에서 매우 고통스럽고 NoSQL에서는 바람이 불었습니다.

  • 모델 구조가 주로 하나 또는 소수의 모델 객체를 중심으로하고 대부분의 관계가 실제로 기본 모델 객체의 하위 객체 인 경우. 이 경우 실제 조인이 거의 필요하지 않습니다. 예를 들어 연락처 관리 시스템을 nosql에서 아주 훌륭하게 구현할 수 있다는 것을 알았습니다. 한 사람이 여러 주소, 전화 및 전자 메일을 가질 수 있습니다. 그것들을 각각 별도의 테이블에 넣는 대신에 모두 같은 모델의 일부가되고 한 사람의 객체를 갖게됩니다.

  • RDBMS에 일반적으로 필요한 단일 서버를 갖지 않고 여러 서버에서 데이터를 클러스터링하여 이점을 얻으려는 경우.

  • 캐싱. RDBMS를 기본 데이터베이스로 고수하려는 경우에도 NoSQL 데이터베이스를 사용하여 쿼리 결과를 캐싱하거나 카운터와 같은 데이터를 유지하는 것이 유용 할 수 있습니다.

  • 문서 저장 일관성있는 문서를 저장하려면 데이터베이스에 MongoDB와 같은 일부 NoSQL 데이터베이스가 실제로 해당 데이터베이스를 저장하는 데 특화되어 있습니다.

조인은 어떻습니까?

솔직히 no join 일도 처음에는 나에게 무섭게 들렸다. 그러나 트릭은 SQL에서 생각을 멈추는 것입니다. 실제로 응용 프로그램을 실행할 때 메모리에있는 객체로 생각해야합니다. 이것들은 단지 NoSQL 데이터베이스에 영역으로 저장되어야합니다.

자식 개체와 함께 전체 개체 그래프를 저장할 수 있기 때문에 조인이 필요하지 않습니다. 그리고 필요한 것이 있으면 글 머리 기호를 물고 두 객체를 모두 가져 와서 응용 프로그램 코드에 참여해야합니다.

다행히 스키마를 올바르게 설정하면 대부분의 드라이버가 참여할 수 있습니다.

자세한 내용은 Martin Fowler를 권장 합니다.


2

구조, 관계 및 특성이 아직 알려지지 않았고 분석 대상인 데이터를 기록하기 위해 프로젝트의 계획 단계 (개발 전, 설계 전)에 이러한 데이터베이스를 사용하고 있습니다. 그 후 모든 것을 관계형 모델에 맞추려고합니다.


2
뭐? ... 왜? ...
Robert Harvey

따라서 실제로는 mysql과 같이 일반적인 이름, 전자 메일 등의 사용자 정보와 같이 많이 변경되지 않는다는 것을 알고있는 데이터에 관계 모델을 활용할 수 있습니다. 그런 다음 nosql 데이터베이스와 함께 사용하여 사용자 활동 로그와 같은 구조화되지 않은 불규칙 데이터를 처리하십시오. 분할 책임의 종류. ? 아니면 모든 것이 설정되면 nosql 데이터베이스로 시작하고 관계형 모델로 완전히 마이그레이션하도록 제안하고 있습니까?
akomada

분석이 시작되기 전에 이미 데이터가있는 시나리오에서 (예 : 센서가 이미 데이터를 뿜어내는 기존 팩토리를 제어하는 ​​소프트웨어를 다시 작성하도록 요청 됨) 즉시 nosql 데이터베이스에서 데이터 캡처를 시작합니다. 그리고 가능하다면 관계형 모델에 맞도록 노력하겠습니다. 가능하지 않으면 nosql을 계속 진행합니다.
Mike Nakis

0

어떤 경우에는 외래 키가 필요하지 않습니다. 예를 들어 :

이 사용자가 올린 모든 댓글 찾기

comments사용자에 해당하는 문서 부분을 로드하는 것만 큼 간단 할 수 있습니다 . 이것을 비정규 화 (denormalization )라고 합니다. 조인이있는 두 세트를 갖는 대신 하나의 문서가 있고 필요한 모든 것이 문서 안에 있습니다. 하나의 쿼리, 조인 없음, 더 나은 성능 .

그러나 일부 환경에서는 데이터 복제 가 발생할 수 있으므로 한 문서에서 다른 문서로 연결하는 것이 적합 할 수 있습니다. 이 경우 MongoDB 정규화, 외래 키 및 조인 , 데이터베이스 참조 페이지 및 특히 DBRefs 기능에 관심이있을 수 있습니다 .

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