그래, Mongodb에서 점점 더 많이 발전한다. 다중 콜렉션과 인덱스를 가진 하나의 커다란 콜렉션이 필요하다. (컬럼과 필드는 테이블 형식의 데이터와 달리 각 문서마다 다를 수 있기 때문에). 가능한 가장 효율적인 방법으로 코드를 작성하고 재사용 가능한 코드를 개발하려고하면 모든 문서에 대해 하나의 콜렉션을 사용할 수 있고 필드의 인덱스 만 사용할 수 있습니다. 인덱스를 가진 하나의 콜렉션에 모든 문서를 가짐으로써, 모든 콜렉션은 동일한 콜렉션에 삽입되기 때문에 모든 폼 처리 코드와 다른 코드를 재사용 할 수 있습니다. 예를 들어MongoDB - 하나의 콜렉션 인덱스 사용하기
:
내가 접촉 관리자를 개발하고 내가 연락처 "개인"과 "기업"의 두 가지 유형이 있다고 할 수 있습니다. 저의 원래 생각은 개인이라고 불리는 컬렉션과 비즈니스라고하는 두 번째 컬렉션을 만드는 것이 었습니다. 그러나 그것은 sql에서 개발하는 데 익숙했기 때문에 어디에서 열이 각 테이블마다 다를 수 있기 때문에 적절할 것입니다. 문서 dbs의 유연성에 대해 생각하기 시작할수록 더 많은 것을 생각하기 시작했습니다. "정말 이걸로 두 개의 모음이 필요합니까?" 방금 "연락처 유형"이라고하는 각 문서에 필드를 추가하고 색인을 작성하면 실제로 두 개의 모음이 필요합니까? 각 문서의 필드/열이 모두 같을 필요는 없으므로 (SQL과 같이) "문서 유형"필드와 해당 필드의 인덱스가있는 한 각 문서는 고유 한 필드를 가질 수 있습니다.
그렇다면 나는 "개인"및 "비즈니스"에 대해 하나의 컬렉션 만 있으면 "사용자"또는 "연락처 기록"또는 다른 데이터에 대한 별도의 컬렉션이 필요하다고 생각하고 생각하기 시작했습니다. . 이론적으로 나는 한 번에 컬렉션 전체 솔루션을 구축 할 수 없으며 "사용자", "개별 연락처", "비즈니스 연락처", "연락처 기록"과 같은 "유형"및 인덱스를 지정하는 각 문서의 필드를 가질 수 없습니다 "등, 다른 문서와 관련된 문서 인 경우"부모 키/외부 "ID 필드에서 색인을 생성 할 수 있습니다 ...
이렇게하면 양식 처리 코드가 모두 동일합니다 (동일한 콜렉션에 삽입). 이것은 많은 코딩을 절약 할 수 있지만 인덱스와 보조 인덱스를 사용하여 db가 여전히 빠르게 실행되고 컬렉션이 커짐에 따라 미래의 문제가 발생하지 않도록하고 싶습니다. 상상할 수 있듯이 모든 것이 하나의 컬렉션에 있다면 사용자 기반이 커짐에 따라이 컬렉션에는 수십만 개의 문서가있을 수 있지만 성능을 최적화하려면 인덱스와 보조 인덱스가 필요합니다.
제 질문은 : 이것은 mongodb 개발자들이 사용하는 일반적인 방법입니까? 그 이유는 무엇? 만약 있다면, 낙오점은 무엇입니까? 이것이 일반적으로 사용되는 방법 인 경우이 방법을 사용하는 것에 대해서도 긍정적 인 반응을 나타내십시오. 고맙습니다.
그래도 나는 컬렉션 이름과 사용자 ID에 색인을 붙인 다음 사용자 세션 ID로 결과를 줄이거 나 필터링하면 여러 사용자가있을 수 있지만 둘 이상의 모음이 필요합니다. 그럼 난 여전히 하나의 컬렉션을 사용하고 있습니까 ?? – user982853
나는 cassandra가 역 정규화에 대해 알고 있지만 다른 많은 SQL은 실제로 SQL과 전혀 다르지 않습니다.문서 지향 데이터베이스는 실제로 데이터베이스를 구성하는 다른 방법입니다. 또한 mongo는 관계형 스키마를 수행 할 때 매우 관대합니다. – kelloti