Actualmente tengo mis datos geojson almacenados en este formato:
coord: [long, lat], time: unix timestamp, property: some propertyMe gustaría encontrar la ubicación más cercana con la marca de tiempo más cercana (lte). La forma en que lo estoy haciendo ahora mismo es:
collection.ensureIndex({loc: "2d"}) collection.find( {coord : { $near: [xval, yval], $maxDistance: 200 }, time: { $lte: time } }).sort({time: -1}).limit(1).toArray(function(err, queryResult) { (did some return 404 and 200 here) }Cuando el tamaño de los datos es pequeño, esto funciona. Pero como mi base de datos se incrementó a 50G+, esto falla (siempre devuelve 404 diciendo que no se encontró nada) y creo que es porque la forma en que consulto mis datos conduce a un rendimiento lento. ¿Cómo debo cambiar mi consulta/estructura de datos para mejorar y dejar que funcione de nuevo?
Primero debe escalar su mongodb verticalmente, agregando más ram y potencia de CPU, y esto hasta que alcance su próxima meseta. Su próximo paso es escalar horizontalmente (o fragmentar) su base de datos al tener más de una instancia de MongoDB manejando su conjunto de datos. Por supuesto, la fragmentación mejora mucho el rendimiento de la base de datos. Puede leer este artículo que describe prácticamente los pasos a seguir para escalar mongo.