martes, 29 de diciembre de 2020

Buscar documentos sin alguna propiedad en CosmosDB


Como sabemos CosmosDB no tiene una estructura especifica con los documentos que podemos almacenar. Ya que vamos a guardar los datos utilizando Json, esto nos permite tener una estructura muy flexible y que puede cambiar en cualquier momento. Es una de sus grandes ventajas.

Con el paso del tiempo podemos actualizar los documentos o agregar documentos nuevos con propiedades distintas, lo cual puede provocar que tengamos documentos con datos distintos en su “estructura” o sus propiedades de Json.

Hace unos días me toco buscar documentos que no tenían una propiedad especifica después de una pequeña búsqueda encontré la forma y es muy simple.

Utilizando not is_defined(Propiedad) podemos buscar dentro de nuestra base de datos cuales documentos no tiene esa propiedad en específico.

Por ejemplo

SELECT * FROM c WHERE NOT is_defined(c.tax)

Este script nos permite buscar en la base de datos todos los documentos que no tienen la propiedad tax. Con lo que podemos luego actualizar el documento agregándole la propiedad de ser necesario.

Regresar 

Etiquetas: , ,

lunes, 28 de diciembre de 2020

Java SQLite



SQLite es una base de datos pequeña con la que podemos almacenar datos de manera rápida y fácil. Esta base de datos podemos empotrarla dentro de nuestras aplicaciones y tiene característica muy importante hoy en día, que nos permite correrla en casi cualquier sistema operativo. Podemos usarla para aplicaciones web, móviles y de escritorio.   Además, es una base de datos gratuita.

Podemos encontrarla en el siguiente enlace https://www.sqlite.org/index.html

Tenemos varias formas para crear nuestra aplicación y que se pueda conectar a SQLite. Podemos hacer una aplicación en Netbeans y descargar el Jar que nos permite conectarnos o podemos hacer un proyecto con Maven.

Para este ejemplo vamos a utilizar Maven. Sin embargo, se puede descargar el JAR de SQLite para poder utilizarlo en otros proyectos que no estén basados en Maven.

Cuando ya tenemos nuestro proyecto de Maven listo tenemos que agregar la referencia del Jar, de la siguiente manera.



Ahora vamos a crear una clase llamada SQLiteConnection donde se requiere agregar algunas clases para poder crear la conexión y las consultas a la base de datos.



Con estas clases agregadas a nuestro código ya podemos iniciar con la creación de la conexión



Primero como se puede ver en la línea 19 tenemos que agregar la dirección donde se encuentra o se va a encontrar nuestra base de datos (si no existe el archivo se va a crear cuando se corra nuestra aplicación). Para ubicar la base de datos usamos el path que maneja el sistema operativo que usamos. Ahora si solamente agregamos el nombre de la base de datos como la tenemos en la línea 19 esta se va a crear donde está ubicada nuestra aplicación.

En la línea 24 vamos a registrar el driver de SQL que vamos a usar para nuestra base de datos en este caso como se puede observar es el de SQLite.

Luego en la línea 25 iniciamos una conexión a nuestra base de datos usando la clase DriveManager. Como se puede observar se debe indicar donde esta ubicada la base de datos.

Como se puede ver en la siguiente imagen ya estamos listos para crear tablas en nuestra base de datos. Lo primero que vamos a hacer es crear el script para la creación de la tabla.



En la línea 37 creamos un objeto Statement basado en la conexión que ya teníamos. Con esto podemos ejecutar el script para crear la tabla como se puede observar en la línea 38. Esta última línea nos permite crear la tabla si no existe.

Bueno y para agregar datos en nuestra tabla es simplemente ejecutar un script con un insert como se puede ver en la siguiente imagen.

 



En la línea 46 se crea el script con los datos que deseamos almacenar en nuestra tabla. En la línea 49 se crea el objeto statement basado en la conexión de la base de datos. Luego de esto en la línea 50 ejecutamos el script contra nuestra base de datos para poder guardar la información.


Finalmente vamos a poder crear los SELECT para poder ver los datos que se almacenaron en nuestra base de datos. En este caso cambian algunas cosas. Por ejemplo, además del objeto statement y la ejecución del script tenemos que crear un objeto de tipo ResultSet para obtener la información de nuestra tabla. En la línea 59 se ejecutar el script como se puede observar y este nos retorna un objeto con los datos almacenados. Para poder recorrer todos los nombres usamos un ciclo While hasta que todos los objetos de esta consulta son mostrados.

En la línea 61 se muestra línea por línea los nombres y los ids que se generaron para nuestros datos. Usando el método getString (se puede usar otro tipo de método para cada tipo de dato por ejemplo getInt).

Solo nos queda correr nuestra aplicación para poder ver el resultado


Ejemplo

Etiquetas: , , , ,

jueves, 10 de diciembre de 2020

Dapper - SQL

 


Tratando de mejorar el rendimiento de una aplicación encontré este framework buscando alternativas a Entity Framework. Algunos queries que se crean con EF son complejos y demandan cierto rendimiento de la aplicación.  

Después de comprar algunos resultados haciendo las mismas consultas entre EF y Dapper se encuentran cosas interesantes como que se reduce la cantidad de recursos con Dapper. Cada uno de los queries que se crearon redujeron su tamaño en memoria, cargando los mismos datos.

Dapper lo que hace es mapear los resultados de las consultas de SQL en objetos de C#, los cuales luego se pueden utilizar para hacer cualquier otra cosa que se quiera.

Vamos a ver como utilizarlo creando un proyecto y una base de datos de SQLite.

 



Ahora lo que tenemos que hacer es crear una tabla en la nueva base de datos de SQLite



Vamos a usar una única table con 4 registros para nuestro ejemplo.

Lo que debemos hacer ahora es una clase POCO con las propiedades de la tabla. En nuestro ejemplo solo ocupamos el id y el producto. Con esto ya podemos mapear nuestros datos a una clase POCO.


Tenemos que utilizar las librerías que instalamos y algunas otras. Como se puede ver hacemos un using de Dapper.



El código para las consultas lo vamos a hacer en la clase Main


Como se puede ver en el primero script hacemos un SELECT de todos los datos que tenemos. Creamos la conexión de SQLite para poder hacer la consulta de datos. Luego simplemente usamos la clase POCO para correr y mapear los datos resultantes del Query. Luego como se puede ver en el ciclo for los datos se pueden manipular fácilmente.

Pero también tenemos la opción de pasar parámetros a las consultas de SQL. Como se ve en el siguiente ejemplo tenemos el parámetro @id el cual es la llave de nuestra tabla. En este caso solo se va a retornar un solo dato.


Para poder pasar los parámetros se pasan con el query y el nombre de los parámetros con el valor que se necesita.

Dapper es un Framework simple pero poderoso para poder cargar los datos de las bases de datos a objetos de POCO. Este, además, requiere de menos memoria que EF. Por otro lado, nos permite utilizar lenguaje de SQL para hacer las consultas que en lo personal me parece más fácil para consultar las bases de datos SQL.

Puede encontrar más información aquí 


Etiquetas: , , ,