2016-07-12 2 views
0

MongoDB에 초보자이므로 내 질문에 사소한 내용이있을 수 있습니다 ... 사용자가 주소록을 업로드 할 수있게하고 싶습니다. 문서가 I 상호 접촉 와 useres을 찾기 위해 전화 번호로 검색을 실행하고자하는 다음과 같은 구조를mongodb에서 색인 생성 빈도 업데이트 모음

{ 
"_id" : "56f29ecc2a00001800dbdf54", 
"contacts" : [ 
    { 
     "name" : "John", 
     "phoneNumber" : [ 
      "+18144040000" 
     ] 
    }, 
    { 
     "name" : "Andrew ", 
     "phoneNumber" : [ 
      "+14129123456" 
     ] 
    } 
] 
} 

이 즉

{"contacts.phoneNumber":"+14129123456"} 

제 질문은 - 추가 효율적입니다 이 색인

db.addresses.createIndex({ "contacts.phoneNumber": 1 }, { unique: false }, {background: true}) 

사용자가 자주 자신의 주소록을 업데이트한다는 사실을 고려하여 현재 데이터를 덮어 쓰거나 새로운 데이터를 삽입하는 그의 전화. 이 업로드는 일련의 전화 번호가있는 연락처 배열이있는 단일 문서입니다. 각 업로드/업데이트에는 수백/수천 개의 레코드가 포함됩니까?

+0

비 기능 요구 사항에 따라 다릅니다. 업로드 프로세스가 문서의 1000s를 가지고 있다고 언급했듯이 업로드 프로세스가 온라인 프로세스 또는 배치 프로세스와 동기화됩니까? – notionquest

+0

@notionquest 그 점을 지적 해 주셔서 감사합니다. 나는 그 점을 정교하게 제 질문을 편집했습니다. 각 사용자는 단일 문서를 보유합니다. – igx

답변

1

색인이 의미가 있습니다. 읽기와 쓰기 사이의 상충 관계가 있음을 효율화하십시오. 일반적으로 사용자 인터페이스는 모든 검색 (즉, 읽기)에 대해 신속하게 응답 할 것으로 기대됩니다. 따라서 특정 필드에 대한 색인 생성은 불가피합니다. 이를 토대로, "전화 번호"에 대한 색인 생성은 유스 케이스가 전화 번호에 대한 직접적인 검색이나 질의를 필요로한다는 것을 고려하면 괜찮습니다.

문서를 인덱싱하면 쓰기 성능이 저하됩니다. 그러나이 특정 인덱스는 쓰기 성능을 크게 저하시키지 않습니다. 더 많은 시간이 필요하다면 큰 업로드에 대한 일반적인 UI 디자인 인 업로드 진행률 표시 줄을 갖도록 UI 디자인을 재고해야 할 수도 있습니다.

또한 MongoDB에서 사용할 수있는 쓰기 문제 옵션을 확인할 수 있습니다. 쓰기 문제는 드라이브에서 확인 응답을 받을지 여부를 구성 할 수 있습니다.

승인없이 서면 의견 쓰기를 고려하면 쓰기 성능이 향상됩니다. 그러나 대부분의 응용 프로그램에서는 쓰기가 성공했는지 확인하기 위해 쓰기에 대한 승인을 기대합니다.

https://docs.mongodb.com/manual/reference/write-concern/

+0

인덱스 빌드가 background = true로 표시되었지만 감사합니다. 쓰기 성능이 저하됩니까? – igx

+2

Background = true - 인덱스를 처음 만들 때 인덱스 생성 프로세스가 백그라운드에서 실행되고 전체 데이터베이스를 차단하지 않는다는 것을 의미합니다. 원자 삽입/업데이트를 수행하면 색인이 즉시 업데이트됩니다. https://docs.mongodb.com/manual/core/index-creation/ – notionquest

+0

인덱스가 단일 값이 아니더라도 배열에 있지만 괜찮습니까? – igx