25 oct 2018

Integridad de los datos en SQL Server con CHECKSUM

Uno de los requerimientos importantes son la integridad de los datos, es necesario garantizar que ciertos datos queden fijos después de algún proceso y solo se pueden modificar mediante permisos especiales o un proceso determinado.

Es posible detectar si cambian los datos incluso por un programador que tiene acceso a línea de comandos para escribir sentencias Transact SQL usando la función CHECKSUM de SQL Server. La función CHECKSUM de SQL server devuelve un valor (hash) resultado de aplicar un algoritmo a los datos especificados (columnas). Entonces, basta calcular el CHECKSUM de las columnas que se desea validar que no sean alteradas y posteriormente comparar el valor de esta columna con el nuevo calculo del CHECKSUM, si estos son diferentes significa que fueron alterados.

El video que muestro a continuación da un ejemplo puntual del uso de esta función:





* SQL Server sugiere usar la función HASHBYTES para disminuir la probabilidad de colisión (dos datos distintos dan por resultado el mismo valor hash). En lo particular prefiero CHECKSUM por su facilidad de manejo de valor regresado, el cual es un int, mientras que HASHBYTES regresa un varbinary. Además de que no es importante si existe alguna colisión en los CHECKSUM devueltos. Considerar que el tipo int de Transact es un entero de 4 bytes, el cual tiene un rango de -2^31 a 2^31, esto significa un rango de +4 mil millones de combinaciones, lo cual es bastante bueno.

Optimizando para velocidad con las relaciones uno a uno

Debo aclarar que las relaciones uno a uno, no son una forma 'normal', esto significa que durante un proceso de normalización deberían desaparecer las relaciones uno a uno... excepto cuando se 'desnormaliza' conscientemente por asi convenir, como es este caso.


Problema: Tengo una aplicación de ventas, donde en últimos tiempos el proceso de seleccionar las facturas pendientes de pago se ralentizo considerablemente, llegando hasta un par de minutos. Este proceso consta de una simple consulta de la forma:


Select IDVenta, Fecha, NoDoc, NoDoc, Saldo, Total From TbaVenta Where  (IDCliente=12345) And ((TipoDoc='F') Or (TipoDoc='R') Or (TipoDoc='N') ) And (Afecto<>0) And (Saldo>0)

Esto es, selecciona todas las facturas del cliente 12345 que son Facturas, Remisiones o Notas afectadas y que tiene Saldo.


La columna IDSaldo de la tabla TbaVenta esta indexada, no así las columnas TipoDoc, Afecto y Saldo


En un análisis superficial supuse que si indexaba la columna Saldo el rendimiento mejoraría y asi fue, bajando de 100 hasta 5 segs en mi servidor de pruebas. No conforme con eso busque una alternativa y recurri a un viejo truco... una relación uno a uno, logrando reducir a casi 1/3 del tiempo de ejecución respecto al proceso de indexación anterior, como lo muestro en el video siguiente:






Y aquí tenemos una razón para usar una relación uno a uno!

5 nov 2014

Bases Distribuidas con SQL Server 2012

Estamos en la recta final de este año 2014 y ha sido de muchas ocupaciones, sin embargo estoy haciendo un esfuerzo por avanzar con el contenido del libro: "Bases de Datos Distribuidas con SQL Server 2012", el cual pretende ser un curso multimedia (Libro+Videos+Certificacion) con el fin de ser el material que acompañe la materia de "Bases de Datos Distribuidas" que se imparte en la mayoria de las universidades para la Carrera de Ing. en Sistemas y afines o para cualquiera que quiera profundizar en la arquitectura distribuida y reafirmar conocimientos generales de bases de datos.


Ya existe un borrador descargable desde hace un año con los primeros 3 capitulos y se puede descargar desde
http://es.slideshare.net/AntonioOrtiz1/curso-bases-de-datos-distribuidas-con-sql-server-2012

Ademas de ser un material de referencia para bases de datos distribuidas, este curso pretende ser una ayuda para reafirmar los conceptos mas importantes del modelo relacional y en general de bases de datos, asi como de alguna funcionalidad de SQL Server.
Anexo el contenido del curso, el cual es possible que cambie mientras se elabora:
BASES DE DATOS DISTRIBUIDAS CON SQL SERVER 2012

Dirigido a: Programadores, Analistas de Sistemas, Administradores de Sistemas, Estudiantes y Profesores que deseen aprender a diseñar e implementar un modelo de base de datos distribuida.
Deseable: Conocimientos de bases de datos, SQL.
Requisitos: Haber cursado o cursar alguna carrera relacionada a la informática o tener conocimientos basicos en bases de datos.
CONTENIDO:
I. Introducción al modelo relacional
  • De Sequel a SQL Server
  • Bases de Datos Relacionales
  • Manejadores de Bases de Datos Relacionales
  •  SQL
  •  Arquitectura Cliente-Servidor
  
II. Instalación y Configuración de SQL Server 
  • Instalación Manual
  • Configuración de Instancias
  • Administrador de Configuración (Configuration Manager)
III. Administración de SQL Server
  • SQL Server Management Studio
  • Separar y Adjuntar bases de datos
  • Respaldos
  • Compactar
  • Importar Datos
IV. Diseño de Bases de Datos
  • Diseño Conceptual
  • Diseño Lógico
  • Diseño Físico
  • Modelo relacional
  • Modelos E-R
  • Normalización
 V. Arquitectura de SQL Server
  • Archivos de datos
  • Archivo de transacciones
  • Grupos de archivos
  • Páginas de Datos
  • Índices Clustered
  • Índices Non clustered
VI. Transact SQL
  • Diagramas
  • DDL
  • Consultas
  • SubConsultas
VII. Vistas
  • Vistas
  • Vistas Indexadas
VIII Bases de Datos Distribuidas
  • Descripción
  • Características de una base de datos distribuidas
  • Ventajas
  • Desventajas
  • Creando un modelo de base de datos distribuidas

IX. Consultas Distribuidas
  • Servidores vinculados
  • Consultas distribuidas
  • Transacciones Distribuidas

X. Procedimientos Almacenados (Stored Procedures) y Funciones
  • Procedimientos del Sistema
  • Procedimientos del Usuario
  • Funciones del Sistema
  • Funciones del Usuario
  • SQL Dinámico vs Procedimientos Almacenados
XI. Desencadenadores (Triggers)

XII. Replicación
  • Publicador
  • Suscriptor
  • Réplica de instantáneas
  • Réplica transaccional
  • Replicación de Mezcla

25 ago 2014

Relaciones en bases de datos

Cuando aprendemos el modelo relacional, el cual es el mas conocido en teoría de datos; normalmente se nos enseña que existen 4 tipos de relaciones:
  • Uno a uno (1 a 1)
  • Uno a muchos (1 a N)
  • Muchos a muchos (N a M)
  • Muchos a uno (N a 1)
Lo que pocas veces se nos explica claramente es que el modelo relacional solo es válido durante la fase de diseño del modelo conceptual, que nos permite documentar y definir un modelo de datos solo a nivel de concepto, así pues, no todos los tipos de relaciones del modelo relacional son válidos para un modelo de base de datos lógico o físico. Pasamos a explicar lo anterior:


Relación uno a uno (1 a 1)

 Las relaciones uno a uno No deben existir en una base de datos pues eso denota inmediatamente que se hizo un mal trabajo de normalización. Ya que cada tabla representa una entidad de la base de datos. Una relación uno a uno, significaría que cada tabla es 'media' entidad o dos tablas representan un asunto o entidad. Lo correcto seria fusionar las columnas de las dos tablas en una sola.
Siendo poco estrictos es verdad que existen relaciones uno a uno en situaciones especiales (desnormalización planeada) por convenir así; por ejemplo: si un campo de una tabla se actualiza constantemente y queremos disminuir el riesgo de colisión en bloqueos, se puede aislar ese campo en una tabla que lo contenga y esté relacionado con una llave primaria idéntica a la llave primaria de la primera tabla.

Tabla normalizada
Producto
* ID
Codigo
Descripcion
Costo
Precio
UltVenta


Tabla desnormalizada con relación uno a uno
Producto
* ID
Codigo
Descripcion
Costo
Precio

Producto2
* ID
UltVenta


Concluimos que una relación uno a uno No es una relación normal y comúnmente no debería existir en una base de datos.



Relaciones uno a muchos (1:N)

Las relaciones uno a muchos son las mas comunes y en realidad es la 'única' relación válida para una base de datos, así; un Cliente puede tener muchas Facturas, una Población tiene muchos Clientes y una Venta puede incluir muchos Productos.


Relaciones muchos a muchos (N:M)
Las relaciones muchos a muchos definitivamente son un tipo de relación que no existen en una base de datos por una simple razón... son imposibles de implementar a menos que se haga un terrible trabajo de diseño y por supuesto de normalización, ya que implicaría que un mismo registro se repitiera para cada relación.
Por ejemplo, para un Producto hay muchos Proveedores y para un Proveedor hay muchos Productos.
Este tipo de relaciones solo se implementa de manera eficiente si se crea una tabla intermedia que relaciona ambas entidades, para este caso crearíamos la tabla ProductoProveedor de la siguiente manera:
ProveedorProducto
* IDProducto
* IDProveedor
A este tipo de Entidades se les conoce como Entidades débiles, ya que no representan un asunto u objeto de la realidad que intentan resolver. Dicho sea de paso, este tipo de Entidades son las únicas que llegan a cuarta o quinta forma normal.
En el modelo físico las relaciones muchos a muchos se descomponen en relaciones uno a muchos a uno.

Relaciones muchos a uno (N:1)
Bueno, este tipo de relaciones solo es importante en el modelo conceptual, ya que en el modelo lógico y físico, normalmente da la misma distancia de ida que de vuelta, es muy sencillo deducir que es la misma relación 1 a muchos vista desde la derecha.
 Las relaciones muchos a uno se tratan de una relación uno a muchos vista desde el otro lado.

* Recomiendo estudiar de manera independiente las 3 etapas del diseño de bases de datos, iniciando por el modelo conceptual, pasando al modelo lógico y finalizando con el diseño físico definido por el manejador de base de datos a utilizar.

Al llegar al modelo físico es importante comprender y utilizar adecuadamente las reglas de normalización, así como hacer un análisis correcto de cuando es conveniente saltarse alguna regla por ser conveniente a la funcionalidad del sistema o manejo de datos.

Conclusión: Siendo estrictos y siguiendo al pie de las letra las reglas de normalización, nos quedamos con la relación uno a muchos, y eliminamos la relación muchos a uno simplemente moviendo la tabla inicial de la relación a la izquierda y cambiando la relación por uno a muchos



22 oct 2013

Reunion de Comunidad .NET Tepic

Este martes 22 de Octubre tendremos la reunión de Comunidad .NET dentro del marco de la semana de Ciencia y Tecnología; el CETIS 100 ha tenido a bien proporcionarnos el auditorio para nuestra reunión de comunidad. Hay gran entusiasmo entre los miembros de la comunidad, alumnos y profesores que esperan esta serie de conferencias orientadas al tema de la educación.
 
Durante esta serie de conferencias se mostrarán productos Microsoft que facilitan el proceso de aprendizaje relacionado a la programación y las TICs en general, además el material y cursos gratuitos online.

Durante el transcurso de las conferencias se realizaran demostraciones practicas en el uso de los diferentes productos mostrados. Por ejemplo, para el tema de bases de datos se mostrara como realizar consultas aun servidor remoto desde consola o desde el Management Studio, incluso se realizara una consulta distribuida.



La sede es:


CETIS 100
Puerto Rico 39,
Col. Miravalles
Tepic, Nay, Mexico.

13 jun 2013

Perfil del (buen) programador

La programación de computadoras es un trabajo que require conocimiento de múltiples disciplinas y mucho se escribe sobre lo que es necesario que sepa o lo que es inútil para un programador. En este artículo intentaré describir lo que desde mi perspectiva como programador con 20 años de experiencia es importante que deba estar entre los conocimientos de un buen programador.

Al iniciar a programar, es indispensable que un programador aprenda un lenguaje de programación y todas las estructuras de control, el concepto de variable, objeto, alcance de variables, etc.

Más adelante entre los conocimientos fundamentales de todo buen programador están las estructuras de datos, matemáticas discretas, base de datos relacionales y teoría de sistemas cliente-servidor.

Por otro lado deberían conocer la arquitectura SOA y su implementación más  extendida que son los WebServices



 ESTRUCTURAS DE CONTROL
. Preparan al estudiante en el conocimiento de los elementos esenciales de un lenguaje de programación y si se trata de un lenguaje moderno debería ser orientado a objetos.


MATEMATICAS DISCRETAS
. La teoría de conjuntos es uno de los temas dentro de las matemáticas discretas; permitirá en un futuro programar fácilmente código que incluye manejo de conjuntos de cualquier tipo, además que facilitará la comprensión y creación de consultas en lenguaje SQL. Por otro lado la lógica que se ve en este tema, ademas de ser un buen ejercicio mental, apoyará en la resolución de problemas lógicos durante la codificación.

Los árboles de decisiones, grafos y autómatas son algunos de los temas que proporcionan conocimientos esenciales a un buen programador con lo cual crear software innovador y le permite tener las bases para crear nueva tecnología. En general las matemáticas discretas es un tema fundamental en la formación de todo futuro programador.


ESTRUCTURA DE DATOS
. El tema de estructura de datos es un pilar de la programación de computadoras, ya que permitirá programar con solidez muchas soluciones para problemas comunes. Las estructuras de datos también son la base de tecnologías conocidas ampliamente, por ejemplo los árboles B, que son la base de la implementación de la mayoría de las bases de datos relacionales. En manejadores de bases de datos como SQL Server y Access, los conceptos de páginas de datos, llave clustered y/o primaria corresponden o tienen una similitud muy cercana a urnas y estructuras de árbol B. https://sites.google.com/site/clasearbolesb/arboles-b


BASES DE DATOS
La teoría relacional es esencial cuando se trata de crear una solución con datos empresariales o de cualquier tipo que contiene entidades que se relacionan. La arquitectura cliente-servidor va de la mano de este tema, pues hoy en día se manejan grandes cantidades de datos que serían imposibles de administrar con un sistema basado en archivos. Por otro lado la arquitectura cliente-servidor provee el conocimiento que permite entender mejor el funcionamiento de servidores Web, FTP, etc.

Los conocimientos de Arboles B y otras estructuras de datos apoyan en gran manera en la implementación de las bases de datos relacionales. Un buen diseñador de bases de datos relacionales realizará un mejor trabajo si comprende exactamente conceptos y técnicas como Urnas, Llave Primaria, Llave secundaria, Normalización, etc.




SOA / WEBSERVICES
Hoy en día no se concibe un programador que no conoce SOA y su implementación mas conocida: WebServices; en un mundo conectado es muy frecuente que los sistemas intercambien información e interactúen de manera automática. Con la arquitectura SOA  se adquieren la capacidad de conectar sistemas localizados en cualquier parte del mundo o crear una aplicación distribuida.



DESARROLLO WEB Y MOVILES
Un vocero de Microsoft declaró recientemente que al menos el 80% de sus programadores estaban trabajando en algún producto relacionado con la nube; esto indica que la tendencia del mercado es el modelo de software como servicio (SAAS). Es por esto que actualmente es importante desarrollar para la web y los móviles, ademas de poder desarrollar servicios web (webservices).



En definitiva el conocimiento de estructuras de datos, matemáticas discretas y arquitectura SOA entre otros resulta fundamental en la formación de un buen programador, el carecer de una buena formación en cualquiera de ellas podría resultar en serias deficiencias como programador.

He escuchado en repetidas ocasiones frases como: "Los mejores programadores que conozco son contadores, administradores..." y definitivamente tienen razón, pero estas personas tendrán que aprender todos estos temas si desean programar software de mayor complejidad. Mi respuesta a estos comentarios es: "Conozco muy buenos albañiles que hacen casas igual o mejor que un arquitecto, pero no conozco un albañil que construya edificios de 10 pisos o plazas comerciales".

En definitiva ser buen programador va mas allá de aprender un lenguaje de programación. Se requiere como ya mencioné de matemJticas discretas, estructuras de datos, modelo relacional, arquitectura SOA y otras técnicas y conocimientos importantes.

4 jun 2013

Reparar base de datos SQL Server 2005 o posterior

En algunas ocasiones las base de datos se dañan con fallas de hardware, apagones inesperados del servidor y transacciones interrumpidas incorrectamente. SQL Server provee de sentencias que permiten verificar y reparar una base de datos con inconsistencias o dañada.

Antes de realizar el siguiente procedimiento deberia realizar un respaldo de la base de datos dañada si lo permite SQL Server o hacer una copia física de los archivos.


Paso 1: se coloca la base de datos en modo emergencia y usuario único
Alter Database mibd SET SINGLE_USER
Alter Database mibd SET EMERGENCY


Paso 2: Reparar la base datos
DBCC CHECKDB('mibd', REPAIR_ALLOW_DATA_LOSS)

. Repita este paso hasta que el mensaje sea '0 errores encontrados' para la base de datos
. La sentecia CHECKDB con la opcion REPAIR_ALLOW_DATA_LOSS elimina datos de ser necesario para realizar la reparación o corregir la consistencia de los datos, para una reparación más rápida y sin pérdida de datos pruebe la opcion REPAIR_REBUILD, aunque en ocasiones con esta opción no se repara completamente la base de datos.


Paso 3: Regresar a multiusuario y colocar en linea la base de datos
Alter Database mibd SET ONLINE
Alter Database mibd SET MULTI_USER


Aunque esto permite recuperar la base de datos en la mayoría de los casos, es altamente recomendable tener una estrategia correcta de respaldo o recuperación de la base de datos tales como espejos de discos, servidor reflejado, recuperación completa, etc.

29 sept 2012

MICROSOFT ACCESS 2010 RUNTIME CON SP1

Ya pasó más de un año desde que Microsoft liberó el Service Pack 1 del Runtime de Access 2010 y es momento que muchos esperan la versión del instalador del runtime con el service pack integrado. Si se intenta una instalación desde cero con el SP1 del runtime, nos indicará como requisito tener instalado el runtime de Microsoft Access 2010.




Después de investigar un poco me di a la tarea de encontrar la manera de integrar el SP1 a la versión base del runtime. La solución es por demás sencilla una vez que se descubre como hacerlo.




Proceso de Creación del paquete de instalación Access runtime 2010 con service pack 1
  • Se descarga la instalación inicial del runtime desde http://www.microsoft.com/en-us/download/details.aspx?id=10910, seleccione la versión de 32 bits o 64 bits según se desee.
  • Ejecute desde linea de comandos el instalador del runtime con la opción /extract, como se muestra en el ejemplo: C:\AccessRuntime.exe  /extract:C:\AccessRuntime2010x32_with_sp1\
  • Descargue el SP1 correspondiente al runtime desde http://support.microsoft.com/kb/2460015/es
  • Ejecute desde la línea de comandos el instalador del sp1 con la opción /extract indicando como destino la carpeta "updates" incluido dentro de la carpeta donde se extrajo previamente el runtime.
Ejemplo: C:\accessruntime2010sp1-kb2460015-x86-fullfile-es-es.exe  /extract:C:\AccessRuntime2010x32_with_sp1\Updates
  • Hasta este momento ya tenemos una carpeta preparada para la instalación del runtime de Access 2010 incluyendo el sp1 en un solo paso, si deseamos contar con un instalador de un solo archivo ejecutable, tendremos que hechar mano de Winrar y comprimir 'el contenido de la carpeta' que creamos con los siguientes parámetros:
 
Activamos la opción 'Crear un archivo autoextraíble' 
 
  
Hacemos clic en la pestaña Avanzado y luego en el botón Autoextraíble:
 
 
Vamos a la pestaña Instalación y en el recuadro 'Ejecutar tras la extracción' tecleamos: setup.exe 
 
 
 Vamos a la pestaña Modos y activamos el recuadro 'Descomprimir en una carpeta temporal' 
 
 
Vamos a la pestaña 'Texto e icono' y colocamos el título de la instalación si lo deseamos:

 
Finalizamos dando Aceptar en este recuadro, y luego en Aceptar en la ventana principal de Winrar y se creará un archivo ejecutable que contiene la instalación del runtime de Access 2010 con el sp1 integrado. Les dejo los links de los instaladores que he creado por si prefieren ahorrrarse el proceso.
 
     
 
 

24 sept 2012

Conferencias en CETIS 100 Tepic

Este martes 25 y Jueves 27 fui invitado al Centro de Estudios Tecnologicos y de Servicios No. 100, lugar donde hice mis estudios de preparatoria y mi carrera como tecnico programador para dar una serie de conferencias a los alumnos de Administracion e Informatica,

El tema para el area de informatica sera "Bases de Datos con SQL Server 2008", donde se mostraran las facilidades que proporciona Microsoft SQL Server 2008 para la administracion de bases de datos y se realizara una pequeña demostracion de su potencia.


Para el area de administracion impartire la conferencia: "Software Administrativo para la PYME"; una conferencia donde se explica la diferencia entre un sistema 'punto de venta', 'administrativo' y ERP. Se mostrará el software que fabricamos en mi empresa de tipo administrativo, llamado: "VISUAL CAJA 3D x2".

27 mar 2012

DIPLOMADO: BASES DE DATOS DISTRIBUIDAS CON SQL SERVER 2008


Invitacion abierta al diplomado presencial que impartiré proximamente en el Conalep 169 Tepic, haciendo enfasis en la aplicacion practica de la arquitectura de bases de datos distribuidas.

Dirigido a: Programadores, Analistas de Sistemas, Administradores de sistemas, Estudiantes y Profesores que deseen aprender a diseñar e implementar un modelo de base de datos distribuida.

Requisitos: Haber cursado alguna carrera relacionada a la informática y/o tener experiencia en bases de datos.

Deseable: Conocimientos de bases de datos, Transact SQL o ANSI SQL.

Objetivo: 
Durante este diplomado se revisara la teoría de base de datos distribuidas y se mostrarán las capacidades de SQL Server 2008 que permiten realizar una implementación exitosa de un esquema de base de datos distribuida.
Duración: 200 hrs.
Sede: CONALEP 169 Tepic, Mexico.
Fecha Inicio: Sábado 26 de Mayo de 2012
Clases demo: Sábado 12 y 19 de Mayo de 2012
Fecha de Finalizacion: Octubre de 2012 (aprox.)

Documento: DIPLOMA 200 hrs
Costo: 6000 pesos x persona (diferido durante todo el periodo del curso)
Teléfono: (311) 2103618
Enviar correo: Enviar mensaje aquí


Les comparto un video con una explicacion de bases de datos distribuidas




Poster informativo del diplomado






1 sept 2011

El hardware costoso en las PYMES y la mala Arquitectura de Software


Salvo rarisimas ocasiones la compra de hardware costoso en las PYMES (Pequeñas Y Mediamas Empresas) es justificable, esto pasa mas comunmente cuando se adquiere un software mal diseñado y peor programado. En estos casos son los propios desarrolladores del sistema quienes sugieren la compra de un hardware 'moderno' que sea compatible a su sistema.

A continuacion relatare algunas experiencias de campo:


CASO 1

- En alguna ocasion visite un supermercado que apenas tenia 4 cajas, y algunos usuarios administrativos, dando un total de 10 usuarios en la red. La queja era: "El sistema es muy lento, a pesar de seguir las indicaciones del fabricante del software, sigue siendo muy lento". A este negocio lo hicieron adquirir las computadoras mas rapidas del mercado en esa epoca (3.2 Ghz & 1 Gb RAM) para las cajas y un servidor de marca conocida con bastante memoria y un buen procesador. Los cajeros se quejaban que incluso al vender, en el momento de escanear un producto tardaba un par de segundos en traer el resultado; a veces mas. El area de soporte tuvo la idea de aumentar la memoria al servidor lo cual por supuesto no mejoro absolutamente nada la situacion.


¿Cual era el problema?

En realidad era un problema bastante comun y facil de detectar para cualquier arquitecto de software, su manejador de bases de datos estaba basado en archivos (punto a punto) lo cual hacia que la busqueda de informacion y en general todo el motor de la base de datos se encontrara del lado del cliente (en las cajas), esto hacia que se trasladaran grandes cantidades de datos y el cuello de botella fuera la red, basta recordar que el limite que imponen las redes de 100 mbps (12 mb por seg.aprox) se distribuian entre los 10 usuarios. Por esto el aumentar la memoria del Servidor no servia de nada, ya que este se limitaba a compartir la carpeta donde se localizaban los archivos de la base de datos, asi que lo unico que hacia era 'prestar' el disco duro. Todo esto, con el costo en velocidad y seguridad que representaba.

Las unica sugerencias que se podia dar era:
   1) Cambiar el sistema por uno con arquitectura cliente-servidor
   2) Aliviar la situacion agregando una tarjeta de red al servidor y distribuyendo los usuarios entre ellas, y; si habia la posiblidad agregar un arreglo de discos (raid 0)



CASO 2

Una PYME con 10 usuarios en la red, 7 usando un software empresarial el cual esta bastante lento. La excusa de los 'expertos' fue la misma de siempre: "la base de datos es muy grande y son muchos usuarios". El administrador del sistema me muestra un servidor muy robusto, de marca reconocida incluso con sistema redundate (doble fuente de poder y doble tarjeta madre). Tenian reportes que se obtenian en 20 mins. A mi parecer ese servidor debia ser suficiente para dar servicio agilmente a 100 usuarios (con el software correcto).

En este caso el software si era cliente-servidor pero hacian un uso muy pobre del lenguaje SQL; en donde en lugar de enviar una consulta que obtuviera los datos desde todas las tablas que se requerian, relacionandolas adecuadamente. Para un solo reporte se enviaban centenares de consultas con el resultado ya descrito.

La solucion logica era pedirles al equipo de desarrollo optimizar sus consultas adecuadamente.



CASO 3 (Mi cliente)

Una comercializadora mayoristas con una pequeña red de 12 usuarios, funcionando alrededor de 9 años con una base de datos de poco mas de 1 gb., un Servidor HT 3.2, con 2 gb de RAM, Disco SCSI 2, Red 100 mbps. Todo iba bien hasta que el servidor empezo a fallar al encenderlo (se apagaba al final del dia y se encendia a las 5 am aprox. al iniciar operaciones). Para la revision del servidor les prestamos un equipo bastante modesto, era un equipo sin marca de los conocidos como 'clone' de apenas 1.8 Ghz y 512 de RAM.

Revisamos el servidor y se determino que el problema era que se perdia la configuracion de los dispositivos en el 'bios'; entre ellos el disco duro y por eso no podia arrancar, se cambio la bateria y funciono sin problemas. Despues de algunos dias de pruebas se devolvio al cliente y se regreso la base de datos.

Mi primer pregunta al gerente general fue si notaron que el sistema se volvio mas lento, a lo cual respondio que no hubo diferencia; por demas sorprendido fui a las cajas y pregunte a los usuarios y algunos indicaron que ni siquiera sabian que nos habiamos llevado el servidor.

En realidad yo esperaba que la diferencia no fuera grande, pero nunca imagine que a ese nivel de uso (10 usuarios) no se notara diferencia alguna. A la fecha fue el ultimo soporte tecnico a casi 2 años de ocurrido y las visitas posteriores han sido para agregar usuarios y funcionalidad al sistema.



 Mi Oficina

- En mi propia empresa hasta hace dias contabamos con un 'servidor' que adquiri seminuevo con uno de mis proveedores hace alrededor de 4-5 años, era una PC Pentium a 2.4 Ghz, 512 RAM y 40 Gb en disco , el cual mejoramos a 2 Gb de RAM y 250 Gb de disco. Esto era suficiente para tener instalado Windows Server 2008, SQL Server 2008, Sharepoint y por supuesto manejar nuestra base de datos empresarial (ventas, compras, inventarios, facturacion). Ademas nuestro pequeño servidor tenia instalado un sistema de vigilancia con 4 camaras, guardando la grabacion las 24 hrs en el mismo disco duro.
Equipo exacto que teniamos como servidor

Solo fue hasta hace dias que cambiamos a un servidor de 2 nucleos, y esto no fue motivado por necesidades de procesamiento, ni almacenamiento. Mas bien, se determino que despues de cambiar impresora laser y adquirir una mas a color, el unico equipo antiguo era el servidor y se planeaba aumentar el uso de el, instalando aplicaciones como Visual Studio Team Server.



CONCLUSIONES

Desde una optica tecnica muy simple; si una consulta a mi base de datos para obtener las ventas del dia (folio, cliente, importe, impuestos, condiciones de pago) me toma 30 ms y procesar 2 peticiones simultaneas de este proceso aumenta un 50% (1) el tiempo de ambas consultas  a 45 ms c/u, dando un total de 90 ms, aumentando exponencialmente con cada consulta simultanea que se procesa, supondria que con una decena de usuarios lo maximo que puede ocurrir es que todos ellos requieran una consulta al mismo tiempo, justo en el mismo segundo. En donde para tal caso obtener el resultado tardaria un par de segundos o unos cuantos a lo maximo.

Parece que ultimamente hacen falta arquitectos, hay muchos programadores, pocos son buenos y menos son buenos arquitectos. Creo que la comprension del hardware es lo que permite optimizar y generar aplicaciones que sepan aprovecharlo. Por otro lado, la mayoria se arroja a aprender un lenguaje de programacion, sin haber entendido antes la plataforma y filosofia en la cual estan basados.

Hasta ahora en las PYMES con datos muy 'relevantes' o con mayor transacionalidad la solucion que adoptamos para asegurar sus datos ha sido agregar un disco duro, al cual se acumulan un par de respaldos por dia, con lo cual en caso de perdidad total del disco duro en produccion,  se volverian a capturar los registros de ventas, compras, inventarios, cobranza, bancos, de medio dia de operacion, lo cual dificilmente supera el medio millar de transacciones distribuidos entre una docena de usuarios.

Por supuesto que aqui nos referimos exclusivamente al procesamiento de datos empresariales, puede haber excepciones, donde una PYME requiere procesador video, renderizar, o diseños arquitectonicos que justifiquen tal gasto. Dicho esto, hoy en dia los equipos 'basicos' disponibles en el mercado tienen una capacidad de procesamiento muy por encima a los requerimientos de la mayoria de las PYMES.

Cuando me consultan sobre los requerimientos de equipo para algun sistema de mi autoria, la respuesta tipica es: "el equipo nuevo mas pequeño en capacidad esta sobrado para los requerimientos" o "cualquiera que tenga windows XP y 512 de RAM".

No existe una regla para indicar el gasto maximo en equipos para un sistema, pero siempre desconfie de alguien que de entrada pide renovar todo el equipo. Recuerde: "UN SISTEMA DESARROLLADO CORRECTAMENTE REQUIERE MENOS EQUIPO YA QUE TRASLADA LA MAYOR CARGA DE PROCESAMIENTO AL SERVIDOR".


(1) El aumento de un 50% por cada consulta simultanea que se suma a la ejecucion, es un dato hipotetico.
 * Se omiten acentos intencionalmente.

13 sept 2010

Dia del Programador

Apenas hoy me entere que es dia del Programador, esto por ser el dia 256 del año, o lo que es lo mismo 2^8, y hasta sitio web existe: http://www.programmerday.info/

Por cierto tambien es mi cumpleaños.

25 may 2010

SQLBk

Hoy he terminado mi herramienta SQLBk, la cual se encarga de realizar respaldos de bases de datos SQL Server, comprimiendolos y enviandolos a un servidor FTP.

La version gratuita respaldar bases de datos de cualquier tamaño y las comprime en formato .gz (se abre con WinZip y Winrar) sin opcion de transferirla por FTP.



La funcionalidad es por demas sencilla, simplemente ejecutamos el archivo SQLBk.exe y se abre la ventana de la foto anterior, donde se configuran los parametros de conexion a la instancia de SQL Server, asi como el servidor FTP. En el boton aceptar se guardan los parametros y se cierra el programa.

Posteriormente se ejecuta SQLBk con el parametro /Respaldar para realizar un respaldo en modo oculto, comprimirlo y subirlo a un servidor FTP (version enterprise)

Una herramienta sencilla, ligera, que realiza una tarea repetitiva sin esfuerzo alguno.

Haz clic aquí para descargar la versión gratuita de SQLBk 1.0

5 abr 2010

Lanzamiento de VS2010 & Azure

En esta ocasion estoy invitando a los desarrolladores, estudiantes y empresarios del software al evento de lanzamiento de Visual Studio 2010 y Azure, donde se mostraran las nuevas caracteristicas de VS2010 que permiten obtener mayor productividad y uso de caracteristicas especificas de Windows 7. Por otro lado se mostrara la plataforma de Microsoft para el modelo Software como Servicio (SAAS), la cual es una tendencia en el futuro que vendra a complementar el modelo de computacion actual.

El evento es en:
Universidad Autonoma de Nayarit
Auditorio de la Biblioteca Magna
Ciudad de la Cultura "Amado Nervo"
Tepic, Nayarit

Regístrate haciendo clic en el siguiente banner:



15 oct 2009

Reunion de la comunidad .NET Tepic 15/oct/2009

Este jueves 15 de Octubre a las 7 pm, la comunidad .NET Tepic invita a su reunion, donde se mostraran caracteristicas de optimizacion en SQL Server 2008, la dinamica sera un poco diferente a otras reuniones, pues en esta ocasion se pretende ser un poco mas practica, es por eso que se realiza en las instalaciones de Quantum Soluciones.


La cita es en:
   Av. Sauces #10
   Frente al parque del Fracc. Castilla
   Col. 26 de Septiembre
   Tepic, Nayarit, Mexico

Registro al evento:
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032429448&Culture=es-MX

Aqui el mapa de la ubicacion:
http://maps.google.com/maps?f=q&source=s_q&hl=es&geocode=&q=quantum+soluciones&sll=37.0625,-95.677068&sspn=54.269804,78.662109&ie=UTF8&hq=quantum+soluciones&hnear=&ll=21.470862,-104.882054&spn=0.015755,0.019205&z=16&iwloc=B

14 ago 2009

Techdays 2009

Este jueves 13 de Agosto de 2009 asistí a Guadalajara al evento 'TechDays 2009', tenia dias registrado y esperaba ansioso la fecha, asi que hice preparativos y conduje por casi 3 hrs desde Tepic.

Antes de salir al evento converse por el mensajero con Jaime Sanchez, orador de Microsoft y Coordinador de comunidades Mexico, me comento que estaria presente en el Techdays en Guadalajara y platicariamos sobre su presencia en la ciudad de Tepic para algun evento de la comunidad .NET o algo especifico de Microsoft.

Asi pues, esperaba encontrarme con el, pero mi sorpresa fue mayor cuando me di cuenta que era uno de los 2 oradores del evento. En el cual dio informacion muy especifica de Windows 7, tanto para usuarios como desarrolladores, ademas mostro algunos tips y funcionalidad muy interesante respecto a desarrollar aplicaciones optimizadas para el ahorro de energia, respondiendo a eventos desde Servicios Windows.

Por otro lado la otra conferencia fue de Azure, para mi fue muy familiar pues ya habia asistido con anterioridad a un evento en linea de Microsoft, pero aun asi, se mostraron demos donde vi funcionalidad especifica y como utilizar los templetes de Azure en VS 2008.

Me retire de Guadalajara por la noche, finalizando este evento, llevandome la satisfaccion de presenciar 2 temas de mucho interes y que en los proximos dias marcaran el rumbo de la tecnologia. Ademas del compromiso por parte de Jaime para visitarnos a Tepic en los proximos meses.

3 ago 2009

El baul de Visual Basic 6.0

Suguiendo en la revision de archivos viejos, encontre el instructivo del curso Visual Basic 6 que imparti hace ya algunos lustros. Al igual que el de Access, deseo ponerlo a la disposicion de cualquier persona que pueda serle de alguna utilidad.

Aqui el link de descarga:

http://ds.aortiz.net/descarga/manvb6.pdf

31 jul 2009

El baul de Access

Ya son cerca de 14 años que inicie a desarrollar aplicaciones en Microsoft Access, por alla en 1995 conoci Access 2.0 y me agrado su interfase agil para creacion de aplicaciones, tuve una gran ventaja incluso sobre otras personas que ya lo utilizaban y quienes me apoyaron al inicio, gracias a mis conocimientos de Visual Basic 2.0, en especifico en la parte de codificacion. Eso, y que ademas yo venia de programar en lenguaje C, lo cual era un poco mas complejo.


Recordando esto, saque del baul de los recuerdos una guia que inicie poco despues de esa fecha, cuando inicie a impartir cursos a programadores que deseaban aprender a programar en Access. Al final la guia se quedo en Access 2000.

Así pues, aqui queda disponible esta guia para cualquier interesado en ella.
http://ds.aortiz.net/descarga/Manual%20Access%202000.pdf

Reproduzco el indice de esta guia:

Introduccion
I. Tablas
II. Consultas
III. Formularios
IV. Reportes
V. Macros
VI. DAO: Objeto de Acceso a Datos
VII. Distribucion de la Aplicacion
Temas Avanzados: API, DCOM, Cliente-Servidor


En mi trabajo profesional Access me ha dado muchas satisfacciones, y he logrado instalar miles de aplicaciones comerciales, la mayoria utilizando SQL Server como Back End, ahora que estoy cambiando totalmente de plataforma de desarrollo empezare a comentar mi experiencias y si encuetro cualquier recurso lo compartire con gusto.

15 may 2009

Festival de Instalacion Internet Explorer 8



Nuestro proximo evento es el festival de instalacion de Internet Explorer 8, el cual es coordinado a nivel mundial por Microsoft y será replicado en Tepic.

- Fecha: 16/Junio/2009
- Lugar: Laboratorio 1 de la Facultad de Economia, UNIVERSIDAD AUTONOMA DE NAYARIT


Para asistir al evento puedes registrarte (sin costo) e imprimir tu pase en esta direccion: http://www.microsoft.com/mexico/festivalie8/

El evento es gratuito y se regalaran souvenirs y discos donados por Microsoft para este evento

3 feb 2009

Evento Silverlight


Ya paso bastante tiempo desde este evento y no habia tenido tiempo de subir informacion sobre el. En esta ocasión tuvimos la fortuna de contar con Rodrigo Diaz, uno de los mejores expertos en latinoamerica en el tema de Silverlight.

Una platica interesante donde explicó la arquitectura de silverlight asi como las posibilidades que nos brinda como desarrolladores y mejora de experiencia.

Las demostraciones y prácticas fueron muy completas, realmente despejo cualquier duda al respecto y nos motivo a emprender el camino para adoptar esta tecnología.

Por otro lado los profesores y directivos de la Universidad Autonoma de Nayarit, se vieron complacidos de contar con este tipo de eventos en sus instalaciones y le extendieron un reconocimiento a nuestro amigo Rodrigo, invitandolo a estar presente en un evento proximo de la UAN.

Los miembros de la comunidad .NET Tepic quedamos muy convencidos que Silverlight es una gran propuesta por su arquitectura multiplataforma y experiencia de usuario que brinda. Ahora estamos trabajando para llevar a la practica nuevos proyectos en esta plataforma.