2016-06-14 1 views
1

mongoDB을 사용하여 다각형 모음을 저장하고 $geoIntersects 쿼리를 사용하여 특정 지점이 어느 다각형인지 확인하십시오. 이 같은MongoDB 캐시 메모리에 컬렉션이 있습니까?

mongooseSchema 외모 :

var LocationShema = mongoose.Schema({ 
    name: String, 
    geo: { 
     type: { 
      type: String 
     }, 
     coordinates: [] 
    } 
}); 

LocationShema.index({geo: '2dsphere'}); 

module.exports = mongoose.model('Location', LocationShema); 

그래서, 각 요소는 다각형이다. 쿼리가 더 빨라지고 전체 컬렉션이 메모리에 저장되기를 기대하면서 2dsphere 인덱스를 추가했습니다. 불행히도 ~ 20queries에 대해서는 약 600ms이 걸리므로 사용 사례가 너무 많습니다.

내 쿼리는 다음과 같다 :

Location.find({ 
      geo: { 
       $geoIntersects: { 
        $geometry: { 
         type: 'Point', 
         coordinates: [pos.lng, pos.lat] 
        } 
       } 
      } 
},...) 

인가가 어쨌든 빨리이 실행을 할 수 있습니까? MongoDB가 데이터베이스에있는 전체 콜렉션을 캐시하도록 강요 할 수 있습니까? 수있는 방법이 있습니까 컬렉션이 실제로 메모리 캐시에 저장되어 있는지 확인하십시오?

또한 지형 공간 쿼리를 빠르게 사용할 수있는 라이브러리 (예 : 라이브러리 등)를 사용할 수 있습니까?

+1

검색어의'explain()'을 게시 할 수 있습니까? – KRONWALLED

+0

mongo 쉘에서 쿼리를 실행할 때 'db.collectionName.find (query) .explain()' – profesor79

+0

흠, 셸을 사용하지 않고'mongoose'를 사용하고 있습니다. – Cristy

답변

1

mongo> 3.0을 사용하면 inMemory 저장소를 사용할 수 있으므로 시드 된 컬렉션이 메모리에 남아있을 때 mongo 인스턴스를 가질 수 있습니다 (모든 변경 사항은 유지되지 않습니다).

컬렉션이 정적 인 경우 다른면에서 Redis와 같은 캐시 저장소 또는 저장된 쿼리와 응답이 포함 된 TTL 색인 된 컬렉션을 구현할 수있는 방법이있을 수 있습니다.

시딩 프로세스는 현재 수집을 백업하고 메모리 수집을 통해 수행 할 수 있습니다.

mongo가 다른 콜렉션을로드해야하는 경우 (사용중 인 시스템에서) 빈번하게 쿼리 할 때 메모리에 잔여 물을 남깁니다.

모든 의견 환영합니다!

+0

그래서이 컬렉션을 위해서'inMemory' 저장소를 사용할 수 있습니까? 컬렉션을 "시드"하는 방법은 무엇입니까? – Cristy

+1

관련 디스크 블록이 OS의 디스크 버퍼에 존재하면 쿼리를 실행 한 후 (사용 가능한 메모리가 충분하다면) 기대할 것입니다. – robertklep

+0

@robertklep pls 수정 사항보기 – profesor79

관련 문제