Translate

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

viernes, 17 de junio de 2022

[FREE EBOOK] Understanding Databases (Free eBook)

 

Start Today

 

Free eBook:  Understanding Databases 


Deploy High-Performance Database Clusters in Modern Applications. Develop a high-level understanding of industry-standard databases, the design of database architectures, and different deployment methods in the cloud.


 
Download Now
Your Suggestions
Any ideas or suggestions? Shoot us an email at support@webcodegeeks.com

miércoles, 21 de abril de 2021

¿Como detectar la fragmentación de indices en base de datos oracle?


Es muy probable que no sepas que los indices se fragmentan pero si se fragmentan (sino para que escribo este post) y lo que podemos hacer es reconstruirlos, lo cual es un proceso lento (si el indice es grande) pero puede mejorar la performance de los indices. 

Por lo tanto una tarea recomendada es chequear los indices cada tanto y reconstruirlos (cuando no esten utilizando la base) 

Lo que hice es un script que inserta en la tabla INDEX_REBUILD los datos de los indices que deben ser reconstruidos. Y luego podemos reconstruirlos de forma automatica o manual.  

Lo hice para base de datos oracle pero es interesante hacerlo para otros motores : 


DROP TABLE INDEX_REBUILD CASCADE CONSTRAINTS;

CREATE TABLE INDEX_REBUILD AS (select * 

        from index_stats);


DECLARE


CURSOR INDEX_NAMES is

SELECT INDEX_NAME FROM all_indexes 

where TABLE_OWNER = 'nombreDelEsquema'

  -- AND TABLE_NAME = 'nombreDeLaTabla'; -- Si deseo correrlo para una tabla puedo descomentar esta linea.

BEGIN

     FOR N IN INDEX_NAMES LOOP

       EXECUTE IMMEDIATE 'analyze index ' || N.INDEX_NAME || ' validate structure';

       dbms_output.put_line(  N.INDEX_NAME );

     END LOOP;

     

     INSERT INTO INDEX_REBUILD select * 

        from index_stats

        where round((del_lf_rows/lf_rows)*100,2) >= 20

        OR height > 3

        OR lf_rows > lf_blks;

        

      COMMIT;

END; 

Dado que tenemos los indices a reconstruir en una tabla, podemos hacer esto de forma automática : 


CURSOR INDEX_NAMES is

SELECT NAME FROM INDEX_REBUILD;


BEGIN

FOR N IN INDEX_NAMES LOOP

       EXECUTE IMMEDIATE 'ALTER index ' || N.NAME || ' REBUILD';

     END LOOP;

END; 


Pero tenemos que tener cuidado porque este proceso puede llevar mucho tiempo. Si se hace para una o dos tablas puede servir, pero para una base de datos grande o mediana, nunca terminaría. En ese caso es mejor hacerlo manual con un equipo de mate y bizcochitos. 

Talvez tendría que hacer un post explicando un poco más la fragmentación y porque esos valores mágicos que pongo en la consulta, pero eso va llevar mucho tiempo...


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: 

miércoles, 6 de mayo de 2020

miércoles, 8 de noviembre de 2017

Los 5 libros para aprender diseño y modelado de bases de datos para programadores y DBAs

Hace rato que no hablamos de libros y este top me gusto así que hay va:

Database Design for Mere Mortals (Diseño de base de datos para simples mortales)

Este libro es la introducción perfecta al diseño de bases de datos relacionales para principiantes y para cualquier persona que necesite un repaso. Con sus muchos años de experiencia en el mundo real diseñando bases de datos relacionales, Michael J. Hernández, el autor del libro, le muestra cómo analizar y mejorar las bases de datos existentes, implementar claves, definir relaciones entre tablas y reglas comerciales, y crear vistas de datos.

Beginning Database Design Solutions (Soluciones iniciales de diseño de bases de datos)

Este es otro excelente y uno de los mejores libros para aprender a modelar datos y diseñar bases de datos. Este libro explica el diseño de la base de datos, que es muy importante porque una base de datos con problemas de  diseño puede ser un dolor de cabeza a largo plazo.

Explica cómo planificar la estructura de una base de datos para que la base de datos sea robusta, resistente a los errores y lo suficientemente flexible como para acomodar una cantidad razonable de cambios futuros.


También explica cómo descubrir los requisitos de la base de datos, crear modelos de datos y refinar esos modelos para mejorar la efectividad de la base de datos.

Este libro está lleno de ejemplos y ejercicios que no solo le enseñan cómo hacer las cosas, sino que también lo desafían a aplicar sus conocimientos y resolver problemas.

Los ejercicios lo empujarán a pensar en escenarios, que eventualmente lo ayudarán a mejorar en el diseño de la base de datos.

Este libro tienen los mejores consejos sobre normalización, patrones comunes de diseño de bases de datos y riesgos comunes de diseño que debe evitar.

El libro también cubre tanto MySQL como Microsoft Access, pero incluso si está utilizando una base de datos diferente, no debe preocuparse demasiado, los conceptos discutidos en este libro se aplican a todas las principales bases de datos.



Six-Step Relational Database Design (Diseño de base de datos relacional de seis pasos)

Como sugiere el nombre: un enfoque paso a paso para el diseño y desarrollo de bases de datos relacionales Segunda edición de Fidel A Captain), le enseña a pasar del requisito a una base de datos completamente funcional en solo 6 pasos.


SQL Antipatterns: Avoiding the Pitfalls of Database ProgrammingAntipatterns de SQL (evitar las trampas de la programación de bases de datos)

Este libro no solo es suficiente aprender las mejores prácticas, también es importante no repetir las "malas prácticas" o antipatrones que causan problemas.

Si no evita esas malas prácticas, terminará sin nada, incluso si lo está haciendo bien con otras cosas de diseño.

El libro contiene varios consejos prácticos sobre patrones comunes que muchos de nosotros usamos sin saber cuánto daño hacen.

No importa, sea cual sea la plataforma o el lenguaje de programación que utilice, ya sea un programador junior o un doctorado, The SQL Antipatterns: evitar las trampas de la programación de bases de datos por Bill Karwin le mostrará cómo diseñar y construir bases de datos, cómo escriba mejores consultas en la base de datos y cómo integrar la programación SQL con su aplicación como un experto.

El libro contiene varios consejos prácticos sobre patrones comunes que muchos de nosotros usamos sin saber cuánto daño hacen.


Pro SQL Server 2008 Relational Database Design and Implementation (Diseño e implementación de bases de datos relacionales Pro SQL Server 2008)

Uno de los libros más fantásticos para aprender a diseñar bases de datos. Este libro es una lectura obligada para cualquier desarrollador de SQL Server o cualquier persona que solo quiera aprender a diseñar bases de datos.

Cubre todos los temas importantes, incluida la normalización, la seguridad y la forma de proteger la integridad de los datos utilizando restricciones y factores desencadenantes.

También proporciona consejos y trucos para resolver muchos problemas de negocios y cada capítulo finaliza con un resumen de mejores prácticas.







Un buen diseño de la base de datos contribuye en gran medida a mantener los datos seguros y luego recuperarlos con facilidad. Si desea aprender cómo el diseño y modelado de bases de datos es importante, leer y no dejar de perfecionarnos. 

Dejo links: http://javarevisited.blogspot.com.ar/2017/11/top-5-books-to-learn-database-design.html