Luis Molina

tecnologías de la información, experiencias, conocimiento

Posts Tagged ‘database

Sesión de Introducción a Big Data

with 2 comments

Big-Data-Landscape-Jul-4-2012.00111

El pasado 23/04/2013 asistí a un evento organizado por FORMAN en el PTA (Málaga) donde José Álvarez Gómez impartió una sesión introductoria a Big Data desde el punto de vista de Oracle: además de introducir el concepto general de Big Data, también informó sobre Oracle Big Data Appliance.

20130423 Agenda intro Oracle Big DataComparto aquí algunas notas que tomé durante la sesión.

El concepto Big Data

Big Data (en Wikipedia)) se puede definir como un conjunto de técnicas y de tecnologías que permiten analizar eficazmente todos los datos disponibles, estructurados o no, obtenidos de diferentes recursos u orígenes. El uso de estas técnicas y tecnologías se reparte en cuatro fases del análisis:

  1. Adquirir.
  2. Organizar.
  3. Analizar.
  4. Decidir.

Los objetivos de captar toda la información posible deben ser (a) reaccionar a eventos y (b) poder cambiar por los resultados de forma proactiva.

Nos encontramos con grandes retos: enormes volúmenes de datos que se generan a gran velocidad. Pero, sobre todo, la necesidad de obtener los valores que interesan, a partir de estos grandes volúmenes de datos, en el tiempo adecuado.

En general, el término Big Data se aplica sobre todo a esos grandes volúmenes de datos no estructurados que se filtran, se procesan, se almacenan posteriormente en bases de datos estructuradas y se integran con mi aplicación.

Tecnologías y software para Big Data

Me permito poner aquí una diapositiva de la sesión que muestra una arquitectura para Big Data:

2012_10_Bigdata_Overview-18

Destaco algo de tecnologías y software comentados en la sesión:

  • Cloudera: una distribución de Apache Hadoop que se utiliza en las fases de adquisición y organización de datos no estructurados. De esto me llamó  la atención el Hadoop Distributed File System (HDFS), un sistema de ficheros distribuido especialmente útil en este tipo de aplicaciones.
  • Oracle NoSQL Database: base de datos distribuida basada en pares clave-valor, usada sobre todo en la fase de adquisición de datos no estructurados.
  • Oracle Data Integrator: herramienta para integrar datos de diferentes fuentes que se utiliza en la fase de organización de datos junto con los conectores Oracle Loader for Hadoop y Oracle Direct Connector for HDFS.
  • MapReduce: framework para computación distribuida diseñado para dar soporte a grandes cantidades de datos. Forma parte del sistema Hadoop y se utiliza en las fases de adquisición y organización de datos, pues opera con pares clave-valor.
  • R: lenguaje de programación de código abierto diseñado para computación estadística y para generación de gráficas. Oracle también tiene su distribución que se puede utilizar en la fase de análisis de datos.
  • Endeca Information Discovery: otro producto de Oracle que forma parte del Business Intelligence que se utiliza en las fases de análisis y decisión.

Para finalizar, podéis acceder a las diapositivas de la presentación aquí y aquí.

Anuncios

Written by Luis Molina

21 mayo 2013 at 07:40

Configurar WordPress para varios servidores con un único fichero wp-config.php

with one comment

ejemplo de wp-config.php definiendo conexiones a varias bases de datos

Es una práctica común entre los desarrolladores web el tener varias versiones de un mismo sitio WordPress: versión local, versión en desarrollo, versión de pruebas, versión en producción, etc.

En caso de que no utilices un sistema de control de versiones (SVN, Git, etc.), aquí tienes una manera fácil de mantener un único fichero de configuración wp-config.php que contenga las distintas conexiones a la base de datos, en función del servidor donde se encuentre el fichero.

Edita el fichero wp-config.php y, al principio del mismo, reemplaza los datos de conexión que suelen venir predeterminados por estas líneas (como en la imagen superior):

if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
  // Entorno LOCAL
  define('DB_NAME', 'nombreBDlocal');
  define('DB_USER', 'nombreUSRlocal');
  define('DB_PASSWORD', 'contraseñalocal');
  define('DB_HOST', 'servidorlocal'); // normalmente, localhost
} else {
  // Entorno PRODUCCION
  define('DB_NAME', 'nombreBDpro');
  define('DB_USER', 'nombreUSRpro');
  define('DB_PASSWORD', 'contraseñapro');
  define('DB_HOST', 'servidorpro');
}

En cada constante aquí definida, tendrás que escribir los valores correspondientes de las conexiones a tus bases de datos.

Como ves, los parámetros de conexión a la base de datos se definen en función de la IP del servidor donde esté alojado el fichero wp-config.php.

Jugando con $_SERVER['SERVER_ADDR'] y varios if...else if... (o case...switch...) podrás contemplar los distintos entornos en los que se ejecute tu sitio web con WordPress.


Actualización 19/05/2013

Otra manera muy práctica de mantener el mismo wp-config.php en distintos servidores (distintos entornos de ejecución de WordPress) es guardar los datos de conexión a la base de datos de cada entorno en un fichero distinto. En el siguiente ejemplo, se tiene un entorno local de desarrollo y un entorno real de producción:

wp-config-varias-bbdd-2

El código que ponemos en wp-config.php es este:

if ( file_exists( dirname( __FILE__ ) . '/local-config.php' ) ) {
 // ENTORNO LOCAL - DESARROLLO
 include( dirname( __FILE__ ) . '/local-config.php' );
} else {
 // ENTORNO REMOTO - PRODUCCIÓN
 define('DB_NAME', 'dbbd');
 define('DB_USER', 'dbmy');
 define('DB_PASSWORD', 'dbpw');
 define('DB_HOST', 'localhost');
}

Y el contenido del fichero local-config.php es este:

<?php
/**
 * Datos acceso a base de datos local (desarrollo).
 */
define('DB_NAME', 'localdb');
define('DB_USER', 'localdbusr');
define('DB_PASSWORD', 'localdbpwd');
define('DB_HOST', 'localhost');

Si estás utilizando un sistema de control de versiones para tus desarrollos en WordPress, asegúrate de excluir el fichero local-config.php.

 

 

Written by Luis Molina

9 diciembre 2012 at 13:09

Publicado en Artículos

Tagged with , ,

Convertir de SQLite a MySQL

with 9 comments

convertir-sqlite-mysql

Aunque he intentado hacer funcionar de forma aceptable un WordPress con SQLite, finalmente el servidor donde lo alojaba no me facilitaba la tarea así que he decidido utilizar WordPress con MySQL, como toda la vida, aunque tenga que alojar la base de datos en un servidor externo.

Tras investigar  algo por Internet y darme algún cabezazo con imports/exports de SQL, estos son los pasos que he seguido para convertir una base de datos SQLite a MySQL (proceso también conocido como migración de SQLite a MySQL):

  1. Generar una exportación de la base de datos SQLite en un fichero SQL.
  2. Editar el fichero SQL generado para hacer los siguientes cambios:
    • Reemplazar AUTOINCREMENT por AUTO_INCREMENT.
    • Eliminar las comillas dobles en los nombres de los objetos, ya que MySQL no las contempla. Por ejemplo, hay que reemplazar “wp_posts” (incluyendo las comillas) por wp_posts.
    • En los campos que deban ser de tipo fecha/hora, reemplazar text not null default ‘0000-00-00 00:00:00’  por datetime not null. Fíjate en el not null: cámbialo si te conviene que sea null. Además, es posible que tú sí necesites algún valor predeterminado para algún campo de tipo datetime.
    • Eliminar el valor predeterminado (default) de los campos blob/text.
    • En general, repasar todos los campos que tengan formato text (generado por SQLite) ya que que algunos deberán cambiarse por datetime (como he explicado anteriormente) o por varchar.
    • Aunque yo no he tenido que hacerlo, en algún sitio he visto que hay que borrar todas las líneas donde aparezca sqlite_sequence.
  3. Una vez modificado y guardado el fichero (previa copia de seguridad, claro está 😉 ), importar este fichero SQL a la base de datos MySQL (por ejemplo, con phpMyAdmin).
  4. Fin.

Un ejemplo

A continuación muestro un ejemplo de migración de una tabla, lo que viene a llamarse “el antes y el después”:

Tabla wp_comments en SQLite (ANTES)

CREATE TABLE wp_comments (
 comment_ID integer NOT NULL PRIMARY KEY AUTOINCREMENT ,
 comment_post_ID integer NOT NULL default '0',
 comment_author blob NOT NULL,
 comment_author_email text NOT NULL default '',
 comment_author_url text NOT NULL default '',
 comment_author_IP text NOT NULL default '',
 comment_date text NOT NULL default '0000-00-00 00:00:00',
 comment_date_gmt text NOT NULL default '0000-00-00 00:00:00',
 comment_content text NOT NULL,
 comment_karma integer NOT NULL default '0',
 comment_approved text NOT NULL default '1',
 comment_agent text NOT NULL default '',
 comment_type text NOT NULL default '',
 comment_parent integer NOT NULL default '0',
 user_id integer NOT NULL default '0');

 

Tabla wp_comments en MySQL (DESPUÉS)

CREATE TABLE wp_comments (
 comment_ID integer NOT NULL PRIMARY KEY AUTO_INCREMENT ,
 comment_post_ID integer NOT NULL default '0',
 comment_author text NOT NULL,
 comment_author_email varchar(100) NOT NULL default '',
 comment_author_url varchar(200) NOT NULL default '',
 comment_author_IP varchar(100) NOT NULL default '',
 comment_date datetime NOT NULL ,
 comment_date_gmt datetime NOT NULL ,
 comment_content text NOT NULL,
 comment_karma integer NOT NULL default '0',
 comment_approved varchar(20) NOT NULL default '1',
 comment_agent varchar(255) NOT NULL default '',
 comment_type varchar(20) NOT NULL default '',
 comment_parent integer NOT NULL default '0',
 user_id integer NOT NULL default '0');

 
Pues nada más, espero que te sirva.

Written by Luis Molina

14 noviembre 2011 at 21:25

Publicado en Artículos

Tagged with , , , ,

Enlaces rápidos

leave a comment »

CSSDeskRecopilación de enlaces que me han resultado interesantes en los últimos tiempos:

 

Written by Luis Molina

11 octubre 2011 at 16:55

Publicado en Enlaces rápidos

Tagged with , , , ,