Mariadb con Vaadin Flow

Hablaremos un poco sobre @Push de Vaadin Flow, MariaDB

El challenge de Alejandro Duarte me trajo muchos recuerdos 😅 cuando hize algo parecido updateando una ProgressBar con Vaadin a la hora de subír un fichero.

El menciona como se podria incluir una progressbar

Challenge: Try using the ProgressBar class, the @Push annotation, and the UI.access(Command) method to show the progress in the browser.

Muchas veces los users deben saber de manera intuitiva si algo se esta procesando bajo fondo, "cargando" en pocas palabras, y eso se logra mostrando del lado del cliente algún tipo de progreso, de cualquier tipo, con la finalidad de ayudarle.

Los inicios procesando hashes

Configuración de mariadb

mariadb logo blue transparent

El post de Alejandro ya tiene tiempo y a la hora de crear el contenedor, han cambiado cosas:

docker run -d -p 3306:3306 \
--shm-size=512m \
-e PM1=mcs1 \ (1)
--hostname=mcs1 \
--name mariadb_columnstore mariadb/columnstore
1 Este parámetro fue necesario, y es el Primary Database Node.

Opcional volumen de NFS

docker run -d -p 3306:3306 \
-v /media/share-nfs/mariadb:/var/lib/mysql \ (1)
--shm-size=512m -e PM1=mcs1 --hostname=mcs1 --name mariadb_columnstore mariadb/columnstore
1 Seteando un volumen, pero internamente apunta a una directorio NFS, que ya existe en este host, como lo hacemos justo aquí, muy util también en caso de recrear el contenedor tendriamos nuestra data un poco más segura.
docker exec -it mariadb_columnstore provision mcs1
Waiting for PM1 To Be Initialized ..... done
Adding PM(s) To Cluster ... done
Restarting Cluster ... done
Validating ColumnStore Engine ... done
En caso de reinicio del sistema, debemos hacer start al contenedor y luego el comando exec anterior.

Damos priviliegos al user

docker exec mariadb_columnstore mariadb -e "GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'passw00rd';"

Acceso remoto en red local

Agregar permisos para cualquier IP dentro de la red local

GRANT ALL PRIVILEGES ON your_database.* TO 'user'@'192.168.1.%' IDENTIFIED BY 'passw00rd';

Asegurarse de que el permiso genérico está bien configurado

GRANT ALL PRIVILEGES ON your_database.* TO 'user'@'%' IDENTIFIED BY 'passw00rd';

Purga de privilegios de dicho usuario

FLUSH PRIVELEGES;

Aplicar los cambios

SELECT user, host FROM mysql.user WHERE user = 'user';
user host

user_reactive

192.168.1.%

user_reactive

%

Ya con eso esperamos un poco y deberia de dejarnos poder conectar

dbeaver connection success

Conectando desde consola a mariadb

mariadb -h 127.0.0.1 -P 3306 -u user -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 11.1.1-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Cambiando la ruta

Se puede mover la base de datos a una unidad con el protocolo NFS en la red, esto, muchos no lo recomiendan, pero otros si.

En este caso en mi odroid tengo una unidad auto-montable con más espacio, en el directorio media, y este apunta al servidor NFS en mi NAS.

Pudimos crear un jail en FreeBSD también con MariaDB pero de momento, estamos probando el Odroid para ver métricas y demás cosas, este siendo compatible con docker en su totalidad,quizás intalando ZFS podria usar jails.

[root@mcs1 /]# mysql -h 127.0.0.1 -P 3306 -u user -p -e "SELECT @@datadir;"
mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead
Enter password:
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
[root@mcs1 /]#
Aquí podemos visualizar el var/lib/mysql en el NFS share
nfs var lib mysl

Incremento del buffer

La recomendación de Alejandro nos sirvió para este caso, donde queremos mejorar ese rendimiento al guardar data, y más sabiendo que estamos con la db en una zona remota.

[mysqld]
innodb_buffer_pool_size=1G

El ProgressBar

Aquí mostramos el ProgressBar en la UI mientras se generan datos en MariaDB, usando esta dependencia

<dependency>
	<groupId>com.vaadin</groupId>
	<artifactId>exampledata</artifactId>
	<version>6.2.0</version>
</dependency>

One million

Y tendriamos mas filas, con esos datos varias cosas podrian hacerse…​

1millionrow