2010-05-09 28 views
5

Tengo un uso de bienes raíces y una "casa" contiene la siguiente información:base de datos/NoSQL - forma latencia más baja para recuperar los datos siguientes

house: 
- house_id 
- address 
- city 
- state 
- zip 
- price 
- sqft 
- bedrooms 
- bathrooms 
- geo_latitude 
- geo_longitude 

necesito para realizar una (baja latencia) de recuperación extremadamente rápida de todas las casas dentro de una casilla de coordenadas geográficas .

Algo así como el SQL a continuación (si tuviera que utilizar una base de datos):

SELECT * from houses 
WHERE latitude IS BETWEEN xxx AND yyy 
AND longitude IS BETWEEN www AND zzz 

Pregunta: ¿Cuál sería la forma más rápida para mí para almacenar esta información para que pueda llevar a cabo la recuperación más rápida de datos basados ​​en la latitud & longitud? (por ejemplo, base de datos, NoSQL, Memcache, etc.)?

+1

Esto es como preguntar si necesito ir al Walmart más cercano de la manera más rápida, sin mencionar ¿Qué tan lejos está? ¿Cuáles son los vehículos que tienes? y ¿Los caminos ya están desarrollados donde vives? Es difícil responder a su pregunta. Es decir, Memcached podría ser el más rápido, pero ¿cómo se ejecutan las consultas sobre él? Este tipo de preguntas genéricas no podrían tener otra respuesta que la discusión. Agregue más información en su pregunta – mamu

+1

Esto parece un duplicado de http://stackoverflow.com/questions/2796575/nosql-how-to-retrieve-a-house-based-on-lat-long. – kristina

Respuesta

0

ThereMongoDB admite índices geoespaciales, pero hay formas de reducir el tiempo de cálculo para cosas como esta. Dependiendo de cómo se organicen sus datos, puede colocar casas en 'teselas' identificables y luego buscar todas las casas para una determinada loseta y, a partir de ese conjunto de datos reducido, clasificar según la distancia de las coordenadas que tenga.

Dependiendo de la cantidad de teselas que haya, puede usar máscaras de bits para encontrar casas que pueden estar cerca o superponer varias teselas.

1

Esta es una consulta típica para una aplicación del Sistema de Información Geográfica (GIS). Muchos de estos se resuelven mediante el uso de quad-tree o índices espaciales similares. El mosaico mencionado es cómo estos a menudo terminan siendo implementados.

Si un índice que contiene las coordenadas podría caber en la memoria y el DBMS tenía un optimizador decente, entonces un escaneo de tabla podría proporcionar una distancia cartesiana desde cualquier punto de interés con una carga aérea bastante baja. Si esto es demasiado lento, la consulta podría filtrarse previamente comparando cada eje de coordenadas por separado antes de realizar el cálculo de la distancia completa.

0

Voy a suponer que está haciendo muchas más lecturas que escrituras, y no necesita tener su base de datos distribuida en docenas de máquinas. Si es así, debe buscar una base de datos optimizada para lectura como sqlite (mi preferencia personal) o mysql, y usar exactamente la consulta SQL que sugiera.

La mayoría (no todas) Las bases de datos NoSQL terminan siendo demasiado complicadas para consultas de este tipo, ya que son mejores para buscar valores exactos en sus índices en lugar de rangos.

Es bueno que estés buscando un cuadro delimitador en vez de una distancia cartesiana; lo último sería más difícil para una base de datos SQL para optimizar (aunque podría limitarlo a un cuadro delimitador, luego hacer el cálculo de la distancia cartesiana más lenta).

Cuestiones relacionadas