<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>soft·in·spain &#187; mysql</title>
	<atom:link href="http://softinspain.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://softinspain.com</link>
	<description>negocios y software desde españa</description>
	<lastBuildDate>Sat, 14 Apr 2012 11:29:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Probando Redis</title>
		<link>http://softinspain.com/desarrollo/probando-redis/</link>
		<comments>http://softinspain.com/desarrollo/probando-redis/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 19:47:48 +0000</pubDate>
		<dc:creator>Jose Alberto</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pruebas]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[rendimiento]]></category>

		<guid isPermaLink="false">http://softinspain.com/?p=484</guid>
		<description><![CDATA[Me he descargado el código fuente de Redis y lo he compilado, sin problemas. He ejecutado el benchmark que lleva en el código y me ha dado los resultados esperados. Luego he preparado un test con PHP basado en una lista de 1000 frases generadas con el famoso &#8220;lorem ipsum&#8221;. El test consiste en insertar [...]


Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/' rel='bookmark' title='Más bases de datos ligeras'>Más bases de datos ligeras</a></li>
<li><a href='http://softinspain.com/desarrollo/minipost-excelente-articulo-sobre-escalabilidad/' rel='bookmark' title='Minipost: Excelente artículo sobre escalabilidad'>Minipost: Excelente artículo sobre escalabilidad</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[	<p>Me he descargado el código fuente de Redis y lo he compilado, sin problemas. He ejecutado el benchmark que lleva en el código y me ha dado los resultados esperados.</p>
	<p>Luego he preparado un test con PHP basado en una lista de 1000 frases generadas con el famoso &#8220;<a href="http://es.lipsum.com/">lorem ipsum</a>&#8221;. El test consiste en insertar 1.000.000 de entradas del tipo id1=texto, id2=texto&#8230;.id1000000=texto. Para comparar he hecho el mismo test contra MySQL.</p>
	<p>El equipo de pruebas es el portátil que tengo, un Dell Inspiron 6400 de hace un tiempo con un Core Duo a 1.7Gh con 1GB de RAM, corriendo Ubuntu 8.04.</p>
	<p>Los resultados no han sido satisfactorios: MySQL 1 minuto 30 segundos, Redis 1 minuto 20 segundos. Yo lo achaco a que el cliente PHP para Redis no está optimizado, tampoco se integra &#8220;dentro&#8221; de PHP como si lo hace el cliente MySQL, que se carga como un módulo.</p>
	<p>He dejado una nota en la página de <a href="http://code.google.com/p/redis/wiki/Benchmarks">Benchmarks</a> de Redis.</p>
	<p>Por si alguien le interesa, aqui dejo el código utilizado: <a href="http://softinspain.com/wp-content/uploads/2009/03/testredis.tar.gz">testredis.tar.gz</a> Si alguien encuentra algún fallo en el código le agradecería que me lo indicara.</p>
	<p><strong>Actualización</strong>: Mientras he escrito este post, <a href="http://antirez.com/">antirez</a>, el creador de Redis, me ha respondido en el wiki. <img src='http://softinspain.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

 

<p>Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/' rel='bookmark' title='Más bases de datos ligeras'>Más bases de datos ligeras</a></li>
<li><a href='http://softinspain.com/desarrollo/minipost-excelente-articulo-sobre-escalabilidad/' rel='bookmark' title='Minipost: Excelente artículo sobre escalabilidad'>Minipost: Excelente artículo sobre escalabilidad</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://softinspain.com/desarrollo/probando-redis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Más bases de datos ligeras</title>
		<link>http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/</link>
		<comments>http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 18:57:19 +0000</pubDate>
		<dc:creator>Jose Alberto</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[clave-valor]]></category>
		<category><![CDATA[key-value]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://softinspain.com/?p=468</guid>
		<description><![CDATA[Siguiendo con el tema del otro día (Bases de datos clave-valor) hoy he descubierto otras dos bases de datos ágiles: Drizzle y Redis. Drizzle viene a ser MySQL pero aligerado, muy orientado a lo que se necesita en un servidor web. Pero parece que su desarrollo aún está verde. Redis, que he descubierto gracias a [...]


Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/bases-de-datos-clave-valor/' rel='bookmark' title='Bases de datos clave-valor'>Bases de datos clave-valor</a></li>
<li><a href='http://softinspain.com/desarrollo/probando-redis/' rel='bookmark' title='Probando Redis'>Probando Redis</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[	<p>Siguiendo con el tema del otro día (<a href="http://softinspain.com/desarrollo/bases-de-datos-clave-valor/">Bases de datos clave-valor</a>) hoy he descubierto otras dos bases de datos ágiles: Drizzle y Redis.</p>
	<p><a href="https://launchpad.net/drizzle"><img class="aligncenter size-full wp-image-469" title="drizzle" src="http://softinspain.com/wp-content/uploads/2009/03/drizzle.png" alt="drizzle" width="108" height="108" />Drizzle</a> viene a ser MySQL pero aligerado, muy orientado a lo que se necesita en un servidor web. Pero parece que su desarrollo aún está verde.</p>
	<p><a href="http://code.google.com/p/redis/"><img class="aligncenter size-full wp-image-470" title="redis" src="http://softinspain.com/wp-content/uploads/2009/03/redis.png" alt="redis" width="108" height="82" /></a></p>
	<p><a href="http://code.google.com/p/redis/">Redis</a>, que he descubierto gracias a <a href="http://carrero.es/potencia-sin-limites-para-tus-bases-de-datos-con-redis/3021">carrero</a>, es una base de datos clave-valor, que tiene muy buena pinta y que quiero probar pronto. Hay un <a href="http://code.google.com/p/redis/wiki/TwitterAlikeExample">ejemplo</a> desarrollado, y muy bien explicado, de un clon de Twitter.</p>

 

<p>Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/bases-de-datos-clave-valor/' rel='bookmark' title='Bases de datos clave-valor'>Bases de datos clave-valor</a></li>
<li><a href='http://softinspain.com/desarrollo/probando-redis/' rel='bookmark' title='Probando Redis'>Probando Redis</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bases de datos clave-valor</title>
		<link>http://softinspain.com/desarrollo/bases-de-datos-clave-valor/</link>
		<comments>http://softinspain.com/desarrollo/bases-de-datos-clave-valor/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 19:43:52 +0000</pubDate>
		<dc:creator>Jose Alberto</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[bigtable]]></category>
		<category><![CDATA[clave-valor]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[simpledb]]></category>

		<guid isPermaLink="false">http://softinspain.com/?p=412</guid>
		<description><![CDATA[He estado leyendo sobre las bases de datos de clave-valor (key-value) como SimpleDB de Amazon, o BigTable de Google, además de otros como CouchDB, Tokyo Cabinet o LightCloud, porque prometen un rendimiento excelente para volumenes de datos muy grandes (pero que muy grandes), a cambio, eso si, de ser muy simples y renunciar a funcionalidades [...]


Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/' rel='bookmark' title='Más bases de datos ligeras'>Más bases de datos ligeras</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[	<p>He estado leyendo sobre las bases de datos de clave-valor (key-value) como <a href="http://aws.amazon.com/simpledb/">SimpleDB</a> de Amazon, o <a href="http://labs.google.com/papers/bigtable.html">BigTable</a> de Google, además de otros como <a href="http://couchdb.apache.org/">CouchDB,</a> <a href="http://tokyocabinet.sourceforge.net">Tokyo Cabinet</a> o <a href="http://opensource.plurk.com/LightCloud/">LightCloud</a>, porque prometen un rendimiento excelente para volumenes de datos muy grandes (pero que muy grandes), a cambio, eso si, de ser muy simples y renunciar a funcionalidades que tenemos en otros sistemas como verificación intrinseca de la integridad de datos, referencias externas (<em>foreign keys</em>) o <em>triggers</em>.</p>
	<p>Todo se deja a la aplicación, siendo la base de datos, simplemente donde guardamos los datos. No se verifican integridades, no se comprueban referencias cruzadas, todo eso se ha de implementar a nivel de aplicación, de código cliente.</p>
	<p>En un sistema relacional tenemos bases de datos y dentro de cada base de datos tenemos tablas formadas por filas y columnas. En un sistema clave-valor tenemos contenedores, también se les llama <em>cabinets</em>, en cada contenedor podemos tener tantas parejas de clave-valor como queramos, hay sistemas que permiten tener claves duplicadas y hay que no, o que se puede indicar que no queremos que se dupliquen. En cada contenedor podemos tener datos de la misma naturaleza (por ejemplo productos, pedidos, clientes, etc) o totalmente diferente (podríamos tener un contenedor por cliente), eso depende de nosotros, de la aplicación.</p>
	<p>A cada clave se asocia un valor (clave=valor), por ejemplo: &#8220;Nombre=Jose&#8221;, &#8220;Apellido=Hernandis&#8221;. Pero claro, eso no tiene mucho potencial, si queremos añadir otra persona, ¿cómo lo hacemos? El truco está en la &#8220;clave&#8221;.</p>
	<p>Vamos a suponer que estamos montando un sistema que requiere de identificación de usuarios, vamos a suponer que tenemos un contenedor para los usuarios y otro para los datos de estos (nombre completo, email, fecha nacimiento, etc.). Podríamos hacer que en el primer contenedor la clave fuera el nombre de usuario y el valor la contraseña, así (esto es una versión simplificada):</p>
	<p><strong>[users.cab]</strong><br />
<p style="padding-left: 30px;">pepe=patata<br />
juan=minino<br />
mario=ferrari</p>
	<p>En otro contenedor podríamos tener los datos de los usuarios:<br />
<strong></strong></p>
	<p><strong>[user_data.cab]</strong><br />
<p style="padding-left: 30px;">pepe_nombre=Jose Alberto<br />
pepe_email=ja@ja.com<br />
pepe_fecha=19700315<br />
juan_nombre=Juan Antoni<br />
juan_email=juan@hatmail.com<br />
juan_fecha=19800218<br />
mario_nombre=Mario Garcia<br />
mario_email=mgarcia@micorreo.es</p>
	<p><em>Esto es una versión simplificada, hay bases de datos clave-valor más sofisticadas, llamadas orientadas a documentos, como CouchDB. Otras permiten estructuras más complejas como almacenar arrays asociados a una clave. Incluso &#8220;simular&#8221; tablas con sus columnas.<br />
</em></p>
	<p>Como se ve la clave se forma por el usuario+dato (<em>usuario_dato</em>), de esa forma, al loguearse un usuario podemos preguntar al primer contenedor que nos devuelva la contraseña del usuario, si no devuelve nada el usuario no existe, si devuelve algo verificamos la contraseña y si es correcta podemos recuperar el resto de valores.</p>
	<p>Una alternativa sería en el contenedor user.cab poner el usuario y un ID único, tipo un GUID y utilizar ese GUID para poner la clave a los valores del segundo contenedor.</p>
	<p>Hay sistemas que permiten utilizar <em>comodines</em> a la hora de recuperar valores, por ejemplo se puede pedir que devuelva una lista con las claves que coincidan con <strong>juan_*</strong> de forma que recuperemos juan_nombre, juan_email y juan_fecha. Como se puede ver, del usuario mario no tenemos fecha de nacimiento, si dicho usuario no la ha proporcionado, no tenemos porque almacenarla.</p>
	<p>En algunos sistemas los valores se guardan siempre como cadenas, en otros los valores están tipificados: cadena, entero, flotante, fecha, etc.</p>
	<p>Las bases de datos clave-valor no están pensadas para el análisis de datos, sino para el almacenamiento puro y duro. Si necesitamos analizar los datos almacenados así, mejor que los pasemos primero a un sistema relacional o, mejor todavía, a un OLAP.</p>
	<p>Esto mismo se puede implementar en una base de datos relacional, de hecho es algo que se viene haciendo desde hace años, básicamente para guardar configuraciones. Se trata de utilizar un diseño <em>vertical</em> en lugar de <em>horizontal</em>, me explico:</p>
	<p><strong>Horizontal:</strong></p>
	<p></p>
<table class="wptable rowstyle-alt" id="wptable-2"  cellspacing="1">
	<thead>
	<tr>
		<th class="sortable" style="width:30px" align="center">ID</th>
		<th class="sortable" style="width:60px" align="left">Usuario</th>
		<th class="sortable" style="width:100px" align="left">Nombre</th>
		<th class="sortable" style="width:150px" align="left">EMail</th>
		<th class="sortable" style="width:60px" align="left">Fecha</th>
	</tr>
	</thead>
	<tr>
		<td style="width:30px" align="center">1</td>
		<td style="width:60px" align="left">pepe</td>
		<td style="width:100px" align="left">Jose Alberto</td>
		<td style="width:150px" align="left">ja@ja.com</td>
		<td style="width:60px" align="left">02/04/1971</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">2</td>
		<td style="width:60px" align="left">juan</td>
		<td style="width:100px" align="left">Juan Antonio</td>
		<td style="width:150px" align="left">juan@hatmail.com</td>
		<td style="width:60px" align="left">18/02/1982</td>
	</tr>
	<tr>
		<td style="width:30px" align="center">3</td>
		<td style="width:60px" align="left">mario</td>
		<td style="width:100px" align="left">Mario Garcia</td>
		<td style="width:150px" align="left">mgarcia@micorreo.es</td>
		<td style="width:60px" align="left">null</td>
	</tr>
</table><p>
</p>
	<p><strong>Vertical:</strong></p>
	<p>Se requieren dos tablas para esta variante, al igual que se requerían dos contenedores para el sistema clave-valor.</p>
	<p>Usuarios<br />
</p>
<table class="wptable rowstyle-alt" id="wptable-3"  cellspacing="1">
	<thead>
	<tr>
		<th class="sortable" style="width:30px" align="center">ID</th>
		<th class="sortable" style="width:30px" align="center">Usuario</th>
	</tr>
	</thead>
	<tr>
		<td style="width:30px" align="center">1</td>
		<td style="width:30px" align="center">pepe</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">2</td>
		<td style="width:30px" align="center">juan</td>
	</tr>
	<tr>
		<td style="width:30px" align="center">3</td>
		<td style="width:30px" align="center">mario</td>
	</tr>
</table><p>
</p>
	<p>DatosUsuarios<br />
</p>
<table class="wptable rowstyle-alt" id="wptable-4"  cellspacing="1">
	<thead>
	<tr>
		<th class="sortable" style="width:30px" align="center">IDusuario</th>
		<th class="sortable" style="width:60px" align="left">Clave</th>
		<th class="sortable" style="width:60px" align="left">Valor</th>
	</tr>
	</thead>
	<tr>
		<td style="width:30px" align="center">1</td>
		<td style="width:60px" align="left">nombre</td>
		<td style="width:60px" align="left">Jose Alberto</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">1</td>
		<td style="width:60px" align="left">email</td>
		<td style="width:60px" align="left">ja@ja.com</td>
	</tr>
	<tr>
		<td style="width:30px" align="center">1</td>
		<td style="width:60px" align="left">fecha</td>
		<td style="width:60px" align="left">19710402</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">2</td>
		<td style="width:60px" align="left">nombre</td>
		<td style="width:60px" align="left">Juan Antonio</td>
	</tr>
	<tr>
		<td style="width:30px" align="center">2</td>
		<td style="width:60px" align="left">email</td>
		<td style="width:60px" align="left">juan@hatmail.com</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">2</td>
		<td style="width:60px" align="left">fecha</td>
		<td style="width:60px" align="left">19820218</td>
	</tr>
	<tr>
		<td style="width:30px" align="center">3</td>
		<td style="width:60px" align="left">nombre</td>
		<td style="width:60px" align="left">Mario Garcia</td>
	</tr>
	<tr class="alt">
		<td style="width:30px" align="center">3</td>
		<td style="width:60px" align="left">email</td>
		<td style="width:60px" align="left">mgarcia@micorreo.es</td>
	</tr>
</table><p>
</p>
	<p>Cada uno de los modelos tiene su pros y sus contras: El horizontal es más sencillo de entender, es más habitual, pero más dificil si crece o se requieren cambios de estructura. El vertical se complica un poco, requiere de unas conversiones de tipos de datos puesto que todo se almacena como cadena o no es sencillo hacer consultas que devuelvan los datos en formato tabla, pero a cambio tenemos unas ventajas como que no es preciso que todos los usuarios tengan los mismos datos, que es inmediato añadir o eliminar datos sin necesidad de reestructurar la tabla, o que cada tabla podría estar en un servidor diferente.</p>
	<p>Una lista de los diversos sistemas de bases de datos clave-valor: <a href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/">Anti-RDBMS</a><a href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/"><br />
</a></p>

 

<p>Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/mas-bases-de-datos-ligeras/' rel='bookmark' title='Más bases de datos ligeras'>Más bases de datos ligeras</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://softinspain.com/desarrollo/bases-de-datos-clave-valor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Minipost: Excelente artículo sobre escalabilidad</title>
		<link>http://softinspain.com/desarrollo/minipost-excelente-articulo-sobre-escalabilidad/</link>
		<comments>http://softinspain.com/desarrollo/minipost-excelente-articulo-sobre-escalabilidad/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:28:12 +0000</pubDate>
		<dc:creator>Jose Alberto</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[escalabilidad]]></category>
		<category><![CDATA[minipost]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://softinspain.com/?p=398</guid>
		<description><![CDATA[Si estás interesado, como yo lo estoy en estos momentos, en todo lo relacionado con la escalabilidad de aplicaciones web te recomiendo el blog HighScalability A través de ese blog he encontrado un excelente artículo que trata varios temas de como escalar una aplicación típica web basada en LAMP: Database sharding at Netlog Posts relacionados:Minipost: [...]


Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/minipost-velocidad-vs-calidad/' rel='bookmark' title='Minipost: Velocidad vs Calidad'>Minipost: Velocidad vs Calidad</a></li>
<li><a href='http://softinspain.com/desarrollo/minipost-json-vs-xml/' rel='bookmark' title='Minipost: JSON vs. XML'>Minipost: JSON vs. XML</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[	<p>Si estás interesado, como yo lo estoy en estos momentos, en todo lo relacionado con la escalabilidad de aplicaciones web te recomiendo el blog <a href="http://highscalability.com">HighScalability</a></p>
	<p>A través de ese blog he encontrado un excelente artículo que trata varios temas de como escalar una aplicación típica web basada en LAMP: <a href="http://www.jurriaanpersyn.com/archives/2009/02/12/database-sharding-at-netlog-with-mysql-and-php/">Database sharding at Netlog</a></p>

 

<p>Posts relacionados:<ol><li><a href='http://softinspain.com/desarrollo/minipost-velocidad-vs-calidad/' rel='bookmark' title='Minipost: Velocidad vs Calidad'>Minipost: Velocidad vs Calidad</a></li>
<li><a href='http://softinspain.com/desarrollo/minipost-json-vs-xml/' rel='bookmark' title='Minipost: JSON vs. XML'>Minipost: JSON vs. XML</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://softinspain.com/desarrollo/minipost-excelente-articulo-sobre-escalabilidad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

