구현은 비슷하지만 유스 케이스의 차이점은 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?.
건초 더미는 버킷베이스이며 정상적인 것은 아닙니다. 나는 정상적인 것이 r-tree가 아니라는 것을 안다? –
@ 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
@JimThio .. R-Tree에 참여한 기고가는 실제로 10 세대 파트너이며 TST로 지형 공간 및 MongoDB에 대해 알기 위해 다음과 같은 상용 서비스를 제공합니다 (http://t-sciences.com/geospatial_and_mongodb). .php). – Stennie