<?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>Mundo Geek &#187; particiones</title>
	<atom:link href="http://mundogeek.net/etiqueta/particiones/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Particiones en MySQL</title>
		<link>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/</link>
		<comments>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 19:53:12 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[particiones]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=7714</guid>
		<description><![CDATA[Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comando EXPLAIN, el registro de consultas lentas, &#8230; estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comando <code>EXPLAIN</code>, el registro de consultas lentas, &#8230; estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos conocida, aunque se introdujo en la versión 5.1 de <a href="http://mundogeek.net/archivos/2009/02/16/mysql/" title="Tutorial rápido de MySQL">MySQL</a>, son las particiones.<span id="more-7714"></span></p>
<p>En el hospital en que trabajo la mayor tabla con la que tenemos que lidiar es la que almacena todos y cada uno de los contratos de todos los trabajadores que alguna pasaron por el hospital desde que se fundó en los años 50. Esto supone <em>sólo</em> un par de cientos de miles de tuplas, lo cuál no debería dar muchos dolores de cabeza con una base de datos bien optimizada, consultas razonables, y un hardware decente. Sin embargo, hay personas que tienen que tratar con cantidades de datos realmente obscenas, que multiplican estos números por 10 veces 10.</p>
<p>Una solución que nos puede venir a la cabeza, sobre todo si la mayor parte de la información se almacena a modo de histórico y no se accede a ella frecuentemente, es dividir la tabla en varias porciones. Podríamos mantener una tabla para el año en curso y otra para el resto de años, por ejemplo; o una para cada uno de los años; una por lustro; por década&#8230; dependiendo de cómo se trabaje con los datos.</p>
<p>El particionado es un concepto parecido, aunque automatizado, que puede ahorrarnos muchos quebraderos de cabeza. Consiste en dividir los datos en particiones más pequeñas (hasta 1024) procurando, porque de otra forma sería absurdo, que sólo haya que acceder a una partición a la hora de buscar una tupla.</p>
<p>Se puede particionar una tabla de 5 maneras diferentes:</p>
<ul>
<li>Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual</p>
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY RANGE(YEAR(fechaInicio)) (
	PARTITION partDecada50 VALUES LESS THAN (1960),
	PARTITION partDecada60 VALUES LESS THAN (1970),
	PARTITION partDecada70 VALUES LESS THAN (1980),
	PARTITION partDecada80 VALUES LESS THAN (1990),
	PARTITION partDecada90 VALUES LESS THAN (2000),
	PARTITION partDecada00 VALUES LESS THAN (2010),
	PARTITION partDecada10 VALUES LESS THAN MAXVALUE
);</pre>
</li>
<li>Por listas: para construir nuestras particiones especificamos listas de valores concretos.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY LIST(YEAR(fechaInicio)) (
	PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),
	PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),
	PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),
	PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),
	PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),
	PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009),
	PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019)
);</pre>
</li>
<li>Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY HASH(YEAR(fechaInicio))
PARTITIONS 7;</pre>
</li>
<li>Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY KEY()
PARTITIONS 7;</pre>
</li>
<li>Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones</li>
</ol>
<p>Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)</p>
<pre name="code" class="sql">EXPLAIN SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'</pre>
<table border="1" style="border-collapse:collapse">
<tr>
<th>select_type</th>
<th>table</th>
<th>type</th>
<th>key</th>
<th>rows</th>
<th>Extra</th>
</tr>
<tr>
<td>SIMPLE</td>
<td>contratos</td>
<td>ALL</td>
<td>
<td>239796</td>
<td>Using where</td>
</tr>
</table>
<p>Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)</p>
<pre name="code" class="sql">EXPLAIN PARTITIONS SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'</pre>
<table border="1" style="border-collapse:collapse">
<tr>
<th>select_type</th>
<th>table</th>
<th>partitions</th>
<th>type</th>
<th>key</th>
<th>rows</th>
<th>Extra</th>
</tr>
<tr>
<td>SIMPLE</td>
<td>contratos</td>
<td>partDecada50</td>
<td>ALL</td>
<td></td>
<td>8640</td>
<td>Using where</td>
</tr>
</table>
<p>Como véis, el número de tuplas que MySQL tiene que comprobar se ve disminunido en 2 órdenes de magnitud.</p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushSql.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh/flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Montar particiones en Ubuntu / Linux</title>
		<link>http://mundogeek.net/archivos/2008/04/27/montar-particiones-en-ubuntu-linux/</link>
		<comments>http://mundogeek.net/archivos/2008/04/27/montar-particiones-en-ubuntu-linux/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 09:11:47 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[montar]]></category>
		<category><![CDATA[particiones]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=1475</guid>
		<description><![CDATA[Gracias a Disk Manager montar particiones en Ubuntu / Linux es de lo más sencillo. No hay necesidad de editar fstab, basta iniciar la aplicación para que esta detecte las particiones no configuradas, y basta indicarle el directorio en el que queremos montar la partición para tenerla disponible en segundos. Además esta aplicación también permite [...]]]></description>
			<content:encoded><![CDATA[<p>Gracias a Disk Manager <strong>montar particiones en Ubuntu / Linux</strong> es de lo más sencillo. No hay necesidad de editar fstab, basta iniciar la aplicación para que esta detecte las particiones no configuradas, y basta indicarle el directorio en el que queremos montar la partición para tenerla disponible en segundos. Además esta aplicación también permite habilitar la escritura en particiones NTFS de forma sencilla <img src='http://mundogeek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://flomertens.free.fr/disk-manager/download.html" title="Montar particiones en Ubuntu / Linux">En su web</a> podéis encontrar un paquete deb para Feisty (que funciona perfectamente en Ubuntu Hardy Heron) además del código fuente.</p>
<p>Una vez instalada basta con ejecutar la aplicación con permisos de root para poder <strong>montar las particiones</strong> fácilmente.</p>
<p><img src="http://mundogeek.net/wp-content/montar-particiones-ubuntu.png" alt="Montar particiones en Ubuntu / Linux" title="Montar particiones en Ubuntu / Linux"/></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/04/27/montar-particiones-en-ubuntu-linux/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Disk manager, particiones en Linux fácilmente</title>
		<link>http://mundogeek.net/archivos/2007/05/09/disk-manager-particiones-en-linux-facilmente/</link>
		<comments>http://mundogeek.net/archivos/2007/05/09/disk-manager-particiones-en-linux-facilmente/#comments</comments>
		<pubDate>Wed, 09 May 2007 14:59:53 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[disco]]></category>
		<category><![CDATA[fstab]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[particiones]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/05/09/disk-manager-particiones-en-linux-facilmente/</guid>
		<description><![CDATA[Con Disk Manager todo lo relacionado con las particiones en Linux se simplifica extremadamente. Nada de tener que editar /etc/fstab, ahora podemos hacerlo todo de forma gráfica. Al iniciar, el programa busca cualquier partición que no haya sido configurada y las muestra para poder configurarlas de forma sencilla (manual o automáticamente). Permite activar ntfs-3g para [...]]]></description>
			<content:encoded><![CDATA[<p>Con <a href="http://flomertens.free.fr/disk-manager/index.html" title="Disk Manager, particiones Linux">Disk Manager</a> todo lo relacionado con las particiones en Linux se simplifica extremadamente. Nada de tener que editar /etc/fstab, ahora podemos hacerlo todo de forma gráfica.</p>
<p>Al iniciar, el programa busca cualquier partición que no haya sido configurada y las muestra para poder configurarlas de forma sencilla (manual o automáticamente). Permite activar ntfs-3g para la escritura en particiones NTFS (si está instalado), montar y desmontar particiones, agregar, borrar y editar particiones, ver información sobre las particiones&#8230; Y todos los cambios se guardan en un log.</p>
<p>Hay un paquete deb compilado para Ubuntu Feisty, así que su instalación es tan sencilla como descargarlo y hacer doble clic sobre él.</p>
<p><img src="http://mundogeek.net/wp-content/disk-manager.png" alt="Particiones Linux" title="Particiones Linux"/></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/05/09/disk-manager-particiones-en-linux-facilmente/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

