<?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>Bosque Viejo &#187; nosql</title>
	<atom:link href="http://bosqueviejo.net/tag/nosql/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Wed, 08 Feb 2012 10:14:54 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MongoDB: base de datos heterogénea</title>
		<link>http://bosqueviejo.net/2011/10/26/mongodb-base-datos-heterogenea/</link>
		<comments>http://bosqueviejo.net/2011/10/26/mongodb-base-datos-heterogenea/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 13:02:24 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=1026</guid>
		<description><![CDATA[ Hace tiempo que tenía pendiente dar una vuelta a las base de datos NoSQL para mostrar un poco el cómo funcionan, qué se puede hacer con ellas y cómo se comportan en ciertas situaciones específicas.
En este caso, aunque he hablado en otras ocasiones de CouchDB, de Cassandra, etc. me ha llamado la atención MongoDB. Esta base de datos realizada en C++, que cuenta, entre sus principales características con ser una base de datos de esquema libre, de alto rendimiento y orientada a documentos.
Coincide que ayer se liberó la versión 2.0.1, aunque no comentaré las nuevas mejoras, sino en sí, lo que hace MongoDB.
Acceso a Datos
El sistema de MongoDB es de esquema libre. Esto quiere decir que no requiere de una definición previa de datos, es decir, de hecho, los datos que se almacenan en sus colecciones son heterogéneos completamente.
Mientras que una base de datos relacional, con tablas, se estructura en base de datos, tablas, tuplas y campos, una base de datos, como MongoDB, se estructura en base de datos, colección y datos. Esto quiere decir que, dentro de una colección podría poner el dato:

{ a: 1, b: 2, c: 3 }

Y acto seguido, agregar otro dato a la colección [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/mongodb-post-150x150.jpg" alt="" title="mongodb" width="150" height="150" class="alignleft size-thumbnail wp-image-1027" /> Hace tiempo que tenía pendiente dar una vuelta a las base de datos NoSQL para mostrar un poco el cómo funcionan, qué se puede hacer con ellas y cómo se comportan en ciertas situaciones específicas.</p>
<p>En este caso, aunque he hablado en otras ocasiones de CouchDB, de Cassandra, etc. me ha llamado la atención MongoDB. Esta base de datos realizada en C++, que cuenta, entre sus principales características con ser una base de datos de esquema libre, de alto rendimiento y orientada a documentos.</p>
<p>Coincide que ayer se liberó la versión 2.0.1, aunque no comentaré las nuevas mejoras, sino en sí, lo que hace MongoDB.</p>
<h3>Acceso a Datos</h3>
<p>El sistema de MongoDB es de esquema libre. Esto quiere decir que no requiere de una definición previa de datos, es decir, de hecho, los datos que se almacenan en sus colecciones son heterogéneos completamente.</p>
<p>Mientras que una base de datos relacional, con tablas, se estructura en base de datos, tablas, tuplas y campos, una base de datos, como MongoDB, se estructura en base de datos, colección y datos. Esto quiere decir que, dentro de una colección podría poner el dato:</p>
<pre>
{ a: 1, b: 2, c: 3 }
</pre>
<p>Y acto seguido, agregar otro dato a la colección que sea:</p>
<pre>
{ a:2, [ {nombre: 'Manuel', apellido: 'Rubio', web: 'http://bosqueviejo.net'} ] }
</pre>
<p>Lo que sí es conveniente respetar, al menos, es el primer dato, ya que así las búsquedas son más fáciles, tanto para el sistema como para el usuario (o programador que realiza las consultas).</p>
<h3>NoSQL&#8230; vale, ¿entonces qué?</h3>
<p>En este tipo de base de datos, que son NoSQL, se emplean muchas técnicas para realizar búsquedas, pero MongoDB ha optado, quizás, por la más simple, que es integrar un lenguaje para esta tarea. Por lo que es posible realizar consultas estructurando la información que se pasa a nivel de criterio de búsqueda en&#8230;. ¡JavaScript!</p>
<p>Alguien me dijo que JavaScript era el lenguaje del futuro y, parece que al fin, ese futuro llegó, puesto que hay JavaScript en la programación web, como servidor a través de NodeJS, para el dialplan de FreeSwitch incluso&#8230; y ahora como lenguaje de consulta a una base de datos.</p>
<p>Entonces, vale, aceptamos JavaScript. Esto hace que las consultas se estructuren en <em>hash</em> (objetos realmente), de la siguiente forma:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">db.<span style="color: #660066;">cosas</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'a'</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>La estructura sigue el orden de <em>db</em> (como base de datos) y <em>cosas</em> (como colección de datos). Cada base de datos es un objeto que tiene como atributos sus colecciones y cada colección tiene a su vez una serie de métodos que le permiten realizar acciones con su conjunto de datos.</p>
<h3>Buscar o Encontrar</h3>
<p>Aunque hay otras base de datos NoSQL que solo sirven para encontrar (se debe de acceder por un identificador primario o el sistema debe de recorrer todo el conjunto de datos haciendo criba de los registros), MongoDB tiene mecanismos bastante buenos que le permiten realizar búsquedas bastante óptimas sobre el conjunto de datos heterogéneo. Algo tan simple como: la creación de índices.</p>
<p>Podemos crear índices sobre un campo que sepamos que seguramente estará en la mayoría del conjunto de datos (como por ejemplo <em>a</em> en el ejemplo expuesto) y así acelerar las búsquedas en este sentido.</p>
<p>Así mismo, el sistema en JavaScript permite realizar búsquedas basadas en rangos, o incluso con listas de inclusión de la siguiente forma:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">db.<span style="color: #660066;">cosas</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> $or<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">'a'</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">'a'</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
db.<span style="color: #660066;">cosas</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'a'</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> $gt<span style="color: #339933;">:</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> $lte<span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ambas consultas, por forma sacarían los dos registros que expusimos de ejemplo arriba, ya que en el primer caso, <em>a</em> puede tomar los valores 1 ó 2, y en el segundo caso <em>a</em> puede tomar valores mayores que cero y menores o iguales que uno.</p>
<p>Hay mucha, pero mucha, más información de esto en el <a href="http://www.mongodb.org/display/DOCS/Manual">manual oficial de MongoDB</a> en su propia página.</p>
<h3>Desde otros lenguajes</h3>
<p>El sistema, realmente es una joya para la gente que programe en JavaScript y se haya lanzado a cosas como <a href="http://nodejs.org">NodeJS</a> y <a href="http://javascriptmvc.com">JavaScript MVC</a>, ya que tendrán la posibilidad de realizar la búsqueda en JavaScript igualmente, y la integración con este lenguaje es la más clara de las que he podido ver (a nivel de envío de datos) ya que se estructura en base a la misma estructura que tiene JavaScript.</p>
<p>Por otro lado, hay implementaciones para <a href="http://us2.php.net/manual/en/mongo.tutorial.php">PHP</a> (la cual he podido ver más de cerca), C, C++, Erlang, Haskell, Java, JavaScript, .NET (C#, F#, PowerShell, etc), Perl, Python, Ruby y Scala, de los que da soporte directo MongoDB, y otros soportados por la comunidad como: ActionScript3, Clojure, ColdFusion, D, Delphi, Factor, Fantom, Go, Groovy, Lisp, Lua, MatLab, Objetive C, Prolog, R, Racket y Smalltalk.</p>
<h3>Conclusiones</h3>
<p>Me ha impresionado muy positivamente esta base de datos, las pruebas que he realizado, de cara a rendimiento y uso a través de objetos han sido muy fáciles y la integración muy clara y sencilla. Es una muy buena opción para la toma de datos heterogéneos, sin duda, pero también como base de datos escalable en el tiempo y de alto rendimiento.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/10/26/mongodb-base-datos-heterogenea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Riak: base de datos sin SPOF</title>
		<link>http://bosqueviejo.net/2011/09/14/riak-base-de-datos-sin-spof/</link>
		<comments>http://bosqueviejo.net/2011/09/14/riak-base-de-datos-sin-spof/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 11:07:41 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[basho]]></category>
		<category><![CDATA[dynamo]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[gossip protocol]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[riak]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=837</guid>
		<description><![CDATA[ Dando una vuelta por Internet, buscando información sobre base de datos NoSQL, topé con una (u otra) hecha en Erlang/OTP, al igual que CouchDB, pero que se basa en las mismas directrices para lo que fue desarrollado Erlang/OTP. Esta base de datos es Riak.
Actualización 16/09/2011: se me olvidó comentar que SPOF significa, según sus siglas, Single Point Of Failure, algo así como el punto único de fallo. Se refiere a cuando un sistema, aún teniendo bastante redundancia, tiene un punto único, en la red, en el software o en alguna parte del sistema que, fallando, deja sin servicio a todo.
Como la mayoría de software realizado por empresas y que se adentran en el software libre, Riak tiene dos versiones, una Open Source (que es completa y funcional) y otra Enterprise (que agrega commodities -o facilidades- tales como una interfaz de administración).
La base de datos Riak está basada en el documento escrito por Amazon sobre el sistema de almacenamiento Dynamo, el cual se basa en un sistema de alta disponibilidad, con estructura de almacenamiento del par clave-valor y distribuido. Este documento ha sido seguido, además, por Cassandra (la base de datos de Facebook, liberada y acogida en el seno de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/riaklogo1-150x150.png" alt="" title="riaklogo" width="150" height="150" class="alignleft size-thumbnail wp-image-858" /> Dando una vuelta por Internet, buscando información sobre base de datos <a href="http://bosqueviejo.net/2010/05/04/nosql/">NoSQL</a>, topé con una (u otra) hecha en <a href="http://bosqueviejo.net/2008/10/08/erlang-concurrente-distribuido-y-en-tiempo-real/">Erlang/OTP</a>, al igual que <a href="http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/">CouchDB</a>, pero que se basa en las mismas directrices para lo que fue desarrollado Erlang/OTP. Esta base de datos es <a href="http://wiki.basho.com/Riak.html">Riak</a>.</p>
<p><strong>Actualización 16/09/2011</strong>: se me olvidó comentar que <a href="http://es.wikipedia.org/wiki/Single_point_of_failure">SPOF</a> significa, según sus siglas, <em>Single Point Of Failure</em>, algo así como el punto único de fallo. Se refiere a cuando un sistema, aún teniendo bastante redundancia, tiene un punto único, en la red, en el software o en alguna parte del sistema que, fallando, deja sin servicio a todo.</p>
<p>Como la mayoría de software realizado por empresas y que se adentran en el software libre, Riak tiene dos versiones, una Open Source (que es completa y funcional) y otra Enterprise (que agrega <em>commodities</em> -o facilidades- tales como una interfaz de administración).</p>
<p>La base de datos Riak está basada en el documento escrito por Amazon sobre el sistema de almacenamiento <a href="http://en.wikipedia.org/wiki/Dynamo_(storage_system)">Dynamo</a>, el cual se basa en un sistema de alta disponibilidad, con estructura de almacenamiento del par clave-valor y distribuido. Este documento ha sido seguido, además, por <a href="http://cassandra.apache.org/">Cassandra</a> (la base de datos de Facebook, liberada y acogida en el seno de la Fundación Apache, y que ha sido implementada desde entonces por Digg, Twitter, Reddit, Rackspace, etc.) y por <a href="http://project-voldemort.com/">Voldemort</a> (la base de datos de LinkedIn).</p>
<h3>Características principales</h3>
<p>Riak, además de seguir las bases de Dynamo, ha agregado otras características propias a la lista, quedando (visto en su <a href="http://www.basho.com/products_architecture.php">página web oficial</a>) la siguiente lista de características a destacar:</p>
<ul>
<li><strong>Escalabilidad</strong>: la escalabilidad con Riak es lineal, predecible y de coste efectivo. Agregar nuevas máquinas no significa tener una avalancha de de peticiones que ponga en peligro la efectividad del sistema. Se pueden ir agregando o eliminando máquinas sin mayor problema, y sin que suponga una carga excesiva para el sistema base.</li>
<li><strong>Tolerancia a fallos</strong>: el cluster soporta o admite fallos en nodos aislados, o incluso en partes del cluster, está preparado para no perder datos ante este tipo de fallos. El sistema ha sido diseñado con fallos de máquinas e interrupciones de servicio de red como norma, no como excepción.</li>
<li><strong>Alta disponibilidad</strong>: para alta disponibilidad el sistema debe de estar disponible, no solo para lecturas, sino también para escrituras. La arquitectura de share-nothing (nada compartido) hace que cada nodo en el cluster esté habilitado para realizar lecturas y escrituras, por lo que, la alta disponibilidad está garantizada.</li>
<li><strong>Replicación</strong>: dependiendo de las necesidades, Riak se puede configurar para replicar entre múltiples clusters iguales o diseñar uno o más clusters como solo-lectura o backup. Cada nodo en el cluster puede responder a las peticiones de lecutra/escritura, y el evento de replicación asegura que todos los clusters sean actualizados. Los algoritmos se ejecutan en cada nodo asegurando la consistencia de datos.</li>
</ul>
<p>En base al teorema CAP del Dr. Eric Brewer, las tres propiedades deseadas de un sistema distribuido son: consistencia, disponibilidad y partición (tolerancia a fallos). El teorema establece que puedes solo puedes tener dos de las tres propiedades en cada momento. Riak se enfoca en Disponibilidad y Partición. Esta elección pone a Riak en el campo de la consistencia eventual. Sin embargo, la ventana para <em>consistencia eventual</em> es en términos de milisegundos, lo que es suficiente para la mayoría de aplicaciones.</p>
<h3>¿Cómo funciona?</h3>
<p>No me quiero extender mucho, ya que esta información está disponible (aunque en inglés) en la propia web de Riak, en <a href="http://wiki.basho.com/Concepts.html">Concepts</a>, así que resumiré un poco.</p>
<p>El <strong>almacén de datos</strong> se realiza en base a el par clave-valor, es lo que podríamos llamar una base de datos hash. No obstante, la clave se compone de <em>bucket</em> y <em>key</em>, que son como en Erlang el módulo y la función, o en Java el paquete y la clase. El conjunto bucket/key es la unidad de organización única que puede emplearse.</p>
<p>El sistema admite también el uso de <strong>enlaces</strong> (links). Esto quiere decir que el contenido de un bucket/key, puede ser un contenido o un enlace a otro bucket/key que tenga su propio contenido. Algo así como el enlace simbólico en los sistemas de ficheros de Unix/Linux/BSD/&#8230;</p>
<p>Además, el contenido, puede ir estructurado en forma de <strong>metadatos</strong>, es decir, como las cabeceras de los mensajes HTTP, para disponer de arrays asociativos (hash) dentro del contenido.</p>
<p>Uso de diferentes <em>backends</em>. En la versión 0.12, Bitcask se estableció como backend para Riak, pero hay más, aquí ponemos un listado de los disponibles:</p>
<ul>
<li><strong>Bitcask</strong>: simple pero potente almacenaje de pares clave-valor. Es de baja latencia y alto rendimiento.</li>
<li><strong>DETS / ETS</strong>: tablas incorporadas en Erlang para el almacenamiento de información.</li>
<li><strong>Erlang Balanced Trees (gb_trees)</strong>: sistema de árbol balanceado. Rápido para leer, pero algo lento para escribir.</li>
<li><strong>Innostore</strong>: basado en el engine InnoDB de MySQL. Debido a restricciones de licencia, se proporciona por separado.</li>
</ul>
<p>Cada cluster que se configura de Riak, consta de los siguientes elementos:</p>
<ul>
<li><strong>Nodos</strong>: nodos físicos, o máquinas, de las que se compone el cluster.</li>
<li><strong>Nodos Virtuales</strong>: nodos virtuales (o vnodes) que corren en cada máquina. Cada máquina física puede contener uno o varios nodos virtuales.</li>
<li><strong>Particiones</strong>: cada cluster Riak tiene un entero de 160-bits dividido en particiones ecuánimes. Cada vnode reclamará una partición del anillo.</li>
</ul>
<p>Cada nodo en el cluster es responsable del 1/(número total de nodos físicos) del anillo. Puedes determinar el número de vnodes en cada nodo calculando el (número de particiones)/(número de nodos). Por ejemplo, un anillo con 32 particiones, compuesto por cuatro nodos físicos, tendrá aproximadamente ocho vnodos por nodo. Esta configuración es representada por el siguiente diagrama:</p>
<p><a href="http://bosqueviejo.net/wp-content/uploads/riak-ring.png"><img src="http://bosqueviejo.net/wp-content/uploads/riak-ring-300x205.png" alt="" title="riak-ring" width="300" height="205" class="aligncenter size-medium wp-image-866" /></a></p>
<p>Riak está diseñado para ser un sistema distribuido, cuantos más nodos haya en el sistema, más rápido funcionará. </p>
<p>No hay <strong>nodo maestro</strong>, todos los nodos en Riak son iguales. Cada nodo es completamente capaz de servir cualquier petición de cliente. Esto es posible debido a la forma en la que Riak usa la consistencia de hash para distribuir datos a través del cluster, que se realiza a través de un <a href="http://en.wikipedia.org/wiki/Gossip_protocol">gossip protocol</a>.</p>
<h3>Sobre la replicación</h3>
<p>Riak controla tantas réplicas como datos son mantenidos a través de una configuración llamada <em>n-valor</em>. Este valor tiene una configuración por defecto en cada nodo pero puede ser sobreescrito por cada bucket. Los objetos de Riak heredan el n-valor de su bucket padre. Todos los nodos en el mismo cluster deben de acordar y usar el mismo n-valor.</p>
<p>Por ejemplo, aquí hay una representación de que sucede cuando n-valor es 3 (esta es la configuración por defecto). Cuando almacenas el dato en el bucket con un n-valor de tres, el dato se replicará a tres particiones separadas del anillo.</p>
<p><a href="http://bosqueviejo.net/wp-content/uploads/riak-data-distribution.png"><img src="http://bosqueviejo.net/wp-content/uploads/riak-data-distribution-300x157.png" alt="" title="riak-data-distribution" width="300" height="157" class="aligncenter size-medium wp-image-870" /></a></p>
<h3>Y cuando un nodo falla o se agrega otro nodo, ¿qué sucede?</h3>
<p>Riak usa una técnica llamada <strong>hinted handoff</strong>, para compensar el cluster en el momento que un nodo falla. Los vecinos del nodo fallido tomarán relevo y realizarán el trabajo de ese nodo permitiendo al cluster trabajar de forma normal. Esto puede considerarse una forma de auto-curación.</p>
<p>Si se agrega un nodo nuevo, en cambio, se rebalancean los datos.</p>
<h3>Algunas pegas&#8230; siempre las hay</h3>
<p>Primero, los buckets que usan un conjunto de propiedades no estandar forzarán a Riak a enviar vía gossip más datos a través del cluster. Los datos adicionales pueden ralentizar el proceso. Segundo, algunos backends, como Innostore, almacenan cada bucket como una entidad separada. Esto puede causar que nos quedemos sin recursos tales como manejadores de ficheros. Estas restricciones de recursos pueden no impactar al rendimiento, pero representarán otro límite en el máximo número de buckets a gestionar.</p>
<h3>Conclusiones</h3>
<p>A nivel teórico, todo bien, parece. Habrá que realizar un banco de pruebas y ver qué tal va el sistema. De momento, me he quedado sin tiempo (del que había planificado) para escribir este artículo, por lo que, dejo las pruebas para la siguiente parte&#8230; que entraremos de lleno en la práctica.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/09/14/riak-base-de-datos-sin-spof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL: sistemas de almacenamiento en lugar de bases de datos</title>
		<link>http://bosqueviejo.net/2010/05/04/nosql/</link>
		<comments>http://bosqueviejo.net/2010/05/04/nosql/#comments</comments>
		<pubDate>Tue, 04 May 2010 13:29:18 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[base de datos]]></category>
		<category><![CDATA[bigtable]]></category>
		<category><![CDATA[hypertable]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=433</guid>
		<description><![CDATA[Hace poco me topé con una definición que me causó un poco de desconcierto, no llegaba a entender bien el porqué había muchas empresas y profesionales que comenzaban a usar el NoSQL.
Leyendo el blog de dos ideas con referencia a un artículo que publicaron llamado NoSQL: el movimiento en contra de las bases de datos, se comenta una conferencia en la que grandes profesionales del sector de los sistemas, con necesidades de escalabilidad y alta capacidad de almacenaje, mencionaban sus soluciones NoSQL.
Entre ellos, representantes de empresas como Google, Amazon, Facebook, Twitter, LinkedIn, &#8230; pusieron en conocimiento de todos los asistentes sus soluciones ya desarrolladas y en funcionamiento para suplir las carencias que las bases de datos tradicionales no podían cubrir.
Las ventajas de NoSQL
Las ventajas de estos sistemas de almacenamiento (hay muchos integrantes de este movimiento que consideran una aberración llamarlos bases de datos) son las siguientes:

Pueden manejar enormes cantidades de datos: esto es debido a su propia estructura distribuida. Por ejemplo, HyperTable, una implementación de código abierto basada en BigTable (de Google), puede escribir 1000 millones de celdas de datos por día. Al igual que BigTable, con MapReduce, es capaz de manejar 20 petabytes diarios.
Se ejecutan en clusters de máquinas [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco me topé con una definición que me causó un poco de desconcierto, no llegaba a entender bien el porqué había muchas empresas y profesionales que comenzaban a usar el <a href="http://es.wikipedia.org/wiki/NoSQL">NoSQL</a>.</p>
<p>Leyendo el blog de <a href="http://www.dosideas.com">dos ideas</a> con referencia a un artículo que publicaron llamado <a href="http://www.dosideas.com/noticias/base-de-datos/657-nosql-el-movimiento-en-contra-de-las-bases-de-datos.html">NoSQL: el movimiento en contra de las bases de datos</a>, se comenta una conferencia en la que grandes profesionales del sector de los sistemas, con necesidades de escalabilidad y alta capacidad de almacenaje, mencionaban sus soluciones NoSQL.</p>
<p>Entre ellos, representantes de empresas como Google, Amazon, Facebook, Twitter, LinkedIn, &#8230; pusieron en conocimiento de todos los asistentes sus soluciones ya desarrolladas y en funcionamiento para suplir las carencias que las bases de datos tradicionales no podían cubrir.</p>
<h3>Las ventajas de NoSQL</h3>
<p>Las ventajas de estos sistemas de almacenamiento (hay muchos integrantes de este movimiento que consideran una aberración llamarlos <em>bases de datos</em>) son las siguientes:</p>
<ul>
<li><strong>Pueden manejar enormes cantidades de datos</strong>: esto es debido a su propia estructura distribuida. Por ejemplo, <a href="http://www.hypertable.org/">HyperTable</a>, una implementación de código abierto basada en <a href="http://labs.google.com/papers/bigtable.html">BigTable</a> (de Google), puede escribir 1000 millones de celdas de datos por día. Al igual que BigTable, con <a href="http://es.wikipedia.org/wiki/MapReduce">MapReduce</a>, es capaz de manejar 20 petabytes diarios.</li>
<li><strong>Se ejecutan en clusters de máquinas baratas</strong>: estos sistemas no requieren de apenas computación, en comparación con los sitemas gestores de base de datos tradicionales y basados en SQL, por lo que se pueden montar en máquinas de un coste más reducido y en mayor número, gracias a su nivel de escalabilidad.</li>
<li><strong>No generan cuellos de botella</strong>: el problema de fondo de los sistemas SQL, es que deben de transcribir cada sentencia para poder ser ejecutada y, cada sentencia compleja requiere, además de un nivel de ejecución más concreto para poderse llevar a cabo, por lo que constituye un punto de entrada común, único y conflictivo en base a rendimiento.</li>
<li><strong>Solo lo estrictamente necesario</strong>: son sistemas simples que no tienen un sistema de consulta complejo ni con capacidad declarativa para en una sola línea realizar una cantidad interna de operaciones desorbitada.</li>
</ul>
<h3>Las desventajas</h3>
<p>Bueno, y después de poner estos sistemas por las nubes&#8230; ahora toca pegar un poco los pies al suelo y darse de cara con la realidad. Quiero decir que, sí, hay desventajas, esto no es una panacea que sirva para paliar la necesidad del almacenaje de datos para todos los casos. En entornos de sistemas de información, en gestión de cuentas, y entornos en los que es preferible que los datos puedan tener algo más de inteligencia, en lugar de algo más de rapidez, estos sistemas no son aconsejables, ya que la única, pero mayor desventaja de estos es que <strong>no respetan <a href="http://es.wikipedia.org/wiki/ACID">ACID</a></strong>.</p>
<h3>Conclusiones</h3>
<p>En mi caso particular, trabajando en un área de sistemas relacionado con la telefonía en el que premia más la velocidad de tratamiento de datos, así como la capacidad para poder manejar gran cantidad de los mismos, y en el que la integridad referencial es algo que ni se usa ni se tiene en cuenta, sí, es una solución real, una forma de ahorrarse gran cantidad de código y dolores de cabeza con respecto a la escalabilidad y concurrencia de la información dentro de la plataforma tecnológica.</p>
<p>Ahora, si mi trabajo fuese desarrollar sistemas CRM, ERP o similares, que dependen más de la integridad de los datos, así como su relación y unas reglas de negocio establecidas y programadas, es innegable que las bases de datos con soporte SQL agregan mucho valor en este sentido.</p>
<p>Por lo que, podemos concluir en que, para programación de sistemas son un recurso muy útil y que puede facilitar y paliar problemáticas relacionadas con el almacenaje de información, así como el tratamiento in-situ de la misma con cara a la lógica del servicio, y por otro lado, si lo que premia más es tener una lógica de negocio bien definida, en ese caso, quizás es mejor seguir usando los sistemas SQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/05/04/nosql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

