가장 좋은 방법은 {와 컬렉션을 만드는 것입니다 해당 사용자가 전혀 확인되었습니다 단지 여부, 사용자가 특정 사진을 볼 때 총 시간을 알 필요가 없습니다 _id : 생성 자동적으로, 발견과 pictureID, viewerID}
(pictureID, viewerID)으로 제한 할 (1) 및 인덱스를 설정하는 것이 매우 중요 슈퍼 초고속 레벨 99을 확인하게됩니다 pictureID 및 viewerID에 인덱스. find(). limit (1)은 findOne보다 빠르기 때문에 현재 벤치마킹에서 사용합니다.
사용자별로 볼 수있는 이미지 배열이없는 이유는 무엇입니까? 배열을 통한 검색은 컬렉션에서 전체 문서를 검색하는 것보다 느리기 때문입니다. 천만 이미지? 문제 없어. 이것은 mongodb가 빛나는 곳입니다. 귀하의 것과 같이 큰 규모의 데이터베이스를 위해 확장 할 수 있도록 설계되었습니다. 문서가 16MB 미만이고 3 가지 속성이있는 한, 걱정할 필요가 거의 없습니다.
이미지를 삭제하면 db.viewed.remove ({pictureID : pictureID}) 만 삭제되고 이미지와 관련된 모든 것이 제거됩니다.
사용자 삭제시 db.viewed.remove ({viewerID : viewerID})! 사용자가 이미지 또는 계정을 삭제할 때이 작업을 수행하지 마십시오. 유지 보수 시간에 말하거나 한 시간에 한 번 말하십시오. 제거 할 항목을 저장하는 pendingRemovingImages 및 pendingRemovingUsers가있는 콜렉션을 작성하십시오. 이미지 및/또는 사용자별로 대량 제거를 수행하려면에 $를 확인하십시오.
나는 당신의 질문을 가장 흥미롭고 내 방향으로 가야한다고 강하게 느낍니다.
세션에 사진 ID를 추가하고 대량으로 DB를 업데이트 할 수 있으므로보고있는 모든 사진을 업데이트하는 대신 WHERE ID IN (5, 10, 15, 모든 ID)을 업데이트 할 수 있습니다. 이렇게하는 부정적인면은 사용자가 n-1 개의 이미지를 탐색 한 다음 로그 아웃하지 않으면 n-1 개의 이미지 로깅을 잃어버린 것입니다. – JimL
감사합니다 짐 - 대량 삽입물을 말하는 건가요? (정확하게 업데이 트가 아닌?). 그것은 많은 도움이 될 것이지만 테이블은 여전히 엄청나게 커질 것입니다. 일주일 정도 지나면 관리가 어려울 것입니다. – OneSolitaryNoob
아, 오늘 너무 일찍 로그인 했어. 여러 개의 삽입 쿼리를 수행해야하지만 준비된 명령문을 사용하는 경우 실행시 준비되는 쿼리 2-15 (또는 사용자가 결정한 번호)의 이점을 누릴 수 있습니다. 테이블이 얼마나 커야합니까? SQL은 수백만 행을 처리 할 수 있습니다. 또한 테이블/샤딩을 분할하는 방법을 살펴볼 수도 있습니다. – JimL