2013-10-05 3 views
1

저는 최근 MongoDB에 대해 소개되었습니다. (모든 프로젝트에 사용 된 MySQL과 비교할 때) 많이 좋아했습니다.nosql/document/MongoDB를 관계형 데이터베이스로 사용하는 것이 왜 열등합니까?

그러나 일부 특정 상황에서는 문서와 함께 내 데이터를 간단한 ID로 "연결"하는 것이 더 효과적입니다 (중복 된 데이터를 줄이기 위해). 사용자의 위치가 실제로 Country에 ID이다

예를 들어, I는 CountryUser 문서를 가질 수있다 (a Country 문서 따라서 각 사용자에 Country 데이터를 복제, 더 많은 데이터를 포함하기 때문에 이해되지 않는다).

내가 궁금한 점은 .. 관계 데이터베이스를 사용하는 것에 비해 MongoDB가 열등한 이유는 무엇입니까?

MongoDB와 두 개의 트랜잭션을 수행하는 것과 달리 조인을 수행하여 트랜잭션을 저장할 수 있습니까?

답변

1

그게 좋은 질문입니다 .. !!

설명 된 데이터 유형에 nosql db를 사용할 때 분명히 잘못된 점은 없습니다. 간단한 사용법은 완벽하게 잘 작동합니다.

요점은 적절한 관계가 정의 된 올바른 구조의 데이터를 저장하고 쿼리하는 목적을 달성하기 위해 오랜 시간 동안 관계형 데이터베이스가 설계되었다는 것입니다. 따라서 많은 양의 잘 구조화 된 데이터의 경우 성능과 기능이 nosql 데이터베이스가 제공하는 것보다 훨씬 많을 것입니다. 그들이 더 성숙한 이래로 .. 그 공 게임 .. !!

한편 nosql 데이터베이스는 매우 많은 양의 구조화되지 않은 데이터를 처리하도록 설계되었으며 분산 환경 스케일링을 지원합니다. 그래서 지금은 완전히 다른 볼 게임 ..

그들은 기본적으로 다른 데이터를 처리하고, 따라서 다른 전략을 가지고/실행은 여러 이상의 확장 성까지

0

MongoDB를이 지상에서 설계되었습니다 .. 주어진 데이터를 가져올 계획 서버. MongoDB 데이터베이스가 단일 서버에 비해 너무 느리거나 너무 커지면 큰 컬렉션을 "분할"하여 서버를 추가 할 수 있습니다. 즉, 콜렉션은 여러 서버로 나뉘며 각 콜렉션은 콜렉션의 다른 부분을 관리해야합니다.

MongoDB가 JOIN을 수행하지 않는 이유는 하나 또는 두 개의 콜렉션이 여러 노드에 분할 될 때 JOIN이 잘 수행되도록하는 것이 불가능하기 때문입니다. JOIN은 테이블/콜렉션 A의 각 항목을 테이블/콜렉션 B의 각 항목과 비교해야합니다. 모든 데이터가 한 서버에있을 때이 단축키가 있습니다. 그러나 데이터가 여러 서버에 분산되어있는 경우 많은 양의 데이터를 서로 비교하고 동기화해야합니다. 이것은 많은 네트워크 트래픽을 필요로하고 작업을 매우 느리고 비싸게 만듭니다.

+0

MongoDB가 열세 인 이유에 대한 질문에 대한 답이 확실하지 않습니다. – corgrath

0

두 개의 테이블, 국가 및 사용자 만있는 것이 맞습니다. 그렇다면 복제 된 유일한 데이터는 외래 키입니다. 이는 큰 문제가 아닙니다. 중복이 더 많으면 DB 설계 자체에 의문을 제기합니다.

개념적으로 NOSQL에서 할 수 있지만 그 이유는 무엇입니까? NOSQL이 새로운 것이기 때문에? 좋아, 그럼 배울 수 있지만 기억하지, "그것이 파산하지 않으면 고치지 마라." 분명히 응용 프로그램은 이미 관계형에서 실행 중입니다. 데이터가 MongoDB의 개별 문서에 저장되어 있고 상호 연관 시키려면 링크를 사용해야합니다. 링크는 조인보다 더 효과적 일 수 있으며 느려질 수 있습니다.외래 키를 저장하는 것보다 나은 링크를 저장해야합니다. 또는 하나의 문서를 MongoDB의 다른 문서에 임베드 할 수 있습니다. 그러면 중복이 증가 할 수도 있습니다.

현재 MySQL에서 실행 중이면 분산 서버에서 실행되지 않으므로 Mongo의 분산 서버 사용은 적합하지 않습니다. 이를 활용하려면 서버를 추가해야합니다. 테이블이 관계형으로 적절하게 색인화되면 다량의 데이터를 검색 할 필요가 없습니다.

그러나 복잡한 응용 프로그램이 아니며 둘 중 하나를 사용할 수 있습니다. 데이터가 관계형을 가진 MPP 환경에 저장되면 매우 잘 실행되며 많은 양의 데이터를 검색 할 필요가 없습니다. 그러나 MPP에서 파티션 키를 선택하는 데는 두 가지 요구 사항이 있습니다. 1. 데이터를 균일하게 분배 할 수있는 파티션을 선택하십시오. 2. 데이터의 배열을 허용 할 수있는 키를 선택하십시오. 두 파일의 분할 키 (분할 키)와 동일한 키를 사용하는 것이 좋습니다.

내가 MongoDB를 사랑하는만큼, 나는 당신의 앱을 옮길 때 그 가치를 보지 못한다.

관련 문제