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
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
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
|
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…​