2012-09-14 7 views
1

mongodb에는 2 가지 유형의 지형 공간 인덱스가있는 것으로 보입니다.Mongodb geohaystack은 표준 mongodb 공간 인덱스와 동일합니까?

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

표준 하나. 메모 사용 :

컬렉션 당 지형 공간 인덱스는 현재 1 개일 수 있습니다. MongoDB에서 복수 인덱스를 만들 수 있지만이 동작은 이며 지원되지 않습니다. MongoDB는 하나의 색인만을 사용하여 단일 쿼리를 지원할 수 있기 때문에 대부분의 경우 여러 개의 지리 색인을 사용하면 바람직하지 않은 동작이 발생합니다.

그리고이 소위 geohaystack이 있습니다.

http://www.mongodb.org/display/DOCS/Geospatial+Haystack+Indexing

그들은 모두 동일한 알고리즘을 사용하여 항. 그들은 둘 다 지구를 여러 격자로 바꾼다. 그런 다음이를 기반으로 검색합니다.

그래서 무엇이 다른가요?

몽고 (Mongodb)는 Rtree 등을 사용하지 않는 것 같습니다.

NB :이 질문에 대한 답변은 How does MongoDB implement it's spatial indexes?에 2d 색인이 geohash를 사용한다고 나와 있습니다.

답변

3

구현은 비슷하지만 유스 케이스의 차이점은 Geospatial Haystack Indexing 페이지에 설명되어 있습니다.

모래 사장 인덱스

작은 영역 위도/경도 검색어 튜닝 "버킷 기반"(일명 "사분면")를 검색 같습니다 bucketSize 파라미터가 필요

In addition to ordinary 2d geospatial indices, mongodb supports the use 
    of bucket-based geospatial indexes. Called "Haystack indexing", these 
    indices can accelerate small-region type longitude/latitude queries 
    when additional criteria is also required. 

    For example, "find all restaurants within 25 miles with name 'foo'". 

    Haystack indices allow you to tune your bucket size to the distribution 
    of your data, so that in general you search only very small regions of 
    2d space for a particular kind of document. They are not suited for 
    finding the closest documents to a particular location, when the 
    closest documents are far away compared to bucket size. 

및 건초의 세분성을 결정 색인.

따라서, 예를 들어 :

db.places.ensureIndex({ pos : "geoHaystack", type : 1 }, { bucketSize : 1 }) 

이 실시 예 1의 bucketSize 경도 나 위도의 1 개 단위 내에서 키가 동일한 버킷에 저장된 인덱스를 생성한다. 인덱스에 추가 범주를 포함 할 수도 있습니다. 즉, 위치 정보를 찾는 것과 동시에 정보를 조회합니다. 사용 사례는 일반적으로 "근처"위치 (즉, "이십오마일 내 레스토랑")를 검색 건초 더미 지수가보다 효율적으로 할 수있는 경우

{ loc: "x,y", category: z } 

:

B- 트리 표현은 다음과 유사 할 것이다. 추가 인덱싱 된 필드 (예 : 카테고리)에 대한 일치 항목을 찾아 각 버킷에서 계산할 수 있습니다.

대신 "가장 가까운 레스토랑"을 검색하고 거리에 관계없이 결과를 반환하려는 경우 일반적인 2 차원 색인이 더 효율적입니다.

현재 (MongoDB 2.2.0) 건초 인덱스에 약간 제한 : 하나 개의 추가 필드는 덤 지수 부가 인덱스 필드는 단일 값이 아닌 배열

  • 널 긴/위도를이어야
  • 에 포함될 수

    • 값이 지원되지 않습니다.

    참고 : 위도 사이의 거리는 크게 (경도가 작음) 크게 달라집니다. 참조 : What is the distance between a degree of latitude and longitude?.

  • +0

    건초 더미는 버킷베이스이며 정상적인 것은 아닙니다. 나는 정상적인 것이 r-tree가 아니라는 것을 안다? –

    +1

    @ JimThio : 기본 2d 구현은 실제로 B- 트리 기반입니다. R-Tree 구현을 위해 ([SERVER-3551] (https://jira.mongodb.org/browse/SERVER-3551)) 기여하고있는 사람이 적어도 한 명이나되었지만 이것은 당겨서 발생하지 않았습니다 요청은 아직 없습니다. MongoDC가 B-Tree와 R-Tree를 대조하여 최근에 발표 한 내용은 그가 [MongoDB와의 RTree Spatial Indexing] (http://www.slideshare.net/nknize/rtree-spatial-indexing-with- mongodb-mongodc). – Stennie

    +0

    @JimThio .. R-Tree에 참여한 기고가는 실제로 10 세대 파트너이며 TST로 지형 공간 및 MongoDB에 대해 알기 위해 다음과 같은 상용 서비스를 제공합니다 (http://t-sciences.com/geospatial_and_mongodb). .php). – Stennie