sábado, 22 de febrero de 2025

PostgreSQL & Citus

Una guía paso a paso para configurar una base de datos distribuida en una red local usando PostgreSQL + Citus.

 

  Objetivo

 

Configurar PostgreSQL en múltiples máquinas dentro de una LAN.
Implementar Citus para sharding (distribuir datos entre varios nodos).
Aprender sobre replicación y consultas distribuidas.

 
🛠️ Requisitos

🔹 Tres máquinas (pueden ser físicas o VMs con Linux).
🔹 PostgreSQL 16+ instalado en cada máquina.
🔹 Citus instalado en cada nodo.
🔹 Red local funcionando (puedes usar VirtualBox, Docker o servidores físicos).

 
🔹 Paso 1: Instalar PostgreSQL y Citus

 

Haz esto en cada nodo de la red local.

 

1️ Instalar PostgreSQL

 

Ejecuta en cada servidor:



sudo apt update
sudo apt install postgresql postgresql-contrib -y
 

via ChatGpt

 



sábado, 15 de febrero de 2025

Base de Datos Distribuida

Definiciones de Base de Datos Distribuida

1️⃣ Date (2004)

"Una base de datos distribuida es una colección de datos que lógicamente pertenece a un mismo sistema, pero que está distribuida en diferentes sitios de una red de computadoras."
📖 (C. J. Date, "An Introduction to Database Systems")

2️⃣ Özsu y Valduriez (2011)

"Un sistema de base de datos distribuida es una colección de múltiples bases de datos interconectadas, que cooperan entre sí para proporcionar acceso a los datos de manera eficiente y transparente."
📖 (M. T. Özsu & P. Valduriez, "Principles of Distributed Database Systems")

3️⃣ Elmasri y Navathe (2016)

"Es una base de datos que está almacenada en múltiples ubicaciones, gestionada por un sistema de administración distribuido, y que presenta una vista única de los datos al usuario."
📖 (R. Elmasri & S. Navathe, "Fundamentals of Database Systems")

4️⃣ Tanenbaum y Steen (2017)

"Una base de datos distribuida es aquella en la que los datos están físicamente almacenados en múltiples sitios, pero son manejados de forma conjunta como si fueran una sola base de datos."
📖 (A. Tanenbaum & M. Steen, "Distributed Systems: Principles and Paradigms")

5️⃣ Silberschatz, Korth y Sudarshan (2019)

"Un sistema de base de datos distribuida permite el acceso concurrente a los datos almacenados en múltiples sitios, manteniendo consistencia y disponibilidad."
📖 (A. Silberschatz, H. Korth & S. Sudarshan, "Database System Concepts")

 

Historia y Evolución de las Bases de Datos Distribuidas

Década de 1970: Primeras Investigaciones

  • En 1976, C. J. Date y Philip A. Bernstein publicaron trabajos fundamentales sobre bases de datos distribuidas.
  • Peter A. Bernstein publicó en 1978 "Principles of Transaction Processing," donde exploró la consistencia en sistemas distribuidos.
  • IBM y otros grandes actores comenzaron a desarrollar arquitecturas distribuidas para optimizar procesamiento y almacenamiento.

Década de 1980: Formalización del Concepto

  • En 1982, Bruce Lindsay y otros investigadores de IBM trabajaron en R (R-Star),* una base de datos distribuida experimental.
  • En 1985, Andreas Reuter y Jim Gray (famoso por su trabajo en bases de datos y transacciones) establecieron principios de recuperación y consistencia.
  • Surgió el teorema CAP (Brewer, 2000), pero sus fundamentos ya se discutían en los 80s, planteando que en un sistema distribuido no se pueden garantizar simultáneamente consistencia, disponibilidad y tolerancia a particiones.

Década de 1990: Bases de Datos Distribuidas Comerciales

  • Empresas como Oracle, IBM DB2 y Microsoft SQL Server comenzaron a implementar replicación de datos y particionado para mejorar la escalabilidad.
  • En 1997, Amazon y Google comenzaron a desarrollar sus propios sistemas distribuidos para soportar millones de usuarios.

2000s – Presente: NoSQL, NewSQL y Cloud Databases

  • En 2006, Google presentó Bigtable, un sistema de almacenamiento distribuido altamente escalable.
  • En 2007, Amazon lanzó DynamoDB, basado en su paper sobre bases de datos distribuidas.
  • Facebook desarrolló Cassandra en 2008 para manejar grandes volúmenes de datos.
  • Google Spanner (2012) combinó consistencia y escalabilidad global.
  • CockroachDB y YugabyteDB (2015+) trajeron nuevas formas de bases de datos distribuidas transaccionales (NewSQL).

miércoles, 15 de marzo de 2023

While & Do While

While

 

El while en Java es una estructura de control de flujo que se utiliza para repetir un bloque de código mientras se cumpla una determinada condición. La sintaxis básica del while en Java es la siguiente:

 

while (condición) {

   // código a repetir

}

 

En la línea de la condición, se especifica una expresión booleana que se evalúa antes de cada iteración. Si la expresión es verdadera, el bloque de código dentro del while se ejecuta una vez más. Si la expresión es falsa, el programa sale del ciclo y continúa con la ejecución normal.

 

El bloque de código dentro del while puede contener cualquier instrucción válida en Java, incluyendo sentencias de control de flujo como if, else y break. Es importante tener en cuenta que si la condición nunca se evalúa a false, el ciclo continuará ejecutándose indefinidamente, lo que se conoce como un "bucle infinito".

 

Por ejemplo, el siguiente código utiliza un while para imprimir los números del 1 al 10:

 

int i = 1;

while (i <= 10) {

   System.out.println(i);

   i++;

}

 

En este caso, la condición i <= 10 se evalúa antes de cada iteración. Si i es menor o igual a 10, el bloque de código dentro del while se ejecuta, imprimiendo el valor actual de i y luego incrementando el valor de i en 1. El ciclo continúa hasta que i alcanza el valor de 11, momento en el que la condición i <= 10 ya no es verdadera y el ciclo se detiene.

 

Do while

El do-while en Java es otra estructura de control de flujo que se utiliza para repetir un bloque de código mientras se cumpla una determinada condición. La principal diferencia entre el while y el do-while es que en el do-while, el bloque de código se ejecuta al menos una vez antes de que se evalúe la condición.

 

La sintaxis básica del do-while en Java es la siguiente:

 

Copy code

do {

   // código a repetir

} while (condición);

 

En este caso, el bloque de código se ejecuta primero, sin importar la condición. Luego, después de que el bloque de código se ha ejecutado una vez, se evalúa la condición. Si la condición es verdadera, el bloque de código se ejecutará de nuevo. Si la condición es falsa, el programa saldrá del ciclo y continuará con la ejecución normal.

 

Al igual que con el while, el bloque de código dentro del do-while puede contener cualquier instrucción válida en Java, incluyendo sentencias de control de flujo como if, else y break. También es importante tener en cuenta que si la condición nunca se evalúa a false, el ciclo continuará ejecutándose indefinidamente, lo que se conoce como un "bucle infinito".

 

Por ejemplo, el siguiente código utiliza un do-while para imprimir los números del 1 al 10:

 

int i = 1;

do {

   System.out.println(i);

   i++;

} while (i <= 10);

 

En este caso, el bloque de código dentro del do imprime el valor actual de i y luego incrementa el valor de i en 1. 

Luego, después de que el bloque de código se ha ejecutado una vez, la condición i <= 10 se evalúa. 

Si i es menor o igual a 10, el ciclo continuará, imprimiendo y aumentando el valor de i hasta que i alcance el valor de 11, momento en el que la condición i <= 10 ya no es verdadera y el ciclo se detiene.

Scanner

La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los programas Java.

Primero veremos varios ejemplos de lectura de datos en Java con Scanner y después explicaremos en detalle como funciona.
Para utilizar Scanner en el programa tendremos que hacer lo siguiente:
 
1. Escribir el import
La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instrucción:
import java.util.Scanner;
2. Crear un objeto Scanner
Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada.
Si el dispositivo de entrada es el teclado escribiremos:
Scanner sc = new Scanner(System.in);
Se ha creado el objeto sc asociado al teclado representado por System.in
Una vez hecho esto podemos leer datos por teclado. 
3. Utilizar el Scanner
Para leer datos desde teclado con Scanner podemos usar los métodos nextXxx() donde Xxx indica el tipo de dato a leer:
  • nextByte()  para leer un dato de tipo byte.
  • nextShort()  para leer un dato de tipo short.
  • nextInt()  para leer un dato de tipo int.
  • nextLong()  para leer un dato de tipo long. 
  • nextFloat()  para leer un dato de tipo float. 
  • nextDouble()  para leer un dato de tipo double. 
  • nextBoolean()  para leer un dato de tipo boolean.
  • nextLine()  para leer un String hasta encontrar un salto de línea.
  • next()  para leer un String hasta el primer delimitador, generalmente hasta un espacio en blanco o hasta un salto de línea.  
 
Ejemplos de lectura:
Ejemplo de lectura por teclado de un número entero (tipo int):
int n;
System.out.print("Introduzca un número entero: ");
n = sc.nextInt(); //asigna a la variable n el número entero introducido por teclado    
Ejemplo de lectura de un número de tipo double:
double x;
System.out.print("Introduzca número de tipo double: ");
x = sc.nextDouble(); //asigna a la variable x el número double introducido por teclado 
Ejemplo de lectura de una cadena de caracteres (String):
String s;
System.out.print("Introduzca texto: ");
s = sc.nextLine(); //asigna a la variable s el String introducido por teclado          
Ejemplo de lectura de un número de tipo long:
long ln;
System.out.print("Introduzca un número: ");
ln = sc.nextLong(); //asigna a la variable ln el número long introducido por teclado   
Si el valor introducido por teclado no es del tipo esperado o de un tipo compatible al esperado, se produce un error. En este caso se lanza la excepción InputMismatchException
Ejemplo completo de programa Java con lectura de datos con Scanner:
El programa pide al usuario que introduzca por teclado su nombre y lo muestra por pantalla. A continuación pide que se introduzca por rteclado el valor del radio de una circunferencia de tipo double y muestra la longitud de la circunferencia. Además pide que se introduzca por teclado un número entero y muestra su cuadrado.

import java.util.Scanner;  //import de la clase Scanner

public class Ejemplo1Scanner {

    public static void main(String[] args) {  

           Scanner sc = new Scanner(System.in);  //Se crea un objeto Scanner
           String nombre;
           double radio;
           int n;

           System.out.print("Introduzca su nombre: ");       
           nombre = sc.nextLine();  //leer un String
           System.out.println("Hola " + nombre + "!!!");

           System.out.print("Introduzca el radio de la circunferencia: ");
           radio = sc.nextDouble(); //leer un double
           System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);                
           
           System.out.print("Introduzca un número entero: ");
           n = sc.nextInt(); //leer un entero
           System.out.println("El cuadrado es: " + Math.pow(n,2));
     }
}

jueves, 11 de agosto de 2022

mindmaps

 

link



Para guardar y seguir editando

Click en Save

Opción To File click en save


Para Abrir el mapa

click en Open

Opción From File click en seleccionar archivo, buscas tu archivo y lo abres


Para enviar a la plataforma

click en Export As Image

clic derecho sobre la imagen que te muestra y

Guardar imagen como

le asignas un nombre y Guardar (ya lo tienes listo para entregar)



domingo, 3 de abril de 2022

Instalación de Vsftpd

Instalación de Vsftpd

El proceso de instalación de este servidor FTP en cualquier distribución basada en Linux es realmente sencilla, y es que podemos instalarlo a través de los repositorios oficiales de la distribución.


sudo apt install vsftpd

Deberías ver algo como esto:

Configuración de Vsftpd

Vsftpd se configura a través de un fichero de configuración que deberemos editar, lo podremos editar con programas como nano, vim o vi, pero también con cualquier programa de edición de ficheros de texto en Linux. Una vez que abramos el fichero de configuración con nano, deberíamos ver lo siguiente:

nano etc/vsftpd.conf

El fichero de configuración por defecto de Vsftpd es el siguiente, posteriormente os explicaremos las funciones clave de este fichero para que lo configuréis correctamente.

Los parámetros más importantes que debemos descomentar en el servidor FTP son los siguientes:

  • write_enable=YES –> Esta directiva nos permite poder escribir (copiar archivos y carpetas) al servidor FTP.
  • local_umask=022 –> Esta directiva nos permite habilitar los permisos nuevos cuando copiemos datos al servidro FTP, por defecto el umask es 077 pero podremos modificarlo por el valor que nosotros queramos, 022 es el umask más utilizado en otros servidores FTP.
Opcionales
  • ftpd_banner –> Esta directiva permite poner un banner de inicio de sesión.
  • chroot_list_enable=YES –> Nos permite habilitar el chroot de los diferentes usuarios del sistema, para que solamente un usuario entre en su carpeta /home/usuario y en ninguna más, es una medida de seguridad, pero hay que usarla con mucho cuidado ya que si un usuario tiene permisos en directorios superiores tendrá acceso al resto.
  • chroot_list_enable=YES –> Nos permite crear una lista con los usuarios en chroot, todos los que aparezcan aquí podrán conectarte.
  • chroot_list_file=/etc/vsftpd.chroot_list –> Es la lista de usuarios con sus rutas predeterminadas.

miércoles, 6 de octubre de 2021

Tabla de Ilustraciones

 

Pasos para agregar cada una de las imágenes:

  1. Ubica el final de algún párrafo.
  2. Dale un enter
  3. Inserta la imagen,
  4. Da otro enter (necesitamos una linea vacía después de cada imagen)
  5. Buscas otro párrafo y haces lo mismo, hasta insertar las +diez imágenes
  6. Ejemplo de una imagen insertada en el archivo:

Imagen. 1  Ejemplo de como coloar las imágenes en el cuerpo del documento.

7. Guarda, para no perder los datos. (cada 2 o tres imágenes)

 

B) Ahora vamos a agregar el Titulo a cada imagen.


  1. Vas a colocar el cursor el la linea debajo de la imagen, como se muestra en la siguiente imagen GIF.
  2. En la pestaña de referencia das click al botón insertar titulo
  3. En la ventana escribes el titulo de la imagen después de la palabra Ilustración 1
  4. Repite estos pasos para cada una de las imágenes


Nota: la numeración de la ilustración se incrementara automáticamente


 

C) Indice de Tablas

Ahora vamos a generar la Indice de Tablas y Figuras (ilustraciones/gráficas... podemos hacer un indice de cualquier tipo de objeto que se inserte al documento)


  1. Ve hacia el final del documento después de las conclusiones
  2. Insertar un salto de pagina siguiente (ya sabes para hacer otra sección)
  3. Escribes el titulo Tabla de ilustraciones
  4. Clic en el botón Insertar tabla de ilustraciones de la pestaña Referencias
  5. Elige el formato,
  6. Prueba con otros formatos y opciones que te da en esa ventana.
  7. Al final del Documento, agrega tus respuestas a las preguntas: 
  8. ¿Puedes cambiar el rotulo en lugar de la palabra ilustración? ¿Qué opciones da Word para hacerlo?, ¿Cómo se hacen?
  9. Guarda y envia.

 

 

 

martes, 5 de octubre de 2021

Combinar correspondencia

 Que es Combinar correspondencia:

  • Mediante la opción Combinar correspondencia Word 2016 nos permite generar varios documentos a partir de uno, cada uno de estos documentos se diferenciará por los datos obtenidos de una fuente de datos (Base de datos, tabla Excel, etc.).
  • Por ejemplo, podemos escribir cartas personalizadas, en las que sólo escribimos el texto fijo (el texto que se repite en todas las cartas) y Word se encargará de generar los datos variables (los que cambian en cada carta según la persona). De esta forma podemos generar automáticamente tantas cartas distintas como personas existan en el lugar donde están almacenados los datos.
  • Otros ejemplos de la utilidad de combinar correspondencia son la generación de etiquetas o recibos, la impresión de sobres, etc.
  • Es decir, combinar correspondencia permite obtener copias de un mismo documento pero con los datos de personas distintas.

Cuando combinamos correspondencia, estamos utilizando dos elementos fundamentales: el documento principal y el origen de datos.

Documento principal. 

Es el documento Word que contiene el texto fijo y los campos variables que toman su valor del origen de datos.

Origen de datos. 

Es el lugar donde se almacenan los datos que vamos a utilizar en el documento principal. Puede ser de distinta naturaleza, por ejemplo puede ser una tabla de Access, un libro de Excel, una lista de direcciones de Outlook, una tabla de Word o se pueden introducir en el mismo momento de combinar.

En cualquier caso podemos ver el origen de datos como una lista de registros compuestos por campos. Un registro corresponde a una fila, y un campo corresponde a una columna.

Por ejemplo si el origen es una tabla de clientes de Access, el registro será la fila correspondiente a un cliente, y los campos serán por ejemplo, el nombre y la dirección del cliente, es decir cada uno de los datos de ese cliente.

Todo esto lo vamos a ir viendo detenidamente a continuación y verás qué sencillo resulta utilizar esta potente utilidad de Word.

Abrir Word y tener en la ventana activa un documento en blanco o un documento que ya contenga el texto fijo.

Seleccionar de la pestaña Correspondencia el menú Iniciar combinación de correspondencia. Allí hacer clic en la opción Paso a paso por el Asistente para combinar correspondencia.

Asistente combinar correspondencia

Se mostrará el panel Combinar correspondencia. Observarás que se trata de un asistente porque en la zona inferior indica que es el Paso 1 de 6 y hay una opción para pasar al siguiente paso. Como la mayoría de asistentes, es muy sencillo e intuitivo.

En primer lugar tenemos que elegir el tipo de documento que queremos generar (cartas, mensajes de correo electrónico, sobres, etc.) Nosotros vamos a seleccionar Cartas. Al hacer clic en Siguiente, aparece el segundo paso del asistente.

Combinar correspondencia

En el paso 2 definimos el documento inicial, es decir, el documento que contiene la parte fija a partir de la cual crearemos el documento combinado. Debajo de las tres opciones tenemos una explicación de la opción seleccionada en este momento.

Dejaremos seleccionada la primera opción y haremos clic en Siguiente para continuar con el asistente.

Combinar correspondencia. Paso 2

En el paso 3 seleccionamos el origen de datos, como ya hemos dicho podemos utilizar una lista existente (una tabla de Access, una hoja de Excel, una tabla en otro archivo Word, etc.), podemos utilizar contactos nuestros de Outlook, o simplemente escribir una lista nueva.

Combinar correspondencia. Paso 3

Nota:

- Si seleccionamos la opción Utilizar una lista existente aparece la opción Examinar..., hacer clic en ella para buscar el archivo que contiene el origen de datos.

- Si seleccionamos la opción Seleccionar de los contactos de Outlook, en lugar de Examinar... aparece la opción Elegir la carpeta de contactos, hacer clic en ella y elegir la carpeta.

- Si seleccionamos la opción Escribir una lista nueva en lugar de Examinar... aparece la opción Crear..., hacer clic en ella para introducir los valores en la lista.

Nosotros elegimos la opción Escribir una lista

. . .

Una vez indicado el origen de datos se abre el cuadro de diálogo Destinatarios de combinar correspondencia, en él vemos los datos que se combinarán y podemos añadir opciones que veremos más adelante. Dependiendo del tipo de datos que hayamos utilizado puede variar ligeramente la experiencia. Por ejemplo, si es una base de datos con varias tablas, deberemos seleccionar en qué tabla basarnos; si es un libro de Excel, en qué hoja se encuentran los datos, etc.

Destinatarios de combinar correspondencia

En él podremos marcar o desmarcar los registros para seleccionar cuáles utilizar. Lo normal es que estén todos seleccionados, pero si queremos descartar alguno no tenemos más que desactivar su casilla haciendo clic en ella. También podremos utilizar las herramientas disponibles paras ordenar, filtrar, buscar duplicados, etc. Lo veremos en detalle más adelante. Cuando terminemos haremos clic en Aceptar y luego pulsamos siguiente en el asistente.

En el paso 4 redactamos en el documento abierto el texto fijo de nuestra carta (si no estaba escrito ya) y añadimos los campos de combinación.

Para ello debemos colocar el cursor en la posición donde queremos que aparezca el campo de combinación y a continuación hacemos clic en el panel de tareas sobre el elemento que queremos insertar.

Combinar correspondencia Paso 4

Podemos insertar un Bloque de direcciones..., una Línea de saludo..., Franqueo electrónico... (si tenemos la utilidad instalada), o Más elementos.... En la opción Más elementos... aparecerá la lista de todos los campos del origen de datos y podremos elegir de la lista el campo a insertar.

Cuando hayamos completado el documento hacemos clic en Siguiente para seguir con el asistente.

Conbinar correspondencia. Paso 5

En el paso 5 examinamos las cartas tal como se escribirán con los valores concretos del origen de datos.

Podemos utilizar los botones << y >> para pasar al destinatario anterior y siguiente respectivamente, o bien Buscar un destinatario... concreto, Excluir al destinatario que estamos viendo o Editar lista de destinatarios... para corregir algún error detectado.

Para terminar hacer clic en Siguiente.

Combinar correspondencia. Paso 6

Para enviar las cartas a la bandeja de la impresora hacer clic en la opción Imprimir....

Si nos queremos guardar las cartas en un nuevo documento por ejemplo para rectificar el texto fijo en algunas de ellas, o enviar luego el documento a otro usuario hacemos clic en Editar cartas individuales... En este caso nos aparecerá un cuadro de diálogo para permitirnos elegir combinar todos los registros, el registro actual o un grupo de registros. El documento creado será un documento normal sin combinación.

En nuestro caso elegimos Editar cartas individuales.

PostgreSQL & Citus

Una guía paso a paso para configurar una base de datos distribuida en una red local usando PostgreSQL + Citus .     Ob...