sábado, 20 de febrero de 2016

calculando edades con postgresql


A veces nos gastamos todo el tiempo ideando o creando funciones para trabajar con fechas y hacer cálculos de edad de los campos que ingresamos o consultamos en la bases de datos, para esto tenemos en postgresql algunas funciones para el manejo de fechas que nos ahorran ese trabajo de traernos el campo fecha_nacimiento por ejemplo y tratarlo con javascript, php u otro lenguaje de programación y realizar las conversiones y cálculos.


Para hacer el calculo de la fecha de un campo date o alguno de estos tipos de campo, timestamp como ejemplo, podemos usar la función de postgresql llamada: age Function  esta función nos permite obtener el tiempo de un valor dado tipo date o afín,revisen la documentación de la función en el enlace dado o vaya a la documentación de postgresql y encontrará información de la misma.

Pueden revisar la documentación y ejemplos de esta función haciendo clic en el enlace.


 como ejemplo les dejo esta consulta base para realizar sin complicaciones de tablas ni mas, solo un ejmplo sencillo ilustra como trabaja la función:



SELECT age(timestamp '2016-01-01');  (current date is '2016-04-25')

resultado 3 mons 24 days


otro ejemplo tenemos:


SELECT age(timestamp '2016-04-25', timestamp '2016-01-01'); #con dos fechas

resultado 3 mons 24 days



aquí estamos transformando el string '2014-08-25' a formato de fecha de postgresql, en este caso timestamp dando el resultado desde la fecha actual hasta la fecha que colocamos, pero podemos tener nuestro campo de la tabla que tengamos y hacer el calculo de la edad.

Ahora bien si solo queremos obtener el año a través de una consulta podemos utilizar otra función de postgresql.

ejemplo tenemos

select date_part('year',age(timestamp '2015-01-01'));
 
resultado 1
 
 

Hay otras funciones que nos permite postgresql realizar tareas que evitamos tener hechas a nivel de programación, podemos revisar la documentación de postgresql para tener conocimientos de estas y ayudarnos a mejorar nuestras consultas al motor de bases de datos. Entre estas tenemos: extract,

Apache Cassandra, instalacion


Apache Cassandra es una base de datos NoSQL distribuida y basada en un modelo de almacenamiento de «clave-valor», de código abierto escrita en java y desarrollada por el proyecto apache, permite grandes volúmenes de datos en forma distribuida,  no posee ningún costo ya que va bajo los estándares de software libre y permite restaurar algún nodo si este fallara de forma rápida 



Les dejo estos pasos para instalar el sistema de base de datos NOSQL Cassandra en ambiente gnu linux, para esto como prerrequisito necesitamos tener instalado los jre de java para iniciar el cual les dejo en otra entrada de como hacerlo tanto instalarlo como configurarlo y ponerlo en marcha Instalando java , manos a la obra.



Instalando y Validando Cassandra



1. Podemos descargar Apache Cassandra de la página oficial http://cassandra.apache.org/download/.



2. Descargamos el archivo “apache-cassandra-2.1.5-bin.tar.gz”.



3. Creamos un directorio “/home/<nombre_usuario>/app/” para las aplicaciones a utilizar, puede usar cualquiera a tu gusto. Copiamos el archivo en el directorio creado, debe estar logeado como usuario root.



$> mkdir /home/<nombre_usuario>/app
$> cd /home/<nombre_usuario>/app/
$> wget
http://www.webhostingjams.com/mirror/apache/cassandra/2.1.5/apache-
cassandra-2.1.5-bin.tar.gz



4. Descomprimir el archivo y hacer ls. Deberías tener el directorio
“apache-cassandra-2.1.5” y el archivo “apache-cassandra-
2.1.5-bin.tar.gz “. Borramos el archivo “apache-cassandra-2.1.5-
bin.tar.gz”.



$> tar -xvzf apache-cassandra-2.1.5-bin.tar.gz
$> ls
apache-cassandra-2.1.5 apache-cassandra-2.1.5-bin.tar.gz
$> rm *.tar.gz
5. Luego hacemos:
$> cd apache-cassandra-2.1.5/bin
$>./cassandra
6. Luego ejecutamos el cliente. Tenemos dos opciones:
$> sudo ./cassandra-cli
ó
$> sudo ./cqlsh



 Este se conectará automáticamente a la instancia de Cassandra en localhost. Deberíamos ver algo como lo siguiente:
Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.6 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh>



7. Utilice la herramienta cqlsh para examinar el sistema de tablas de la base de datos. Familiarícese con la herramienta. Puede utilizar el comando HELP o el auto completar para guiarse.
Puede escribir en minúsculas, así como también ejecutar comandos internos y CQL.



8. Si Cassandra no está en ejecución entonces usted obtendrá la
siguiente salida:
Connection error: Could not connect to localhost:9160



9. Veamos la conexión:
cqlsh> show host;



10. Usemos auto completar:
cqlsh> select * from system.<presione tabulador>
Obtendremos:
"IndexInfo"
local
schema_columns "NodeIdInfo"
paxos
schema_keyspaces batchlog
peer_events
schema_triggers compaction_history
peers
sstable_activity
compactions_in_progress range_xfers
hints
schema_columnfamilies
Escribimos cualquiera de las opciones (podemos presionar tabulador a medida que vamos escribiendo y así auto completar). Luego punto y coma <;> y presionamos <enter>.



Puede ver la documentación de cassandra en la pagina oficial de apache Apache cassandra

miércoles, 17 de febrero de 2016

replicacion en postgresql 9.1


La replicación es la copia y distribución de los datos, objetos (tablas,esquemas) de la base de datos de una base de datos a otra, para sincronizar ambas y mantener la integridad de los datos, esto nos permite tener los datos distribuido en diferentes servidores y mantener los sistemas con alto rendimiento, teniendo la disponibilidad de los datos, escalabilidad, entre otras ventajas.
 
Les voy a mostrar los pasos para realizar la configuración en servidores de bases de datos postgresql versión 9.1, también sirve para versión 9.2, 9.3 y 9.4 para la replicación de datos entre maestro-esclavo, esto nos sirve para tener alta disponibilidad por si el servidor maestro se llegará a perder el servicio o para tener un respaldo de los datos en el servidor esclavo.

Manos a la obra, se debe ubicar los archivos de configuración siguiente en los servidores o instancias de postgresql dependiendo de su instalación:


Configurar el servidor Maestro

Ubicar el archivo de configuración de postgresql, este archivo es muy importante porque aquí se encuentra todo lo referente a customizar o personalizar, entonar el gestor de bases de datos.

En postgresql.conf, es necesario
ubicar y establecer lo siguientes parámetros:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
 

Hay una advertencia de funcionamiento de un sistema de reserva en caliente: si se bloquea el modo de espera, el maestro seguirá esperando una respuesta en cada transacción. Esta es una mala cosa. Usted debe controlar adecuadamente este para que sepa cuando sucede!

Ahora, en pg_hba.conf, es necesario añadir lo siguiente:
 

host replication all 222.222.222.222/32 trust

donde 222.222.222.222/32 es la dirección ip del servidor esclavo

Esto da a sus permisos de servidor de espera para conectar con el maestro.

Configurar el servidor Esclavo


Ahora, en la máquina
esclava, editar postgresql.conf para que incluya:

hot_standby =
on

A continuación, agregue un archivo recovery.conf. 

Esto usualmente según la instalación van en el directorio de datos PostgreSQL, que por defecto en Ubuntu /var/lib/postgresql/9.1/main. Este archivo debe contener:

Standby_mode = "on"
primary_conninfo = 'host = 111.111.111.111 application_name = DB1'
 

Ahora vamos a la Transferencia de datos sólo para asegurarse de que los procesos apropiados están en funcionamiento, compruebe que hay un proceso emisor que se ejecutará en el proceso de un receptor que se ejecutará en el modo de espera y principal. Puede comprobar para aquellos con el comando en la consola de linux 
 ps -ef | grep sender 
y  
ps -ef | grep receiver

respectivamente.

En este punto, tenemos que asegurarse de que el modo de esclavo contiene una copia exacta de los datos del maestro.  
Se debe parar el servicio de PostgreSQL en el maestro y en el esclavo (por ejemplo, con un comando como invoke-rc.d stop PostgreSQL o /etc/init.d/postgresql stop). 
A continuación, copie los archivos de datos desde el maestro al esclavo. Debe excluirse cualquier archivo de configuración si usted ha puesto alguno allí (no lo hemos hecho en este tutorial), así como el directorio pg_xlog .:

rsync -av --exclude pg_xlog  /var/lib/postgresql/9.1/main  222.222.222.222:/var/lib/postgresql/9.1/main


colocamos el password de el usuario root y comienza la sincronizacion de los datos del maestro y esclavo, esto solo se hace la primera vez y se debe tener instalado el comando rsync en ambos servidores.

A continuación, inicie el modo
esclavo y el maestro (invoke-rc.d start de PostgreSQL en ambos sistemas).
Verificar

Ahora es el momento de probar esta configuración. Iniciar sesión en el maestro (ssh root@111.111.111.111) y crear una base de datos de ejemplo:

$ su postgres
$ Createdb sampledb

Ahora, acceder a la línea de comandos PostgreSQL:

$ Psql -d sampledb

Crear una tabla simple y rellenarla con algunos datos:

CREAR
table muestras (
    I
d entero CLAVE PRIMARIA,
    varchar nombre (25),
    text cosas
);

Insertar
into muestras (1, 'footer', 'un montón de foo');
Insertar
into muestras (2, 'valores', 'un montón de valor');
Insertar
into muestras (3, 'bazzzz', 'un montón de baz');
Insertar
into muestras (4, 'bine', 'un montón de bin');

Ahora, en otra línea de comandos, acceda a su modo de espera (
ssh root@222.222.222.222), en la línea de psql:

$ su postgres
$ Psql -d sampledb

Mira una lista de las tablas:

sampledb = # \ d
          Lista de las relaciones
 esquema | Nombre | Tipo | Propietario
-------- + --------- + ------- + ----------
 pública | muestras | mesa | postgres
(1 fila)

A continuación, consultar la tabla de muestras:

sampledb = # select * a partir de muestras;
 Identificación | nombre | cosas
---- + ------ + -------------
  1 | foo
ter | un montón de foo
  2 | valor
es | un montón de barra
  3 | baz
zz | un montón de Baz
  4 | bin
e | un montón de bin
(4 filas)

Ahora, trata de insertar algunos datos más:

sampledb = # insertar en los valores de muestreo (5, 'asdf', 'más asdf');
ERROR: No se puede ejecutar INSERT en una transacción de sólo lectura

¡Lo sentimos! El servidor
esclavo le da acceso de sólo lectura a los datos.
Comprobación del estado de WAL

En el maestro, puede ejecutar el siguiente comando para ver la situación actual de escritura WAL:

SELECT pg_current_xlog_location ();

Luego, en el modo de espera, puede ejecutar:

SELECT pg_last_xlog_receive_location ();
Si se obtienen los mismos valores, la replicación esta al día de lo contrario hubo un fallo. No hemos de configurar la replicación sincrónica, sin embargo, por lo que en un entorno de producción (con una gran cantidad de datos Cómo escribir en la base de datos) es posible que la espera sería inferior al maestro. Si necesita ambos sistemas para estar siempre caracteres idénticos, se puede dar la vuelta en la replicación síncrona.
La replicación síncrona permitiendo replicación síncrono sólo toma un par de pasos adicionales. Tenga en cuenta, sin embargo, que esto sólo debe hacerse cuando hay poca latencia entre el maestro y el esclavo! Eso es debido a que cada consulta en el servidor esperará a una respuesta desde el esclavo, que tiene que ir a través de la red. Configurar la replicación síncrona si tanto el maestro y el esclavo están conectados en una red local (preferiblemente privada).

Ok, para
realizar esto, añada lo siguiente a postgresql.conf en el Maestro:

synchronous_standby_names = 'db1'

Cuando el valor que aquí hay una lista separada por comas de sus servidores de
esclavos. Puede tener más de una, pero se utilizará sólo el primero. Si por alguna razón el primero de ellos muere, el segundo se convertirá en el esclavo.Reinciar el servico de PostgreSQL, entonces echa un vistazo el estado de la sincronización de datos (aún en el maestro):

$ Su PosgreSQL
$ psql

Entonces corre:

usename SELECT, application_name, client_addr, client_hostname, sync_state DE pg_stat_replication;

Debería ver algo como esto:

usename | application_name | client_addr | client_hostname | sync_state
---------- + ------------------ + ----------------- + - --------------- + ------------
 postgres | DB1 | 222.222.222.222 | | sincronizar

Ahora, sólo por diversión, volver atrás y añadir un montón de datos en su maestro, entonces se le pregunta sobre su máquina
esclava. Debería ver los mismos resultados en ambas máquinas!


martes, 16 de febrero de 2016

Instalando y Configurando Java

A veces nos ha pasado y lo digo en mi caso, es que debo actualizar mi sistema java en mi equipo de trabajo o tener otra versión de java para hacer funcionar algún programa que necesita una versión especifica, les dejo este tutorial paso a paso para realizar este procedimiento.
Instalando y Validando JAVA

1. Debemos verificar que Java 8 Java Development Kit (JDK) sea la versión de
Java por defecto de su Sistema Operativo. Para eso haga lo siguiente en una consola de linux, escriba el siguiente comando:
$>java -version

Si obtienes una respuesta parecida a la siguiente, es  porque no tienes instalada ninguna versión de Java en tu  Sistema operativo.
The program 'java' can be found in the following packages:
* default-jre
* gcj-4.6-jre-headless
* openjdk-6-jre-headless
* gcj-4.5-jre-headless
* openjdk-7-jre-headless
Try: apt-get install <selected package>

Si obtienes una respuesta como la que sigue es porque  tienes instalado el OpenJDK en tu sistema, donde OpenJDK es la versión libre del sistema java, pero esta ni es completa.
java version "1.7.0_15"
OpenJDK Runtime Environment (IcedTea6 1.10pre) (7b15~pre1-0lucid1)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

Si tienes instalado el OpenJDK, tienes la versión  equivocada de Java.

2. Elimina por completo OpenJDK/JRE de tu sistema y crea un  directorio para almacenar los binarios de Oracle JDK/JRE. Esto  evitará que haya conflictos y confusión entre las distintas  versiones de Java. Por ejemplo, si tienes OpenJDK instalado en  tu sistema, lo puedes desinstalar tecleando el siguiente comando en la consola de linux:

sudo apt-get purge openjdk-\*

usamos sudo si estamos usando una distribución de ubuntu, sino podemos logearnos como el usuario root y evitamos el comando sudo

Este comando elimina completamente OpenJDK/JRE de tu  sistema.

sudo mkdir -p /usr/local/java

Este comando creará un directorio para almacenar los  binarios de Oracle Java JDK y JRE que descargaremos y descomprimiremos en esa carpeta, para luego hacer uso de ella y tener el sistema java ubicado en esa carpeta para uso de todos los usuarios.

3. Descarga Oracle Java JDK para Linux, lo vas a descargar del sitio web de oracle en la sección descargas. Asegúrate de seleccionar  los binarios “correctos” para la arquitectura de tu sistema (32 ó  64 bits).

4. Copia los binarios en el directorio: “usr/local/java”, creado en el  paso 2.  En la mayoría de los casos los binarios de Oracle Java se  descargan en: “home/<nombre_usuario>/Downloads”.  Ejecute los siguientes comandos:

$> cd /home/<nombre_usuario>/Downloads
$> sudo cp -r <nombre_archivo_java>.tar.gz /usr/local/java/
$> cd /usr/local/java

5. Ejecuta los siguientes comandos en los archivos tar.gz  descargados. Asegúrate de hacerlo como root.
$> sudo -s
$> sudo chmod a+x <nombre_archivo_java>.tar.gz
$> sudo tar xvzf <nombre_archivo_java>.tar.gz

6. Revisa tus directorios. Hasta este momento deberás tener dos  directorios binarios en “/usr/local/java” para el Java JDK/JRE.

7. Edita el archivo PATH del sistema “/etc/profile” y agrega las  siguientes variables de sistema al PATH. Usa el editor de texto  de tu preferencia, pero asegúrate de hacerlo como root para  abrir “/etc/bash.bashrc”.
$> sudo gedit /etc/bash.bashrc

8. Desplázate hacia el final del archivo y agrega las siguientes
líneas:
JAVA_HOME=/usr/local/java/jdk<versión>
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

9. Guarda el archivo y salte.

10.
 Informa a tu sistema donde está ubicado el Oracle Java  JDK/JRE. Esto le dirá a tu sistema que hay una nueva versión de  Oracle Java.
$> sudo update-alternatives --install "/usr/bin/java" "java"
"/usr/local/java/jdk<versión>/bin/java" 1

Este comando notifica al sistema que Oracle Java JRE está  listo para usarse.
$> sudo update-alternatives --install "/usr/bin/javac" "javac"  "/usr/local/java/jdk<versión>/bin/javac" 1

Este comando notifica al sistema que Oracle Java JDK está  listo para usarse.
$> sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk<version>/bin/javaws" 1

Este comando notifica al sistema que Oracle Java Web  Start está listo para usarse.

11. Informe a tu sistema que Oracle Java JDK/JRE debe ser el Java  por defecto.
$> sudo update-alternatives --set java
/usr/local/java/jdk<versión>/bin/java

Este comando configurará el JDK/JRE para el sistema.
$> sudo update-alternatives --set javac
/usr/local/java/jdk<versión>/bin/javac

Este comando configurará el Javac Compiler para el  sistema.
$> sudo update-alternatives --set javaws
/usr/local/java/jdkversión>/bin/javaws

Este comando configurará el Java Web Start para el  sistema.
12.
Vuelve a cargar el PATH de tu sistema :
$> su - <nombre_usuario>
Este comando carga el archivo “/etc/bash.bashrc”. El PATH se  volverá a cargar después de reiniciar tu sistema.

13.
Prueba si Oracle Java se instaló correctamente en tu  sistema.

14.
Una instalación exitosa de 32-bits Oracle Java mostrará:
$> java -version
java version "<versión>"
Java(TM) SE Runtime Environment (build <versión>)
Java HotSpot(TM) Server VM (build <versión>, mixed mode)

15.
Una instalación exitosa de 64-bits Oracle Java mostrará:
$> java -version
java version "<versión>"
Java(TM) SE Runtime Environment (build <versión>)
Java HotSpot(TM) 64-Bit Server VM (build <versión>, mixed mode)


Espero les sirva de ayuda.

¿Qué es Big Data?

¿Qué es Big Data?

Big Data son grandes en cantidad, se capturan a un índice rápido, y son estructurados o no estructurados, o alguna combinación de lo de arriba. Estos factores hacen que los Big Data sean difíciles de capturar, extraer, y gestionar usando métodos tradicionales. Hay tanta publicidad en esta espacio que podría haber un amplio debate tan solo en relación a la definición de big data.
El uso de la tecnología Big Data no se restringe a grandes volúmenes. Los ejemplos en este artículo usan pequeños ejemplos para ilustrar las posibilidades de la tecnología. A partir del años 2012, los clústers que son grandes están en el rango de 100 Petabyte.
Los Big Data pueden ser tanto estructurados como no estructurados. Las bases de datos relacionales tradicionales, como Informix y DB2, proporcionan soluciones comprobadas para datos estructurados. A través de la extensibilidad, también gestionan datos no estructurados. La tecnología Hadoop trae técnicas de programación nuevas y más accesibles para trabajar en almacenamientos de datos masivos con datos tanto estructurados como no estructurados.

Segun wikipedia.

"Big data" es un término aplicado a conjuntos de datos que superan la capacidad del software habitual para ser capturados, gestionados y procesados en un tiempo razonable. Los tamaños del "big data" se hallan constantemente en aumento. En 2012 se dimensionaba su tamaño en una docena de terabytes hasta varios petabytes de datos en un único data set.  asi lo define phdconsultores.
Su origen radica en la evolución de las tecnologías y el incremento indetenible de la cantidad de datos generados por dichas tecnologías, la idea principal es poder estudiar e interpretar tal cantidad de datos. Los datos a estudiar son variados, en la mayoría de los casos no son estructurados, es por ello que puede llegar a representar un reto su estudio.
La falta de velocidad y escalabilidad hacen que el modelo relacional no logre ser un opción viable. Esta necesidad causa que nazcan alternativas, tales como BD NoSQL, cuyo funcionamiento proporciona ventajas en las carencias de las BD relacionales.
Las áreas de aplicación pueden ser tan variadas como se requieran, pues básicamente donde se encuentre la necesidad de estudiar grandes cantidades de datos, sean estructurados o no, un sistema Big Data puede ser implementado. Ejemplo: Web y redes sociales, Biometría, grandes transacciones, entre otros...
Al ser una tecnología relativamente nueva en nuestra región, existen algunos desafíos que deben ser superados para que la implementación pueda ser exitosa. Tales como la falta de importancia que suelen darle a las tecnologías en el negocio y por lo tanto la falta del personal que pudiera sugerir nuevas ideas en dicho ámbito.

Cada día existen más y más empresas, organismos públicos, universidades, entre otros; que manejan una incalculable cantidad de información, casos en que hablamos de petabytes (1024GB). Si a ello sumamos la gestión de datos proveniente de redes sociales como, Facebook, Twitter, LinkedIn, Instagrams surge el concepto de Big Data, por lo que podríamos decir que es el término que se utiliza para describir los grandes volúmenes de datos que componen Internet y la posibilidad de obtener información sobre ellos.
Algunos números clarificarán la situación: se calcula en más de 1000 millones los internautas del mundo que alimentan a diario la Red con cerca de 15 petabytes de datos. ¿A qué equivale? 1000 petabytes son un exabyte, 1000 exabytes son un zettabyte. Hoy, en 2016, la Red contiene mucho mas de 2,7 zettabytes de datos, aproximadamente, y aunque es difícil pensar en esta cantidad de información, definirla y analizarla promete grandes beneficios para los usuarios.

¿Cómo accedemos al Big Data? 

El Big Data puede ser el mejor activo de una organización o una de sus obligaciones más gravosas: todo depende de las estrategias y las soluciones que se pongan en marcha para afrontar el ingente crecimiento del volumen, la complejidad, la diversidad y la velocidad de los datos.
Teniendo herramientas a las que recurrir, es vital que las entidades que manejan una gran cantidad de datos pongan en práctica todas las acciones disponibles para gobernar su Big Data, y de este modo utilizarla como insumo para el negocio, teniendo en cuenta que los mismos están dentro y fuera de las organizaciones, en hojas de cálculo, bases de datos, redes sociales, sistemas de telemedición, correos electrónicos, etc.. Esto constituye un desafío, ya que durante décadas, las empresas han tomado sus decisiones basándose en datos de transacciones que se encontraban en sus propias bases de datos relacionales. Pero más allá, hay un mundo de datos no estructurados, provenientes de diversas fuentes, que pueden ser aprovechados para tomar decisiones de negocio más inteligentes.

Tenemos muchas aplicaciones que pueden ordenar, buscar y guardar toda nuestra información y generar reportes de grandes volúmenes de datos y formar grandes resultados y tener mejores decisiones y mejores gerencias para implementar nuestros negocios, esto permite desarrollar y tener en la punta de la tecnología y los acceso de la información completa para lograr el mayor desempeño, todo esto lo logra big data.