Borra Dor

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 22

Entrega Final Semana 7 y 8

Sistema de Operaciones Transaccionales

Baron Aranguren Javier Alberto

Barragan Arevalo Andrés Camilo

Barona Nicholls Sara Juliana

Beltrán Cabra Juan David

Beleño García Juan Camilo

Pérez Salazar Alejandro Arturo

Persistencia y Datos Transaccionales [B02] Virtual

Institución Universitaria Politécnico Grancolombiano

Lic. Oliveros Diego

2022
Tabla de contenido

Introducción........................................................................................................................................3
Objetivos.............................................................................................................................................4
Objetivo general..............................................................................................................................4
Objetivos específicos......................................................................................................................4
Planteamiento del problema...............................................................................................................5
Estado de Arte de lo que es un Proceso Transaccional......................................................................6
Desarrollo del Proyecto......................................................................................................................7
Enlace del Video YouTube...............................................................................................................17
Conclusiones.....................................................................................................................................18
Referencias bibliográficas................................................................................................................19
Introducción

Un sistema de procesamiento de transacciones (TPS) es un tipo de sistema de

información que recopila, almacena, modifica y recupera toda la información generada por las

transacciones que ocurren en una organización. Una transacción es un evento que genera o

modifica los datos que eventualmente se almacenan en un sistema de información. Para que un

sistema informático se considere un TPS, debe pasar la prueba ACID.

Cuando se realiza una compra a través de un servicio online, se transfiere o retira dinero

en un cajero automático, se desencadenan una serie de operaciones con el fin de garantizar que

dicha transacción sea exitosa. Sin embargo, si una operación individual de la serie falla durante

el intercambio, la falla afecta a todo el intercambio. Esto trae como consecuencia que no se

obtenga el producto o no se obtenga el dinero.

La tecnología responsable de que el intercambio se realice de forma equilibrada y

predecible se denomina procesamiento de transacciones. Las transacciones aseguran que los

recursos de datos no se actualicen permanentemente a menos que todas las operaciones en la

unidad transaccional se completen con éxito. Al combinar un conjunto de operaciones

relacionadas en una unidad que se completa con éxito o falla, puede simplificar la recuperación

de errores y brindar una mayor confiabilidad para su aplicación. Astros, I. J. T. (2017, julio 13).
Objetivos

Objetivo general

Acceder a la base de datos usando sockets para hacer las operaciones transaccionales.

Objetivos específicos

 Elaborar el socket Sever que reciba peticiones del socket Cliente y resuelva dichas

peticiones contra la base de datos de Recursos Humanos, usando cualquiera de los

lenguajes de programación como Java, Python, C o C++.

 Elaborar un programa Socket Cliente que use la ip del Socket Servidor y el puerto del

Servidor para conectarse al Socket servidor y enviar transacciones.


Planteamiento del problema

El Socket Cliente captura la información del usuario y el Socket Server debe

realizar las siguientes operaciones.

a. Insert --- > para Insertar un empleado en la base de datos

b. Update --- > Para actualizar los datos de un empleado en la base de datos

c. Select --- > Para consultar un empleado en la base de datos

d. Delete --- > Borrar un empleado de la base de datos, previa inserción de la tabla

Históricos.

.
Estado de Arte de lo que es un Proceso Transaccional

Según el Libro Introducción a los sistemas de Bases de datos, de C.J. Date, en el

capítulo 1 y 3 se menciona: Una transacción es una unidad de trabajo lógica que comprende

por lo regular varias operaciones de la Base de Datos. También indicamos que el usuario debe

ser capaz de informar al sistema cuando haya operaciones distintas que forman parte de la

misma transacción. Para este fin, se proporcionan las operaciones BEGIN TRANSACTION,

COMMIT y ROLLBACK (iniciar transacción, confirmar y deshacer) En esencia una

transacción comienza cuando se ejecuta una operación BEGIN TRANSACTION y termina

cuando se ejecuta una operación COMMIT o ROLLBACK correspondiente. Algunas ideas

que surgen, son las siguientes:

1. Se garantiza que las transacciones sean atómicas.

2. También se garantiza que las transacciones sean durables.

3. Se garantiza además que las transacciones estén aisladas entre sí; en el sentido de

que las actualizaciones hechas a la base de datos por una determinada transacción

T1 no sean visibles para ninguna transacción distinta T2, por lo menos, hasta que

T1 ejecute con éxito el COMMIT. Pues ésta permite que las actualizaciones

efectuadas por una transacción sean visibles para otras transacciones; se dice que

dichas actualizaciones están confirmadas y se garantiza que nunca sean

canceladas. Si en vez de ello la transacción ejecuta un ROLLBACK, se cancelan

( deshacen) todas las actualizaciones hechas por la transacción. En este último

caso, el efecto es como si nunca se hubiese realizado la transacción.

4. Se garantiza (por lo regular) que la ejecución intercalada de un conjunto de


transacciones concurrentes sea seriable, en el sentido que produzca el mismo

resultado que se obtendría si se ejecutaran esas mismas transacciones, una a la vez,

en un cierto orden serial no especificado.

Desarrollo del Proyecto

El sistema de transacciones o sistema de procesamiento de transacciones, es un

sistema de información diseñado para recopilar, almacenar, modificar y recuperar diversa

información generada por las transacciones en una organización. El modelo de transacción en

sí contiene las siguientes características: respuesta rápida, confiabilidad, inflexible y

procesamiento controlado.

En general, los sistemas transaccionales se pueden dividir en un sinfín de tipos, porque

el concepto de transacciones se puede extender a casi cualquier dominio, como los recursos

humanos. Los siguientes son algunos tipos de sistemas comerciales:

Ilustración 1 Tipos de Sistemas Transaccionales


Nota: Elaboración propia (2022)

La especificación del socket del cliente y el socket del servidor se realiza mediante la

programación de Python, por lo que debe descargar Python 3 en su computadora y activar el

cuadro de la variable Ruta, y luego la base de datos se crea con postgres, por lo que debe usar

pip install desde el comando de consola Psycopg2 instala el paquete psycopg2, que permite a

Python enviar y recibir información de la base de datos.

Ahora el socket del cliente se encargará de enviar la información al socket del servidor

para que el socket del servidor pueda procesar esta información así, enviarla o solicitarla a la

base de datos para su posterior procesamiento o guardarla y enviarle al cliente una solicitud

Pull nuevamente.

Ilustración 2 Comportamiento de los Sockets

Nota: Elaboración propia (2022)

Después de limpiar el contenido anterior, comenzamos a trabajar en el código y

aclaramos las funciones de cada parte del código en los comentarios:

Socket Cliente:
from socket import *
import sys

IPServidor = "localhost"
puertoServidor = 9099

#Declaración del Socket cliente

socket_cliente = socket(AF_INET, SOCK_STREAM)


socket_cliente.connect((IPServidor, puertoServidor))

while True:

    #Mensaje
  
    mensaje  = input()
    if mensaje != "5":

        socket_cliente.send(mensaje.encode())

        respuesta = socket_cliente.recv(4096).decode()
        print(respuesta)

    else:
        socket_cliente.send(mensaje.encode())

        #cerrar socket
        socket_cliente.close()
        sys.exit

Socket Servidor:

from socket import *


import psycopg2

direccionServidor = "localhost"
puertoServidor = 9099

# Creación del Socket


server_socket = socket(AF_INET, SOCK_STREAM)

#Conexión
server_socket.bind((direccionServidor, puertoServidor))
server_socket.listen()

def salir():
    
  print('Conexión cerrada para: ',addr)
  conexion.close()

def ciclo():
  conexion.send(""" hola, elige alguna opción para continuar(palabra)
  1. consultar
  2. insertar
  3. actualizar
  4. eliminar
  5. salir
  """.encode())
  recibe= conexion.recv(4006).decode()
  print(recibe)

  #Conectar a la base de datos


  database_elephant = "rqsdduvk"
  user_elephant = "rqsdduvk"
  password_elephant = "fu4KVRtjagZ609a500IcamAE9AwwoL-D"
  host_elephant = "lallah.db.elephantsql.com"

   
  if recibe== "5":
    return salir()
  elif recibe== "1":
    conexion.send("esta seguro que desea consultar un empleado?".encode())
    usuario= conexion.recv(4006).decode()
    
    while usuario == "no":
      return ciclo()
    else:
      conexion.send("ingrese el id del usuario a consultar".encode())
      datos= conexion.recv(4006).decode()

      conexion1 =
psycopg2.connect(database=database_elephant,user=user_elephant,host=host_elephant,password
=password_elephant)
      cursor1 = conexion1.cursor()
      cursor1.execute("SELECT * FROM recursos_humanos.empleados where empl_id= ( %s);",
(datos))

      for registro in cursor1:


        conexion.send(str(registro).encode())
      conexion1.close()
      return ciclo()

   
    

  #Insertar datos
  elif recibe== "2":
    conexion.send("esta seguro que desea añadir un empleado?".encode())
    usuario= conexion.recv(4006).decode()

    conexion2 =
psycopg2.connect(database=database_elephant,user=user_elephant,host=host_elephant,password
=password_elephant)
    cursor2 = conexion2.cursor()
    sql = "INSERT INTO
recursos_humanos.empleados(empl_id,empl_primer_nombre,empl_segundo_nombre,empl_emai
l,empl_fecha_nac,empl_sueldo,empl_comision,empl_cargo_id,empl_gerente_id,empl_dpto_id)
values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);"
    while usuario == "no":
      break
    else:
      #Ingreso de los datos
      conexion.send("ingrese el id del empleado".encode())
      empl_id= conexion.recv(4006).decode()
      conexion.send("ingrese el primer nombre".encode())
      empl_primer_nombre= conexion.recv(4006).decode()
      conexion.send("ingrese el segundo nombre".encode())
      empl_segundo_nombre= conexion.recv(4006).decode()
      conexion.send("ingrese la dirección de correo".encode())
      empl_email= conexion.recv(4006).decode()
      conexion.send("ingrese la fecha de nacimiento".encode())
      empl_fecha_nac= conexion.recv(4006).decode()
      conexion.send("ingrese el sueldo".encode())
      empl_sueldo= conexion.recv(4006).decode()
      conexion.send("ingrese la comision".encode())
      empl_comision= conexion.recv(4006).decode()
      conexion.send("ingrese el id del cargo".encode())
      empl_cargo_id= conexion.recv(4006).decode()
      conexion.send("ingrese el id del gerente".encode())
      empl_gerente_id= conexion.recv(4006).decode()
      conexion.send("ingrese el id del departamento".encode())
      empl_dpto_id= conexion.recv(4006).decode()

      #Envio de los datos a postgress


      datos =
(empl_id,empl_primer_nombre,empl_segundo_nombre,empl_email,empl_fecha_nac,empl_sueld
o,empl_comision,empl_cargo_id,empl_gerente_id,empl_dpto_id)
      cursor2.execute(sql,datos)
      conexion.send("desea agregar otro empleado?".encode())
      usuario = conexion.recv(4006).decode()
    

    conexion2.commit()
    conexion2.close()
    return ciclo()

    

  #Actualizar datos
  elif recibe== '3':
    conexion.send("esta seguro que desea actualizar un empleado?".encode())
    usuario= conexion.recv(4006).decode()

    conexion3 =
psycopg2.connect(database=database_elephant,user=user_elephant,host=host_elephant,password
=password_elephant)
    cursor3 = conexion3.cursor()
    sql = "UPDATE recursos_humanos.empleados SET empl_sueldo=%s  WHERE empl_id=
%s;"
    while usuario == "no":
      break
    else:
      #Ingreso de datos
      conexion.send("ingrese el id del empleado".encode())
      empl_id= conexion.recv(4006).decode()
      conexion.send("ingrese el nuevo sueldo".encode())
      empl_sueldo= conexion.recv(4006).decode()
     
      #envio de datos a  postgress
      datos = (empl_sueldo,empl_id)
      cursor3.execute(sql,datos)
      conexion.send("desea actualizar otro empleado?".encode())
      usuario = conexion.recv(4006).decode()
     

    conexion3.commit()
    conexion3.close()
    
    return ciclo()

    #Eliminar datos
  elif recibe== '4':
    conexion.send("esta seguro que desea eliminar un empleado?".encode())
    usuario= conexion.recv(4006).decode()

    conexion4 =
psycopg2.connect(database=database_elephant,user=user_elephant,host=host_elephant,password
=password_elephant)
    cursor4 = conexion4.cursor()
    sql = "DELETE FROM recursos_humanos.empleados WHERE empl_id=%s;"
    while usuario == "no":
      break
    else:
      conexion.send("ingrese el id del empleado".encode())
      empl_id= conexion.recv(4006).decode()
      datos = (empl_id)
      cursor4.execute(sql,datos)
      conexion.send("desea actualizar otro empleado?".encode())
      usuario = conexion.recv(4006).decode()
    conexion4.commit()
    conexion4.close()
    return ciclo()

while True:
  conexion, addr= server_socket.accept()
  print('nueva conexion establecida')
  while True:
    inicio=conexion.recv(4006).decode()
    ciclo()

Algunos conceptos generales de la programación de sockets con Python (que pudimos ver en el
código) son:

● BIND: Recibe la dirección del servidor y su puerto como argumentos.

● LISTEN: se usa para indicarle al complemento que esté en modo de escucha para esperar

las conexiones entrantes.

● RECV: recibe datos de un socket, acepta el tamaño especificado como argumento y

devuelve un objeto que representa los datos recibidos.

● ACCEPT: Al aceptar una conexión entrante de un cliente conectado, busca una conexión

del cliente con los dos parámetros recibidos (los mismos parámetros utilizados para crear el

socket).

● SEND: cuando se conecta a un enchufe, la función de envío envía datos en bytes

● CLOSE: Apague la salida.

● ENCODE: codificar los datos recibidos y devuelve el objeto en bytes (no forma parte de

la interfaz del socket)

● DECODE: recibe el objeto recibido y devuelve la cadena (no forma parte de la interfaz

del socket).

Resultados:

Luego de ejecutar el código observamos las siguientes evidencias de actividad del programa,

para lo cual probaremos la creación, borrado, actualización y consulta de información:


Ilustración 3Mensaje Inicial en la Terminal de Cliente

Nota: Elaboración propia (2022)

Consulta de información: Se realiza la consulta del primer empleado, para ello se especifica el id

del mismo:
Ilustración 4 Consulta del Primer Empleado

Nota: Elaboración propia (2022)

Inserción de información: Se realiza el ingreso de un nuevo registro dentro de la tabla de

empleados:

Ilustración 5 Inserción sexto empleado

Nota: Elaboración propia (2022)


Ilustración 6 Comprobación de la inserción en la base de datos

Nota: Elaboración propia (2022)

Actualización de información: Se realiza la actualización del sueldo del empleado anteriormente

ingresado:

Ilustración 7 Actualización del sueldo del sexto empleado

Nota: Elaboración propia (2022)

Ilustración 8 Comprobación de Actualización de Datos

Nota: Elaboración propia (2022)

Eliminación de información: Se realiza el borrado del registro del primer cliente y consulta en la

base de datos para corroborar que se ha eliminado correctamente:


Ilustración 9 Primer Paso para eliminar al primer empleado

Nota: Elaboración propia (2022)

En este ejemplo vemos que cambiando el atributo a on delete cascade, es decir, borrado en

cascada o secuencial, el programa borra todos los registros que hay en él. De la misma manera,

podemos ver si pasa por el proceso de eliminación de datos. Este procedimiento podría haber

funcionado mejor si se hubiera realizado en una tabla sin claves foráneas, pero sigue siendo el

mismo que se realizó originalmente.

Ilustración 10 Para abrir la base de datos

Esa información nos va a servir para la conexión de la base de datos al software, pues aquí

está la base de datos para realizar la conexión en dbeaver.


Anexos

Código: https://drive.google.com/drive/folders/1NxiIPJm190e5wGuMtYMM-2EtHunMISno?

usp=share_link
Enlace del Video YouTube

Luego de incluir en el documento la información correspondiente del estado del arte

del proceso transaccional, el desarrollo del código fuente de los programas Socket Server y

Socket cliente, junto con la explicación de lo que hace en cada programa y todos los

requerimientos para el taller; finalmente en esta sección se adjunta el enlace del video

realizado.

https://youtu.be/DfAhDpO0514

Ilustración 11 Video YouTube


Conclusiones

Es un conjunto de hechos que deben realizarse como una unidad indivisible de trabajo, en

la que todos y cada uno de ellos triunfan o todos y cada uno de ellos son rechazados. Como esta

definición se ajusta a una gran cantidad de actividades cotidianas, se ha convertido en una

verdadera filosofía de diseño aplicable a innumerables áreas, especialmente en el mundo de los

negocios y eventos financieros que involucran transferencias de dinero. Este solo hecho significa

que las transacciones deberán realizarse rápidamente y con un riesgo mínimo.

Así pues, ACID compliant define a un sistema de gestión de bases de datos que puede

realizar transacciones seguras. En concreto ACID es un acrónimo de Atomicity, Consistency,

Isolation and Durability: Durabilidad, Aislamiento, Consistencia e Indivisibilidad en español.


Referencias bibliográficas

Astros, I. J. T. (2017, julio 13). Sistema de información transaccional: Teoría y aplicación.

Monografias.com. https://www.monografias.com/docs114/sistema-informacion-

transaccional-teoria-y-aplicacion/sistema-informacion-transaccional-teoria-y-aplicacion

Herraizsoto&co. (2022, julio 13). 《¿Qué es un sistema de procesamiento de transacciones? 》.

PayRetailers. https://payretailers.com/es/latam/sistema-procesamiento-transacciones

Rueda, D. (s. f.). Â ¿Que es un sistema transaccional? prezi.com.

https://prezi.com/kjd_v-zz13wa/que-es-un-sistema-transaccional/

También podría gustarte