Servidor Couchbase

Creación de funciones definidas por el usuario en Python y JavaScript para consultas geoespaciales

Las consultas SQL++ pueden acceder a los datos almacenados en tu cluster Couchbase de varias maneras. Hay situaciones en las que tener la lógica de negocio como parte de tus consultas de datos también puede ser beneficioso. SQL++ soporta esto con Funciones Definidas por el Usuario (UDFs) que han estado disponibles desde Couchbase 7.0

En esta entrada de blog, creamos una UDF en JavaScript que consulta puntos a partir de la ubicación de un usuario, de forma dinámica, utilizando SQL++. Además, realizamos los mismos cálculos de distancia con una UDF en Python dentro de la aplicación Servicio de análisis.

Nuestro caso de consulta geoespacial

Nuestra aplicación generará puntos geográficos de interés a partir de nuestra base de datos que estén cerca de la ubicación GPS de un usuario, de forma similar a servicios como Google Maps, que se muestra en la captura de pantalla siguiente. Para este ejemplo, utilizaremos la función conjunto de datos de muestras de viajes que está disponible en un bucket de ejemplo proporcionado por Couchbase.

En particular, nos interesa ver la hitos y aeropuertos alrededor de la ubicación actual del usuario. Esto no puede conseguirse utilizando directamente una consulta SQL++, ya que el cálculo de la distancia se basa en la ubicación geográfica en tiempo real del usuario. SQL++ admite la definición de UDF en JavaScript para realizar lógica personalizada en las consultas.

Map shwoing searhc for local points of interest

Cálculo de distancias a partir de coordenadas GPS

Hay muchas formas de calcular la distancia entre dos conjuntos de coordenadas GPS. En este ejemplo, calcularemos la distancia utilizando la función Fórmula Haversine. Proporciona la distancia aproximada entre dos coordenadas GPS considerando la trayectoria como una esfera en lugar de una distancia en línea recta.

En este ejemplo se muestra código JavaScript para calcular distancias geográficas:

Definimos dos funciones JavaScript: una que realiza la conversión entre grados y radianes y otra que calcula la distancia en kilómetros entre las coordenadas GPS de la otra función.

Importación de UDFs a Couchbase

Estas funciones JavaScript pueden importarse ahora a Couchbase utilizando la función API RESTcomo se muestra a continuación con el rizo mando:

Después de este paso, la UDF se puede definir en la consola web de Editor de consultas:

Aquí, el matemáticas hace referencia al código JavaScript biblioteca que creamos para evaluar la UDF.

La UDF puede probarse ahora con coordenadas GPS de muestra en SQL++ utilizando la función Ejecute Función como se muestra a continuación

Podemos observar que la función funciona según lo previsto cuando proporcionamos manualmente las coordenadas GPS a la función.

Conexión de la UDF a los datos de Couchbase

En el viaje-muestra de datos, tenemos las coordenadas GPS del hitos y aeropuertos junto con otros lugares de interés como hoteles.

Podemos integrarlas en nuestras consultas como la siguiente:

Esta consulta devuelve una lista de los diez aeropuertos más cercanos a la ubicación del usuario (51.509865, -0.118092). Proporcionamos la latitud (a.geo.lat) y la longitud (a.geo.lon) campos incrustados en los documentos utilizando la potencia de SQL++.

Del mismo modo, podemos calcular los puntos de interés alrededor del usuario utilizando la función hito recogida a una distancia cada vez mayor del usuario:

Resultados de la consulta mostrando puntos de referencia cercanos:

Si ejecutamos estas consultas para varios usuarios al mismo tiempo, podríamos encontrarnos con problemas de rendimiento, ya que estamos utilizando los recursos informáticos que forman parte del clúster de Couchbase. 

En tales escenarios, Couchbase Analytics podría reducir el impacto en tu cluster. Couchbase Analytics está diseñado para ejecutar eficientemente consultas complejas sobre muchos registros. Las consultas complejas pueden incluir grandes operaciones ad hoc de unión, conjunto, agregación y agrupación, cualquiera de las cuales puede dar lugar a consultas de larga duración, alto uso de CPU, alto consumo de memoria o latencia de red excesiva debido a la obtención de datos y la coordinación entre nodos.

Funciones definidas por el usuario con Couchbase Analytics

Couchbase Analytics nos permite definir y utilizar Funciones definidas por el usuario en Python pero en el momento de redactar este documento requiere que activar la vista previa para desarrolladores en Couchbase Server. Esto se puede hacer con el siguiente comando:

El siguiente paso es crear un paquete Python, localmente, en el entorno de desarrollo con el UDF de Python. En este caso, el UDF es un método para calcular la distancia entre dos coordenadas GPS.

Aquí calculamos el distancia geodésica (la distancia más corta entre puntos a lo largo de una trayectoria curva) entre las dos coordenadas GPS con la ayuda de una biblioteca, geopy.

Empaquetado de la UDF

Para empaquetar la biblioteca, utilizamos un paquete shiv que puede empaquetar el código junto con sus requisitos para cualquier plataforma. Aquí, estamos utilizando Linux como Couchbase Server se ejecuta en un entorno Linux dentro de Docker.

Para subir este paquete binario con el UDF a Couchbase, tenemos que utilizar el comando API REST para el servicio Analytics. 

Esto carga el UDF empaquetado en el archivo pylib biblioteca en el por defecto alcance (anteriormente universo de datos) del entorno Analytics. Ahora podemos definir la UDF en el Workbench de análisis.

Esta definición indica que estamos definiendo una UDF llamada distancia_en_km que puede llamarse desde la función Python calcular_distancia definido en la clase cálculo_distancia dentro del módulo Python distancia.

Ahora podemos utilizar la UDF en nuestras consultas de Analytics del mismo modo que utilizamos la UDF en nuestras consultas de SQL++.

Asignación de datos del servicio de datos al servicio de análisis

Para consultar los datos en el Servicio de Datos desde el Servicio de Análisis, necesitamos mapa el viaje-muestra en Analytics que crea una copia sombra en tiempo real de los datos en el servicio de datos de Analytics. Para este ejemplo, necesitamos asignar las colecciones con datos geográficos, a saber, el hito, aeropuerto y hotel colecciones del ámbito del inventario en el viaje-muestra cubo.

Ejecución de la UDF de análisis con datos de Couchbase

Ahora, podemos ejecutar las mismas consultas que ejecutábamos antes en SQL++ pero con el Servicio Analytics. Sólo ha cambiado el nombre de la UDF. El resto de la interfaz es similar a la que teníamos con las consultas SQL++. Los resultados también serán similares a los anteriores.

Este enfoque es adecuado cuando queremos ejecutar estas consultas sin afectar al Servicio de datos que se utiliza habitualmente para nuestros datos transaccionales. Los datos se sincronizan entre Datos y el Servicio de análisis internamente en tiempo real en Couchbase.

Resumen

En esta entrada de blog, has aprendido a crear una Función Definida por el Usuario (UDF) en JavaScript que calcula distancias entre dos coordenadas GPS. Has visto cómo importar la UDF a Couchbase y luego integrarla en una consulta SQL++ para potenciar aplicaciones que podrían proporcionar puntos de interés alrededor de un usuario. También vimos cómo puedes realizar el mismo cálculo de distancia en un UDF basado en Python usando el servicio Analytics para reducir el impacto en tu cluster transaccional de Couchbase.

Para más información y referencias, consulte los siguientes recursos:

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Nithish Raghunandanan

Nithish es un ingeniero al que le encanta crear productos que resuelvan problemas del mundo real en poco tiempo. Ha trabajado en diferentes áreas de la industria en diversas empresas de Alemania y la India. Aparte del trabajo, le gusta viajar e interactuar con la comunidad tecnológica a través de Meetups y Hackathons. En su tiempo libre, le gusta probar cosas hackeándolas.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.