Mostrando las entradas con la etiqueta MySQL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta MySQL. Mostrar todas las entradas

domingo, 14 de junio de 2020

Programación reactiva + bases de datos relacionales = R2DBC


Al carecer de una API estándar y la falta de disponibilidad de controladores, un equipo de Pivotal comenzó a investigar la idea de una API relacional reactiva que sería ideal para fines de programación reactiva. Y en ese momento nació, R2DBC que significa Conectividad de base de datos relacional reactiva.

Entre las características de R2DBC podemos nombrar: 

R2DBC se basa en la especificación de Reactive Streams, que proporciona una API sin bloqueo totalmente reactiva.

Trabaja con bases de datos relacionales. A diferencia de la naturaleza bloqueante de JDBC, R2DBC le permite trabajar con bases de datos SQL utilizando una API reactiva.

Admite soluciones escalables. Con Reactive Streams, R2DBC le permite pasar del modelo clásico de "un subproceso por conexión" a un enfoque más potente y escalable.

Proporciona una especificación abierta. R2DBC es una especificación abierta y establece una interfaz de proveedor de servicios (SPI) para que los proveedores de controladores implementen y los clientes los consuman.

Actualmente existen las siguientes implementaciones : 
  • cloud-spanner-r2dbc: controlador para Google Cloud Spanner
  • jasync-sql: contenedor R2DBC para Java & Kotlin Async Database Driver para MySQL y PostgreSQL escrito en Kotlin.
  • r2dbc-h2: controlador nativo implementado para H2 como base de datos de prueba.
  • r2dbc-mariadb: controlador nativo implementado para MariaDB.
  • r2dbc-mssql: controlador nativo implementado para Microsoft SQL Server.
  • r2dbc-mysql: controlador nativo implementado para MySQL.
  • r2dbc-postgres: controlador nativo implementado para PostgreSQL.
Los estándares existentes, basados ​​en el bloqueo de I/O, cortan la programación reactiva de los usuarios de bases de datos relacionales. R2DBC especifica una nueva API para permitir código reactivo que funciona de manera eficiente con bases de datos relacionales.

R2DBC es una especificación diseñada desde cero para la programación reactiva con bases de datos SQL. Define un SPI sin bloqueo para implementadores de controladores de bases de datos y autores de bibliotecas de clientes. Los controladores R2DBC implementan completamente el protocolo de conexión de la base de datos sobre una capa de I/O sin bloqueo.

R2DBC está pensado principalmente como un SPI del controlador para ser consumido por las bibliotecas del cliente y no para ser utilizado directamente en el código de la aplicación.

R2DBC admite aplicaciones nativas en la nube que utilizan bases de datos relacionales como PostgreSQL, MySQL y otras. Los desarrolladores de aplicaciones son libres de elegir la base de datos adecuada para el trabajo sin estar limitados por las API.

Spring Data R2DBC, parte de la familia Spring Data, facilita la implementación de repositorios basados en R2DBC. Spring Data R2DBC aplica abstracciones de la familia de Spring y soporte de repositorio para R2DBC. Facilita la creación de aplicaciones basadas en Spring que utilizan tecnologías de acceso a datos relacionales en una stack de aplicaciones reactivas.

Spring Data R2DBC pretende ser conceptualmente fácil. Para lograr esto, NO ofrece almacenamiento en caché, carga diferida, escritura detrás o muchas otras características de los marcos ORM. Esto hace que Spring Data R2DBC sea un mapeador de objetos simple, limitado y con opiniones.

Spring Data R2DBC permite un enfoque funcional para interactuar con su base de datos proporcionando DatabaseClient como el punto de entrada para las aplicaciones.

Veamos un ejemplo con postgres : 

PostgresqlConnectionFactory connectionFactory = new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host(…)
.database(…)
.username(…)
.password(…).build());

DatabaseClient client = DatabaseClient.create(connectionFactory);

Mono<Integer> affectedRows = client.execute()
        .sql("UPDATE person SET name = 'Joe'")
        .fetch().rowsUpdated();

Flux<Person> all = client.execute()
        .sql("SELECT id, name FROM person")
        .as(Person.class)
        .fetch().all();

Otro enfoque para atacar el bloqueo de JDBC es Fibers. Fibers como una abstracción ligera que convertirá las API de bloqueo en no bloqueantes. Esto es posible mediante el cambio de pila tan pronto como una invocación ... Pero eso es otra Historia y va ha ser contada en otro post ... 

Dejo links: 

sábado, 17 de agosto de 2019

Entendiendo el Execution Plan en MySql


No sabia que Mysql tenia la clausula  PLAN EXPLAIN y la tiene! Pero para que sirve?

Dependiendo de los detalles de sus tablas, columnas, índices y las condiciones en su cláusula WHERE, el optimizador MySQL considera muchas técnicas para realizar eficientemente las búsquedas involucradas en una consulta SQL.

Se puede realizar una consulta en una tabla enorme sin leer todas las filas; se puede realizar una unión que involucre varias tablas sin comparar cada combinación de filas. El conjunto de operaciones que el optimizador elige para realizar la consulta más eficiente se denomina "plan de ejecución de consultas", y este se puede ver ejecutando el PLAN EXPLAIN. Sus objetivos son reconocer los aspectos que indican que una consulta está bien optimizada y aprender la sintaxis SQL y las técnicas de indexación para mejorar el plan si hay algunas operaciones ineficientes.

La declaración EXPLAIN proporciona información sobre cómo MySQL ejecuta las consultas.

Cuando precede a una instrucción SELECT con la palabra clave EXPLAIN, MySQL muestra información del optimizador sobre el plan de ejecución de la instrucción. Es decir, MySQL explica cómo procesaría la declaración, incluida la información sobre cómo se unen las tablas y en qué or

Con la ayuda de EXPLAIN, puede ver dónde debe agregar índices a las tablas para que la instrucción se ejecute más rápido mediante el uso de índices para buscar filas. También puede usar EXPLAIN para verificar si el optimizador se une a las tablas en un orden óptimo. Para dar una pista al optimizador para que use un orden de unión correspondiente al orden en que se nombran las tablas en una instrucción SELECT, comience la instrucción con SELECT STRAIGHT_JOIN en lugar de solo SELECT.

Si tenemos un problema con los índices que no se usan cuando sabemos que deberían ser usados, debemos ejecutar ANALYZE TABLE para actualizar las estadísticas de la tabla, como la cardinalidad de las claves, que pueden afectar las elecciones que realiza el optimizador.

EXPLAIN devuelve una fila de información para cada tabla utilizada en la instrucción SELECT. Enumera las tablas en la salida en el orden en que MySQL las leería mientras procesa la declaración. MySQL resuelve todas las uniones utilizando un método de unión de bucle anidado. Esto significa que MySQL lee una fila de la primera tabla y luego encuentra una fila coincidente en la segunda tabla, la tercera tabla, etc. Cuando se procesan todas las tablas, MySQL genera las columnas seleccionadas y retrocede a través de la lista de tablas hasta que se encuentra una tabla para la cual hay más filas coincidentes. La siguiente fila se lee de esta tabla y el proceso continúa con la siguiente tabla.

Cuando se usa la palabra clave EXTENDED, EXPLAIN produce información adicional que se puede ver emitiendo una declaración SHOW WARNINGS después de la declaración EXPLAIN. EXPLAIN EXTENDED también muestra la columna filtrada.

En la mayoría de los casos, puede estimar el rendimiento de la consulta contando las búsquedas de disco. Para tablas pequeñas, generalmente puede encontrar una fila en una búsqueda de disco (porque el índice probablemente está en caché). Para tablas más grandes, puede estimar que, utilizando índices de árbol B, necesita esta cantidad de búsquedas para encontrar una fila: log (row_count) / log (index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1.

En MySQL, un bloque de índice suele tener 1.024 bytes y el puntero de datos suele tener cuatro bytes. Para una tabla de 500,000 filas con una longitud de valor clave de tres bytes (el tamaño de MEDIUMINT), la fórmula indica log (500,000) / log (1024/3 * 2 / (3 + 4)) + 1 = 4 búsquedas.

Este índice requeriría un almacenamiento de aproximadamente 500,000 * 7 * 3/2 = 5.2MB (suponiendo una relación de llenado del búfer de índice típico de 2/3), por lo que probablemente tenga gran parte del índice en la memoria y, por lo tanto, solo necesite una o dos llamadas para leer datos para encontrar la fila.

Sin embargo, para las escrituras, necesita cuatro solicitudes de búsqueda para encontrar dónde colocar un nuevo valor de índice y normalmente dos buscar y actualizar el índice y escribir la fila.

La discusión anterior no significa que el rendimiento de su aplicación se degenere lentamente por el registro N. Mientras el sistema operativo o el servidor MySQL guarden en caché todo, las cosas se vuelven un poco más lentas a medida que la tabla se hace más grande. Después de que los datos se vuelven demasiado grandes para ser almacenados en caché, las cosas comienzan a ir mucho más lentamente hasta que sus aplicaciones están unidas solo por búsquedas de disco (que aumentan por log N). Para evitar esto, aumente el tamaño de la caché de claves a medida que crecen los datos. Para las tablas MyISAM, el tamaño del caché de claves está controlado por la variable de sistema key_buffer_size.

Por ahora eso es todo sobre nuestro querido explain, dejo link :
https://dev.mysql.com/doc/refman/8.0/en/explain.html
https://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html

lunes, 13 de febrero de 2017

Ganar ventaja competitiva con MySQL

Me llego un mail por demás interesante sobre mysql. Oracle regala un paper que nos indica como hacer una diferencia comercial.

Sin más les dejo el mail:

View this message in a Web browser
Guide to MySQL as an Embedded Database
White Paper
A Guide for SaaS Vendors: Gaining Competitive Advantage with MySQL
Guide to MySQL as an Embedded Database
Access Resource Kitcta-arrow
Proven Reliability 

Relied on by many of the world’s largest software vendors as well as small SaaS startups to power their solutions and help them
  • Get to market and into production faster
  • Gain competitive advantage
  • At lower total cost
Access Resource Kit text-cta-arrow
Stay Connected
FacebookLinkedinTwitterYoutubeGooglePlus
Terms of Use and Privacy | Subscriptions | Un‌subscribe | Contact Us

miércoles, 14 de diciembre de 2016

Oracle Premier Support for MySQL: Rely on The Experts & Get Unique Benefits

Me llego este mail y lo quiero compartir con ustedes:

View this message in a Web browser
Oracle
White Paper
Oracle MySQL Support

Oracle MySQL
Get Your White Papercta-arrow
Are you covered?
Disasters and errors happen without warning. That’s why you insure your business – its structures, and capital assets. Now that business is increasingly data-driven and online, your databases alone can determine if your business is up or down 
 
With Oracle MySQL Support, we’ve got you covered. You are assured of top-tier support from the source for both full problem resolution and best practice advice.
Oracle Premier Support for MySQL: Rely on The Experts & Get Unique Benefits
slap-hr
bullet24 x 7, Worldwide, in 27 Languages
bulletBacklines to the Engineers who develop & maintain MySQL 
bulletIt’s all Premier – with Consultative Support!
Get Your White Papercta-arrow
Quote"We embedded MySQL in our optical-disc archive system because it provides the performance and features we required, and it enhanced our product’s competitiveness. Oracle’s reliable and reputable open-source database also strengthened customer confidence in the quality of Sony products and improved our support capabilities." 

Muneyoshi Benzaki
Senior Software Engineer, Sony Corporation
Stay Connected
FacebookLinkedinTwitterYoutubeGooglePlus

viernes, 7 de octubre de 2016

Oracle MySQL Cloud Service

Me llego este mail de oracle, sobre un nuevo servicio de cloud para mysql:

View this message in a Web browser
Oracle
eBook
Oracle MySQL Cloud Service
Propel Innovation and Time-to-Market
Oracle MySQL Cloud Service
Read Your eBookcta-arrow
How can you rapidly, securely and cost-effectively deliver modern applications powered by the world’s most popular open source database? 

The new Oracle MySQL Cloud Service is simple, automated, integrated and enterprise-ready, allowing you to deploy production applications globally at scale.
Oracle MySQL Cloud Service enables you to
slap-hr
bulletIncrease Business Agility: Focusing resources on innovation and quickly delivering modern applications to drive digital transformation. 
bulletEnsure Security, Performance & Uptime: relying on the most comprehensive MySQL cloud platform – straight from the source.
bulletReduce Total Cost of Ownership: Saving on infrastructure and database management costs while improving uptime.
Read Your eBookcta-arrow

jueves, 7 de julio de 2016

White Paper sobre MySQL Enterprise Edition

No soy de dar publicar publicidad de empresas, pero creo que es interesante publicar información técnica sobre productos por más que sean comerciales.

Me llego este mail y se los comparto:

View this message in a Web browser
MySQL Enterprise Edition Product Guide
White Paper
MySQL Enterprise Edition Product Guide
MySQL Enterprise Edition Product Guide
Get Your White Papercta-arrow
Ensure Data Protection and Regulatory Compliance
Did you know that Malware & Ransomware increased 35% in the past year and that over half a billion personal records were stolen or lost in 2015? Additionally, the compliance risk has become one of the most significant ongoing concerns for executives.
 
How can you ensure that your MySQL databases are protected against external attacks and misuse of information while achieving regulatory compliance?
Access our Resource Kit to discover
slap-hr
bulletThe MySQL Enterprise Edition advanced security features and management tools that can help you protect your organization
bulletHow to enable data-at-rest encryption in MySQL
bulletHow to solve complex business auditing requirement
Get it nowcta-arrow