<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0124-8170</journal-id>
<journal-title><![CDATA[Ciencia e Ingeniería Neogranadina]]></journal-title>
<abbrev-journal-title><![CDATA[Cienc. Ing. Neogranad.]]></abbrev-journal-title>
<issn>0124-8170</issn>
<publisher>
<publisher-name><![CDATA[Universidad Militar Nueva Granada]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0124-81702016000100007</article-id>
<article-id pub-id-type="doi">10.18359/rcin.1669</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[UNA COMPARACIÓN DE RENDIMIENTO ENTRE ORACLE Y MONGODB]]></article-title>
<article-title xml:lang="en"><![CDATA[A PERFORMANCE COMPARISON BETWEEN ORACLE AND MONGODB]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Moreno Arboleda]]></surname>
<given-names><![CDATA[Francisco Javier]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Quintero Rendón]]></surname>
<given-names><![CDATA[Juan Esteban]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rueda Vásquez]]></surname>
<given-names><![CDATA[Robinson]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>01</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>01</month>
<year>2016</year>
</pub-date>
<volume>26</volume>
<numero>1</numero>
<fpage>109</fpage>
<lpage>129</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0124-81702016000100007&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0124-81702016000100007&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0124-81702016000100007&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[La creciente y enorme cantidad de datos, del orden de exabytes, generados por las aplicaciones empresariales actuales han originado conjuntos masivos de estos. Los sistemas de gestión de bases de datos (SGBD) NoSQL han surgido como una alternativa a los SGBD relacionales para la gestión de estos conjuntos. Entre los principales SGBD NoSQL está MongoDB. En este artículo se compara el rendimiento entre MongoDB y Oracle (uno de los principales SGBD que soporta bases de datos relacionales). La comparación se basa en las operaciones de inserción, consulta, actualización y borrado (CRUD, por sus siglas en inglés). Aunque se requieren experimentos más exhaustivos y muchos otros tipos de pruebas, los resultados ofrecen un punto de partida para el análisis de rendimiento en estos SGBD.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[The growing and huge amount of data, of the order of exabytes, generated by current enterprise applications have originated massive datasets. Non-relational database management systems (DBMS) have emerged as an alternative to relational DBMS to manage these sets. Among the main non-relational DBMS is MongoDB. In this paper, we compare the performance between MongoDB and Oracle (one of the main DBMS that supports relational databases). The comparison is based on the CRUD operations (create, read, update, and delete). Although more exhaustive experiments and many other types of tests are required, the results give a starting point for the performance analysis of these DBMS.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Bases de datos]]></kwd>
<kwd lng="es"><![CDATA[bases de datos NoSQL]]></kwd>
<kwd lng="es"><![CDATA[MongoDB]]></kwd>
<kwd lng="es"><![CDATA[Oracle]]></kwd>
<kwd lng="es"><![CDATA[rendimiento]]></kwd>
<kwd lng="en"><![CDATA[Databases]]></kwd>
<kwd lng="en"><![CDATA[NoSQL databases]]></kwd>
<kwd lng="en"><![CDATA[MongoDB]]></kwd>
<kwd lng="en"><![CDATA[Oracle]]></kwd>
<kwd lng="en"><![CDATA[performance]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  <font size="2" face="Verdana">      <p>DOI: <a href="http://dx.doi.org/10.18359/rcin.1669" target="_blank">http://dx.doi.org/10.18359/rcin.1669</a></p>      <p align="center"><font size="4"><b>UNA COMPARACI&Oacute;N DE RENDIMIENTO ENTRE ORACLE Y MONGODB</b></font></p>      <p align="center"><font size="3"><b> A PERFORMANCE COMPARISON BETWEEN ORACLE AND MONGODB</b></font></p>      <p align="center">Francisco Javier Moreno Arboleda<sup>1</sup>, Juan Esteban Quintero Rend&oacute;n<sup>2</sup>, Robinson Rueda V&aacute;squez<sup>3</sup></p>      <p><sup>1</sup> Ing. Sistemas, Dr. en Ingenier&iacute;a de Sistemas, profesor asociado, Universidad Nacional de Colombia, Facultad de Minas, Medell&iacute;n, Colombia, <a href="mailto:fjmoreno@unaLedu.co">fjmoreno@unaLedu.co</a>    <br> <sup>2</sup> Ing. Sistemas, Universidad Nacional de Colombia, Facultad de Minas, Medell&iacute;n, Colombia, <a href="mailto:juequinterore@unal.edu.co">juequinterore@unal.edu.co</a>    <br> <sup>3</sup> Ing. Sistemas, Universidad Nacional de Colombia, Facultad de Minas, Medell&iacute;n, Colombia, <a href="mailto:rvrobinson@unal.edu.co">rvrobinson@unal.edu.co</a></p>      <p>Fecha de recepci&oacute;n: 24 de septiembre de 2015 Fecha de aprobaci&oacute;n: 15 de marzo de 2016</p>      <p>Referencia: F. J. Moreno Arboleda, J. E. Quintero Rend&oacute;n, R. Rueda V&aacute;squez. (2016). Una comparaci&oacute;n de rendimien-to entre Oracle y MongoDB. Ciencia e Ingenier&iacute;a Neogranadina, 26 (1), pp. 109-129, DOI: <a href="http://dx.doi.org/10.18359/rcin.1669" target="_blank">http://dx.doi.org/10.18359/rcin.1669</a>.</p> <hr>       ]]></body>
<body><![CDATA[<p align="center"><b>RESUMEN</b></p>      <p>La creciente y enorme cantidad de datos, del orden de exabytes, generados por las aplicaciones empresariales actuales han originado conjuntos masivos de estos. Los sistemas de gesti&oacute;n de bases de datos (SGBD) NoSQL han surgido como una alternativa a los SGBD relacionales para la gesti&oacute;n de estos conjuntos. Entre los principales SGBD NoSQL est&aacute; MongoDB. En este art&iacute;culo se compara el rendimiento entre MongoDB y Oracle (uno de los principales SGBD que soporta bases de datos relacionales). La comparaci&oacute;n se basa en las operaciones de inserci&oacute;n, consulta, actualizaci&oacute;n y borrado (CRUD, por sus siglas en ingl&eacute;s). Aunque se requieren experimentos m&aacute;s exhaustivos y muchos otros tipos de pruebas, los resultados ofrecen un punto de partida para el an&aacute;lisis de rendimiento en estos SGBD.</p>      <p><b>Palabras clave: </b>Bases de datos, bases de datos NoSQL, MongoDB, Oracle, rendimiento.</p> <hr>      <p align="center"><b>ABSTRACT</b></p>      <p>The growing and huge amount of data, of the order of exabytes, generated by current enterprise applications have originated massive datasets. Non-relational database management systems (DBMS) have emerged as an alternative to relational DBMS to manage these sets. Among the main non-relational DBMS is MongoDB. In this paper, we compare the performance between MongoDB and Oracle (one of the main DBMS that supports relational databases). The comparison is based on the CRUD operations (create, read, update, and delete). Although more exhaustive experiments and many other types of tests are required, the results give a starting point for the performance analysis of these DBMS.</p>      <p><b>Keywords: </b>Databases, NoSQL databases, MongoDB, Oracle, performance.</p> <hr>      <p align="center"><b>1. INTRODUCCI&Oacute;N</b></p>      <p>El t&eacute;rmino bases de datos (BD) no-relacionales se refiere a las BD que no satisfacen el modelo relacional. Esta denominaci&oacute;n puede llevar a malinterpretaciones, ya que sugiere que son BD (o para ser m&aacute;s precisos, sistemas de gesti&oacute;n de BD, SGBD) que carecen de las caracter&iacute;sticas disponibles en un SGBD relacional (cuyo lenguaje de gesti&oacute;n de datos es usualmente SQL); por ello se prefiere el nombre SGBD Not Only SQL (SGBD NoSQL) &#91;1&#93; para enfatizar que aunque estos SGBD carecen de algunas caracter&iacute;sticas propias de los SGBD relacionales, tambi&eacute;n suelen incluir caracter&iacute;sticas no disponibles en estos &uacute;ltimos.</p>      <p>Por ejemplo, la operaci&oacute;n relacional reuni&oacute;n <i>(join), </i>disponible en el lenguaje SQL, suele no estarlo en la mayor&iacute;a de los lenguajes de los SGBD NoSQL. Por otro lado, MapReduce (ver secci&oacute;n 4) es un paradigma de programaci&oacute;n que suele estar presente en algunos SGBD NoSQL y que no es propio del lenguaje SQL. Otras diferencias se indican adelante en esta secci&oacute;n.</p>      <p>Aunque actualmente este tipo de BD est&aacute; adquiriendo popularidad, el t&eacute;rmino no es nuevo. En 1998 Strozzi &#91;2&#93; emple&oacute; el t&eacute;rmino BD NoSQL para referirse a aquellas BD (SGBD) que no usaban el lenguaje SQL para la gesti&oacute;n de datos. En 2009 se retoma este t&eacute;rmino para referirse a las BD que comenzaron a surgir como una alternativa a las BD relacionales &#91;3&#93;. Las BD NoSQL han tomado relevancia recientemente debido al flujo creciente de datos en internet. Este crecimiento ha originado el t&eacute;rmino <i>Big Data </i>&#91;4&#93;. Aunque existen varias definiciones, <i>Big Data </i>se refiere a enormes vol&uacute;menes de datos (estructurados, semiestructurados y no-estructurados) del orden de exabytes (10<sup>18</sup> bytes) cuyo almacenamiento y an&aacute;lisis (e.g., an&aacute;lisis textual &#91;5&#93; de mensajes de correo, <i>tweets, </i>blogs) se puede hacer mediante BD especializadas, entre estas las BD NoSQL. Por ejemplo, hay sistemas que han generado exabytes de datos provenientes de sensores, con cientos de millones de datos espaciales, temporales y sociales &#91;6&#93;.</p>      ]]></body>
<body><![CDATA[<p>Las caracter&iacute;sticas principales de estas BD son: a) el esquema (estructura) de los datos no est&aacute; necesariamente predefinido, b) se permite que el valor de un atributo sea multivaluado (arreglo de valores), y c) suele haber redundancia de datos (debido a la poca normalizaci&oacute;n). Esto puede conllevar a que operaciones como la reuni&oacute;n sean innecesarias.</p>      <p>Las caracter&iacute;sticas a) y b) son las que diferencian este tipo de base de datos de las relacionales. Una relaci&oacute;n tiene dos componentes: un esquema predefinido, <i>i.e.,</i> un conjunto de parejas (nombre_atributo, tipo de datos) y un conjunto de filas que se apegan a dicho esquema. De esta forma, la caracter&iacute;stica a) viola este principio, ya que las filas de una misma colecci&oacute;n (el t&eacute;rmino equivalente en algunas BD NoSQL a una relaci&oacute;n) no se apegan necesariamente a un esquema predefinido. Por otro lado, una propiedad del modelo relacional establece que el valor de un atributo debe ser at&oacute;mico &#91;7&#93;; as&iacute; la caracter&iacute;stica b) viola este principio (sin embargo, algunos autores &#91;8&#93; sugieren que la noci&oacute;n de atomicidad es ambigua y elusiva y aceptan atributos multivaluados en el modelo relacional). N&oacute;tese que la caracter&iacute;stica c) no es un elemento diferenciador porque una BD relacional tambi&eacute;n podr&iacute;a tener redundancias <i>(e.g., </i>relaciones que solo est&aacute;n en primera forma normal), y aun as&iacute; seguir siendo una BD relacional.</p>      <p>Una manera de clasificar los SGBD NoSQL es la forma en que almacenan los datos &#91;9&#93;.</p>  <ul>    <li> Clave/valor: el almacenamiento se hace mediante estructuras con dos componentes: una clave y un valor. Ejemplo: {"nombre": "Juan"}, donde la clave es "nombre" y su valor es "Juan". Entre los SGBD NoSQL de este tipo est&aacute;n Redis,Dynamite! y Voldemort DB.</li>      <li> Columna: el almacenamiento se hace por columnas. Es decir, una fila de datos corresponde a un grupo de valores para un mismo atributo, e.g., como se muestra en la <a href="#t1">Tabla 1</a>. Por otro lado, en una BD relacional una fila de datos corresponde a un grupo de valores, uno para cada atributo del esquema, e.g., como se muestra en la <a href="#t2">Tabla 2</a>. Entre los SGBD NoSQL de este tipo est&aacute;n Apache Hbase, Cassandra y Hypertable.</li>      <p align="center"><a name="t1"><img src="img/revistas/cein/v26n1/v26n1a07t1.jpg"></a></p>     <p align="center"><a name="t2"><img src="img/revistas/cein/v26n1/v26n1a07t2.jpg"></a></p>      <li> Grafo: el almacenamiento se hace mediante grafos.   En  los  nodos  se almacenan entidades, las cuales se relacionan por medio de aristas. Ejemplo: ver <a href="#f1">Figura 1</a>. Entre los SGBD NoSQL de este tipo est&aacute;n Neo4j, OrientDB e InfiniteGraph.</li>      <p align="center"><a name="f1"><img src="img/revistas/cein/v26n1/v26n1a07f1.jpg"></a></p>      <li>Documento: el almacenamiento se hace en colecciones de documentos, <i>e.g., </i>los documentos JSON (JavaScript Object Notation) los cuales se explican en la Secci&oacute;n 2. Entre los SGBD NoSQL de este tipo est&aacute;n MongoDB y Apache CouchDB.</li>    ]]></body>
<body><![CDATA[</ul>      <p>En este art&iacute;culo se compara el rendimiento entre MongoDB (un SGBD NoSQL) y Oracle (un SGBD que soporta BD relacionales) para las operaciones CRUD &#91;10&#93; <i>(create, read, update y delete) </i>inserci&oacute;n, consulta, actualizaci&oacute;n y borrado sobre una sola relaci&oacute;n/colecci&oacute;n y para una operaci&oacute;n de consulta binaria, <i>i.e. </i>que involucra dos relaciones/colecciones, como la reuni&oacute;n. Se eligi&oacute; Oracle porque es uno de los tres principales SGBD relacionales en el mercado, junto con SQL Server y DB2 &#91;11&#93; (v&eacute;ase tambi&eacute;n la clasificaci&oacute;n que ofrece <a href="http://db-engines.com/en" target="_blank">http://db-engines.com/en</a>). Por otro lado, MongoDB es uno de los tres principales SGBD NoSQL junto con Cassandra y Hbase &#91;12&#93; (de nuevo, v&eacute;ase <a href="http://db-engines.com/en" target="_blank">http://db-engines.com/en</a>). Adem&aacute;s, se eligieron las operaciones CRUD porque son las principales para la gesti&oacute;n de datos en las aplicaciones de BD. En particular, la operaci&oacute;n de reuni&oacute;n <i>(join) </i>es la operaci&oacute;n binaria m&aacute;s frecuentemente usada en aplicaciones de BD &#91;13&#93;. Esta comparaci&oacute;n ofrece un punto de partida para los dise&ntilde;adores y desarrolladores a la hora de elegir un SGBD para una aplicaci&oacute;n. Aunque los resultados no se pueden generalizar, estos concuerdan con las ideas presentadas en &#91;14&#93;, donde se sugiere que entre los aspectos que inciden para esta elecci&oacute;n es determinar si la aplicaci&oacute;n es de lectura o de escritura intensiva <i>(read-heavy applications vs. write-heavy applications). </i>Adem&aacute;s, se considerar&aacute; si se debe dar prioridad al desempe&ntilde;o frente a las anomal&iacute;as potenciales en los datos (en MongoDB los controles de integridad son m&iacute;nimos, <i>e.g., </i>no hay controles de integridad referencial) y al cumplimiento de las propiedades de las transacciones (propiedades ACID: atomicidad, consistencia, aislamiento &#91;isolation&#93; y durabilidad), igualmente m&iacute;nimo en MongoDB.</p>      <p>El art&iacute;culo est&aacute; organizado as&iacute;: en la Secci&oacute;n 2 se presentan los elementos b&aacute;sicos de MongoDB, de su lenguaje de gesti&oacute;n de datos y se compara con SQL. En la Secci&oacute;n 3 se explica c&oacute;mo llevar a cabo la operaci&oacute;n de reuni&oacute;n en MongoDB mediante MapReduce. En la Secci&oacute;n 4 se presentan los experimentos y resultados. En la Secci&oacute;n 5 se muestran trabajos relacionados. En la Secci&oacute;n 6 se concluye el art&iacute;culo y se proponen trabajos futuros.</p>      <p><b>2. MongoDB, SU LENGUAJE Y SQL</b></p>      <p>MongoDB es un SGBD NoSQL de tipo documento, el cual usa documentos JSON &#91;15&#93;. JSON es un formato para el intercambio de datos similar a XML pero su estructura es m&aacute;s simple. Un ejemplo de un documento JSON es:</p>      <p align="center"><a name="img1"><img src="img/revistas/cein/v26n1/v26n1a07img1.jpg"></a></p>      <p>Un documento JSON est&aacute; encerrado entre llaves {}. En su interior hay parejas "clave": valor, separadas por comas, donde valor puede ser un n&uacute;mero, una cadena de caracteres, un documento JSON o un arreglo de valores (que incluso pueden ser documentos JSON). Si el valor es un arreglo, este se encierra entre corchetes &#91;&#93; y en su interior se colocan sus valores separados por comas.</p>       <p>En MongoDB los documentos JSON se agrupan en una colecci&oacute;n. Una colecci&oacute;n es el equivalente a una relaci&oacute;n en un SGBD relacional. Los documentos JSON de una misma colecci&oacute;n no se apegan necesariamente al mismo esquema. Un documento equivale a una fila de una relaci&oacute;n y una clave de un documento equivale a un atributo de una relaci&oacute;n. En la <a href="#f2">Figura 2</a> se establece un paralelo entre los t&eacute;rminos de una BD relacional y una BD en MongoDB.</p>      <p align="center"><a name="f2"><img src="img/revistas/cein/v26n1/v26n1a07f2.jpg"></a></p>       <p>En la <a href="#t3">Tabla 3</a> se presenta la forma general de las sentencias b&aacute;sicas de definici&oacute;n del esquema de datos en SQL y en MongoDB, y en la <a href="#t4">Tabla 4</a> ejemplos de estas sentencias. En particular, la funci&oacute;n <i>ensureindex&Ccedil;) </i>de MongoDB recibe como par&aacute;metro una pareja "clave": valor. La clave indica el atributo que se indexar&aacute;, y el valor puede ser 1 o -1. El 1 indica que el orden es ascendente, y el -1 que es descendente.</p>       ]]></body>
<body><![CDATA[<p align="center"><a name="t3"><img src="img/revistas/cein/v26n1/v26n1a07t3.jpg"></a></p>     <p align="center"><a name="t4"><img src="img/revistas/cein/v26n1/v26n1a07t4.jpg"></a></p>      <p>En la <a href="#t5">Tabla 5</a> se presenta la forma general de las sentencias de inserci&oacute;n, actualizaci&oacute;n y borrado de datos en SQL y en MongoDB. En MongoDB la sentencia <i>insert </i>recibe como par&aacute;metro un documento JSON. La clave id equivale a la clave primaria en el modelo relacional; si no se indica MongoDB, la asigna autom&aacute;ticamente.</p>      <p align="center"><a name="t5"><img src="img/revistas/cein/v26n1/v26n1a07t5.jpg"></a></p>      <p>En la <a href="#t6">Tabla 6</a> se presentan ejemplos de las sentencias de inserci&oacute;n, actualizaci&oacute;n y borrado de datos en SQL y en MongoDB. Para los ejemplos de actualizaci&oacute;n se consideran los datos de la relaci&oacute;n/colecci&oacute;n de empleados de las <a href="#t">Tablas</a> <a href="#t1">1</a> y <a href="#t2">2</a>.</p>      <p align="center"><a name="t6"><img src="img/revistas/cein/v26n1/v26n1a07t6.jpg"></a></p>      <p>N&oacute;tese que la inserci&oacute;n en MongoDB de la <a href="#t6">Tabla 6</a> simula el comportamiento de una clave for&aacute;nea. Una segunda opci&oacute;n es almacenar las dos piezas de datos en un &uacute;nico documento JSON, as&iacute; (por simplicidad se muestra un solo empleado en el arreglo):</p>      <p align="center"><a name="img2"><img src="img/revistas/cein/v26n1/v26n1a07img2.jpg"></a></p>        <p>donde db es la palabra clave para hacer operaciones sobre la base de datos actual, y collection indica la colecci&oacute;n a consultar.</p>      <p>La funci&oacute;n find() recibe dos par&aacute;metros: una condici&oacute;n y una proyecci&oacute;n. La condici&oacute;n es equivalente a la cl&aacute;usula WHERE de SQL pero aplicada a los documentos. La proyecci&oacute;n es equivalente a la sentencia SELECT de SQL, all&iacute; se indican los atributos (claves en MongoDB) que se desean seleccionar. En la <a href="#t7">Tabla 7</a> se presentan ejemplos de consultas en SQL y en MongoDB.</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="t7"><img src="img/revistas/cein/v26n1/v26n1a07t7.jpg"></a></p>      <p align="center"><b>3. LA REUNI&Oacute;N EN MongoDB MEDIANTE MapReduce</b></p>     <p>MongoDB no posee un operador propio (nativo) para reunir (join) dos colecciones, como las presentadas en la <a href="#t6">Tabla 6</a>. Como MongoDB es un SGBD NoSQL y en este tipo de BD suele haber cierto tipo de redundancia (debido a la poca normalizaci&oacute;n) esto hace usualmente innecesaria la ejecuci&oacute;n de operaciones como la reuni&oacute;n. Los arreglos, como en la segunda opci&oacute;n que se plante&oacute; en la Secci&oacute;n 2, tambi&eacute;n pueden hacer innecesarias las reuniones. Sin embargo, si se requiere hacer la reuni&oacute;n de dos colecciones (como las de la <a href="#t6">Tabla 6</a>) esta se puede lograr en MongoDB mediante MapReduce.</p>      <p>MapReduce es un paradigma de programaci&oacute;n paralela en arquitecturas distribuidas cuyo objetivo es la soluci&oacute;n de problemas mediante algoritmos que exploten el paralelismo &#91;16&#93;. MapReduce suele ser usado en aplicaciones que manejan enormes vol&uacute;menes de datos (del orden de exabytes). MapReduce toma su nombre de dos funciones Map y Reduce. Estas funciones deben ser programadas para resolver cada problema espec&iacute;fico.</p>      <p><b>3.1 Funci&oacute;n Map</b></p>     <p>La funci&oacute;n Map se aplica a un conjunto de datos y retorna una lista de parejas (clave: valor), no necesariamente distintas, donde clave y valor pueden ser tan complejos como se requiera. El conjunto original de datos se particiona en <i>n </i>fragmentos, cada fragmento se asigna a un procesador donde se ejecuta la funci&oacute;n Map, como se muestra en la <a href="#f3">Figura 3</a>. Luego, la lista de parejas generada por cada funci&oacute;n Map se env&iacute;a a un proceso controlador.</p>      <p align="center"><a name="f3"><img src="img/revistas/cein/v26n1/v26n1a07f3.jpg"></a></p>      <p>El proceso controlador une todos los valores de una misma clave en un arreglo, <i>i.e., </i>se genera un conjunto de parejas (clave: arreglo de valores). Este conjunto de parejas se divide en m subconjuntos, cada subconjunto de parejas se asigna a un procesador donde se ejecuta la funci&oacute;n Reduce.</p>      <p><b>3.2 Funci&oacute;n Reduce</b></p>      <p>La funci&oacute;n Reduce se aplica a cada pareja (clave: arreglo de valores) de cada subconjunto de parejas, y a partir de esta se genera una o varias parejas de la forma (clave: valor), v&eacute;ase la <a href="#f4">Figura 4</a>. Usualmente, el valor asociado con una clave se genera a partir de una operaci&oacute;n de agregaci&oacute;n que se aplica al arreglo de valores, <i>e.g., </i>la suma o el promedio de todos los valores en el arreglo. Sin embargo, el valor (y la clave) pueden ser tan complejos como se requiera.</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="f4"><img src="img/revistas/cein/v26n1/v26n1a07f4.jpg"></a></p>       <p>Ejemplo 1:    <br> A continuaci&oacute;n se mostrar&aacute; c&oacute;mo obtener la reuni&oacute;n (<img src="img/revistas/cein/v26n1/v26n1a07x.jpg">) de dos relaciones mediante MapReduce. La siguiente explicaci&oacute;n est&aacute; basada en la propuesta de Leskovec &#91;17&#93;. Consid&eacute;rense las relaciones Emp y Dpto de la <a href="#f5">Figura 5</a>, donde Id es la clave primaria de Emp y Dep la de Dpto. Adem&aacute;s, el atributo Dep en Emp es una clave for&aacute;nea con respecto al atributo Dep de Dpto.</p>      <p align="center"><a name="f5"><img src="img/revistas/cein/v26n1/v26n1a07f5.jpg"></a></p>      <p>La funci&oacute;n Map toma las filas de cada relaci&oacute;n y genera la siguiente lista de parejas: para las filas de la relaci&oacute;n Emp: (10: (E, 1)), (10: (E, 2))y (20: (E, 3)). Es decir, se genera una lista de parejas (clave: valor), donde clave es dep y valor est&aacute; compuesto por el nombre de la relaci&oacute;n (abreviada con la letra E) y ced (la c&eacute;dula). Para el caso de las filas de la relaci&oacute;n Dpto la funci&oacute;n Map genera: (10: (D, V)) y (20: (D, P)).</p>      <p>Por tanto, al controlador llegan cinco parejas, el cual las agrupa y genera las siguientes dos parejas (clave: arreglo) que son enviadas a la funci&oacute;n Reduce: (10, &#91;(E, 1), (E, 2), (D, V)&#93;) y (20, &#91;(E, 3), (D, P)&#93;).</p>      <p>La funci&oacute;n Reduce recibe estas dos parejas y a partir de cada una, genera parejas de la forma (clave: valor), donde la clave es dep y valor est&aacute; compuesto por la c&eacute;dula y por el nombre del departamento.</p>      <p>A partir de la pareja (10, &#91;(E, 1), (E, 2), (D, V)&#93;) se generan las parejas (10, (1, V)) y (10, (2, V)). N&oacute;tese que la funci&oacute;n Reduce genera cada empleado de este arreglo combinado con los datos de su departamento (V), de all&iacute; la necesidad de saber cu&aacute;les parejas del arreglo provienen de la relaci&oacute;n Emp o de la relaci&oacute;n Dpto (por ello se incluye en cada pareja del arreglo el nombre abreviado de la relaci&oacute;n). A partir de la pareja (20, &#91;(E, 3), (D, P)&#93;) se genera la pareja (20, (3, P)). Estas tres parejas conforman la reuni&oacute;n de las relaciones Emp y Dpto. En la <a href="#f6">Figura 6</a> se ilustra el proceso.</p>      <p align="center"><a name="f6"><img src="img/revistas/cein/v26n1/v26n1a07f6.jpg"></a></p>      <p>Para ejecutar MapReduce en MongoDB se procede as&iacute;. Se programan las funciones Map y Reduce en JavaScript:</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="va"><img src="img/revistas/cein/v26n1/v26n1a07va.jpg"></a></p>       <p>En el <a href="#ap">Ap&eacute;ndice 1</a> se muestra el c&oacute;digo correspondiente a las funciones Map y Reduce para hacer la reuni&oacute;n de las colecciones Emp y Dpto, correspondientes a las colecciones de la <a href="#t6">Tabla 6</a>. Una vez se han programado estas funciones se usan as&iacute;:</p>      <p align="center"><a name="t6"><img src="img/revistas/cein/v26n1/v26n1a07t6.jpg"></a></p>      <p align="center"><a name="img3"><img src="img/revistas/cein/v26n1/v26n1a07img3.jpg"></a></p>       <p>Donde nomColecci&oacute;nDestino es la colecci&oacute;n donde quedar&aacute;n los resultados de MapReduce. Sin embargo, en MongoDB hay una dificultad para hacer la reuni&oacute;n de dos colecciones (como las presentadas en la <a href="#t6">Tabla 6</a>). En la sintaxis se observa que MapReduce solo acepta como datos de origen una colecci&oacute;n (nomColecci&oacute;nOrigin). Para solucionar este problema se pueden unir las dos colecciones antes de invocar a MapReduce. La uni&oacute;n de dos colecciones en MongoDB se obtiene mediante la funci&oacute;n copyTo(): db.nomColecci&oacute;n1. copyTo(nomColeccI&oacute;n2), donde nomColeccI&oacute;n2 ser&aacute; la colecci&oacute;n donde quedar&aacute; la uni&oacute;n de los documentos de las dos colecciones.</p>      <p>N&oacute;tese que aunque las colecciones de la <a href="#t6">Tabla 6</a> tienen dos atributos en com&uacute;n (_id y Dep) para la reuni&oacute;n solo se considera la clave Dep como el atributo de reuni&oacute;n.</p>      <p align="center"><b>4. EXPERIMENTOS Y RESULTADOS</b></p>      <p>A continuaci&oacute;n se presenta una serie de pruebas de rendimiento entre los SGBD Oracle y MongoDB. Para las pruebas se us&oacute; un equipo con procesador Intel&reg; Core (TM) i7 de 1.8 GHz y con 4 GB de memoria RAM. Se us&oacute; la versi&oacute;n 11g Express Edition de Oracle y la versi&oacute;n 3.2.4 de MongoDB. El sistema operativo fue Windows 8. Para tratar de garantizar en lo posible igualdad de condiciones en la plataforma de pruebas, se verific&oacute; seg&uacute;n los sitios oficiales tanto de Oracle <i>(<a href="http://www.oracle.com" target="_blank">http://www.oracle.com</a></i>) como de MongoDB (<a href="http://www.mongodb.org" target="_blank"><i>www.mongodb.org</i></a><i>), </i>que este sistema operativo es uno de los recomendados para el desempe&ntilde;o &oacute;ptimo de estos productos. Las pruebas se hicieron para las cuatro operaciones: inserci&oacute;n, actualizaci&oacute;n, consulta y borrado. Tambi&eacute;n se hicieron pruebas para la operaci&oacute;n de reuni&oacute;n.</p>      <p>Cada prueba se ejecut&oacute; diez veces para cada tama&ntilde;o de muestra elegido. Para la tabla/ colecci&oacute;n empleado (ver <a href="#t4">Tablas 4</a> y <a href="#f6">6</a>) los tama&ntilde;os fueron 1.000, 5.000, 10.000, 50.000, 100.000 y 500.000 filas/documentos; y se tom&oacute; el promedio del tiempo de ejecuci&oacute;n para cada tama&ntilde;o dado. Se consider&oacute;, adem&aacute;s, que cuando una misma consulta se ejecuta repetidamente en un SGBD, algunos de sus resultados pueden permanecer en la memoria cach&eacute;, esto hace que el tiempo de ejecuci&oacute;n de las &uacute;ltimas ejecuciones sea menor con respecto a las primeras. Para evitar que los resultados se afectasen por este aspecto, se "limpi&oacute;" la memoria cach&eacute; <i>antes </i>de la ejecuci&oacute;n de cada consulta.</p>      <p>Para las operaciones de inserci&oacute;n los resultados se muestran en la <a href="#f7">Figura 7</a>. Los resultados favorecieron a MongoDB. El mayor n&uacute;mero de verificaciones de consistencia y de integridad (claves primarias, for&aacute;neas, checks de no nulidad, entre otras) y la gesti&oacute;n de transacciones podr&iacute;a explicar el mayor tiempo requerido por Oracle &#91;18&#93;.</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="f7"><img src="img/revistas/cein/v26n1/v26n1a07f7.jpg"></a></p>      <p>Para la operaci&oacute;n de actualizaci&oacute;n se evaluaron tres casos donde la operaci&oacute;n afectaba (ver <a href="#f8">Figuras 8</a>, <a href="#f9">9</a> y <a href="#f10">10</a>): 1) a todas las filas/documentos, 2) a un 20% de las filas/ documentos y 3) a 10 de las filas/documentos.</p>      <p align="center"><a name="f8"><img src="img/revistas/cein/v26n1/v26n1a07f8.jpg"></a></p>     <p align="center"><a name="f9"><img src="img/revistas/cein/v26n1/v26n1a07f9.jpg"></a></p>     <p align="center"><a name="f10"><img src="img/revistas/cein/v26n1/v26n1a07f10.jpg"></a></p>      <p>En la <a href="#f8">Figura 8</a>, los resultados favorecieron de nuevo a MongoDB. De hecho, los tiempos para los seis tama&ntilde;os de muestra fueron pr&aacute;cticamente los mismos. El mayor tiempo registrado por Oracle posiblemente se debe a la misma raz&oacute;n expuesta para los resultados de la operaci&oacute;n de inserci&oacute;n.</p>      <p>En la <a href="#f9">Figura 9</a> los resultados en MongoDB fueron similares a los del caso anterior. Aunque el tiempo registrado por Oracle fue mayor en todas las muestras, este mejor&oacute; con respecto al caso anterior. Esto se evidenci&oacute; a&uacute;n m&aacute;s en el siguiente caso, ver <a href="#f10">Figura 10</a>, aunque los tiempos de MongoDB siguieron siendo mejores. Esta mejora en Oracle se puede deber al uso de &iacute;ndice sobre la clave primaria, el cual facilita la localizaci&oacute;n de las filas a actualizar en el segundo y tercer caso, y evita una exploraci&oacute;n completa de la tabla (table access full) como se evidencia en los planes de ejecuci&oacute;n obtenidos, v&eacute;ase la <a href="#f11">Figura 11</a>.</p>      <p align="center"><a name="f11"><img src="img/revistas/cein/v26n1/v26n1a07f11.jpg"></a></p>       <p>Para la operaci&oacute;n de consulta se evaluaron tres casos donde la operaci&oacute;n recuperaba (ver <a href="#f12">Figuras 12</a>, <a href="#f13">13</a> y <a href="#f14">14</a>): 1) una &uacute;nica fila/documento, 2) 20% de las filas/documentos, y 3) 10 de las filas/ documentos.</p>      <p align="center"><a name="f12"><img src="img/revistas/cein/v26n1/v26n1a07f12.jpg"></a></p>     ]]></body>
<body><![CDATA[<p align="center"><a name="f13"><img src="img/revistas/cein/v26n1/v26n1a07f13.jpg"></a></p>     <p align="center"><a name="f14"><img src="img/revistas/cein/v26n1/v26n1a07f14.jpg"></a></p>        <p>En los tres casos de las consultas los resultados se mantuvieron pr&aacute;cticamente iguales en cada SGBD. De hecho, todas las consultas requirieron <i>menos de un segundo. </i>Aunque los resultados favorecieron a MongoDB, las diferencias fueron menores en comparaci&oacute;n con la operaci&oacute;n de inserci&oacute;n y con el caso 1 de actualizaci&oacute;n.</p>      <p>Para la operaci&oacute;n de borrado solo se muestran los resultados para muestras de datos mayores a 50.000 filas/documentos borrados en su totalidad (v&eacute;ase la <a href="#f15">Figura 15</a>), ya que para tama&ntilde;os inferiores los tiempos de ejecuci&oacute;n en ambos SGBD fueron, como en el caso de las consultas, menores a un segundo.</p>      <p align="center"><a name="f15"><img src="img/revistas/cein/v26n1/v26n1a07f15.jpg"></a></p>       <p>Los resultados favorecieron a MongoDB. El mayor tiempo registrado por Oracle se puede deber a la misma raz&oacute;n expuesta para los resultados de la operaci&oacute;n de inserci&oacute;n, pero adicionalmente porque en Oracle la operaci&oacute;n de borrado (DELETE) ejecuta procesos adicionales, <i>e.g., </i>puede incluir copia de los datos borrados (papelera de reciclaje del SGBD).</p>      <p>Para la reuni&oacute;n se consideraron las tablas/colecciones empleado y dpto. El tama&ntilde;o de la tabla dpto en cada prueba fue a la d&eacute;cima parte de la tabla empleado, &Aacute;e., por cada departamento hay diez empleados.</p>      <p>En la <a href="#f16">Figura 16</a> se puede observar que los resultados favorecieron esta vez a Oracle. MongoDB se ve posiblemente afectado por los costos implicados para la ejecuci&oacute;n de la reuni&oacute;n por medio de MapReduce, ya que MongoDB no posee un operador propio (nativo) para ejecutar dicha operaci&oacute;n.</p>      <p align="center"><a name="f16"><img src="img/revistas/cein/v26n1/v26n1a07f16.jpg"></a></p>       <p>Adicionalmente, con el fin de aprovechar el paralelismo de MongoDB se prob&oacute; la reuni&oacute;n en una minired de cuatro y ocho equipos (cada equipo con la configuraci&oacute;n descrita al inicio de esta secci&oacute;n). En cada equipo se aloj&oacute; un fragmento de cada tabla <i>(e.g., </i>una cuarta parte de cada tabla en cada uno de los cuatro equipos). Para garantizar en lo posible igualdad de condiciones se us&oacute; esta vez la opci&oacute;n paralela de Oracle (Oracle 12c Release 1). Los resultados se muestran en las <a href="#f17">Figuras 17</a> y <a href="#f18">18</a>.</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="f17"><img src="img/revistas/cein/v26n1/v26n1a07f17.jpg"></a></p>     <p align="center"><a name="f18"><img src="img/revistas/cein/v26n1/v26n1a07f18.jpg"></a></p>       <p>En un experimento m&aacute;s complejo se analiz&oacute; el rendimiento de dos reuniones. Para ello se consider&oacute; el modelo de la <a href="#f19">Figura. 19</a>.</p>      <p align="center"><a name="f19"><img src="img/revistas/cein/v26n1/v26n1a07f19.jpg"></a></p>       <p>Sea la consulta <i>"imprimir los datos de cada ciudad, junto con los datos de su estado y pa&iacute;s'. </i>Si se considera una relaci&oacute;n para cada entidad, para solucionar esta consulta se requiere una reuni&oacute;n entre Ciudad y Estado y luego una reuni&oacute;n con Pa&iacute;s. En los experimentos se generaron datos aleatorios: para cada pa&iacute;s se generaron 10 estados y para cada estado 10 ciudades. Los tama&ntilde;os de las muestras fueron 500, 1.000, 5.000 y 10.000 pa&iacute;ses (i.e., para este &uacute;ltimo tama&ntilde;o se tuvieron 100 mil estados y un mill&oacute;n de ciudades). Se intent&oacute; tambi&eacute;n con una muestra de 100 mil pa&iacute;ses, pero MongoDB gener&oacute; un error, ya que <i>el tama&ntilde;o m&aacute;ximo por documento es de 16 MB </i>(no soport&oacute; la inserci&oacute;n de 10 millones de ciudades). Esta es una restricci&oacute;n que se debe considerar tambi&eacute;n cuando se va a elegir un SGBD. Los experimentos se ejecutaron en un solo equipo y tambi&eacute;n en la red de cuatro y ocho equipos an&aacute;logamente a la reuni&oacute;n entre Empleado y Dpto (en cada equipo se aloj&oacute; un fragmento de cada relaci&oacute;n; se valid&oacute;, adem&aacute;s, que en un mismo equipo quedase un pa&iacute;s con todos sus estados y ciudades). Similarmente, en MongoDB se crearon las tres colecciones y se hizo primero la reuni&oacute;n entre las colecciones de Ciudad y Estado (an&aacute;logamente a la reuni&oacute;n entre Empleado y Dpto) y luego la reuni&oacute;n con la colecci&oacute;n Pa&iacute;s. Los resultados se muestran en la <a href="#f20">Figura 20</a>.</p>      <p align="center"><a name="f20"><img src="img/revistas/cein/v26n1/v26n1a07f20.jpg"></a></p>     <p>En un siguiente experimento en MongoDB, se consideraron solo dos colecciones, una para pa&iacute;ses y en la otra se agreg&oacute; a cada estado un arreglo de ciudades. Se ejecut&oacute; entonces la reuni&oacute;n entre las dos colecciones. Los resultados se muestran en la <a href="#f21">Figura 21</a>. En Oracle se mantuvieron las tres relaciones, por ello en la <a href="#f21">Figura 21</a> solo se muestran los resultados de MongoDB. Aunque los resultados de MongoDB mejoraron con respecto al experimento anterior (<a href="#f20">Figura 20</a>), debido a que solo se requiri&oacute; una reuni&oacute;n, su rendimiento fue inferior a Oracle (<a href="#f20">Figura 20</a>).</p>      <p align="center"><a name="f21"><img src="img/revistas/cein/v26n1/v26n1a07f21.jpg"></a></p>      <p>En un &uacute;ltimo experimento, en MongoDB se consider&oacute; una sola colecci&oacute;n de pa&iacute;ses, a cada pa&iacute;s se le incluy&oacute; un arreglo de estados y a cada estado un arreglo de ciudades. Los resultados se muestran en la <a href="#f22">Figura 22</a>. Esta vez MongoDB obtuvo resultados mejores (y en particular cuando se us&oacute; un solo equipo) que Oracle (ver <a href="#f20">Figura 20</a>), ya que los datos estaban en una misma colecci&oacute;n (no se requiri&oacute; ninguna reuni&oacute;n), en t&eacute;rminos pr&aacute;cticos estaban <i>pre-reunidos. </i>Este es un patr&oacute;n de dise&ntilde;o usual que se emplea en el dise&ntilde;o de BD de documentos tal y como se sugiere en &#91;14&#93; y &#91;19&#93; para las relaciones uno a muchos <i>(one-to-many). </i>Este mismo experimento se replic&oacute; en Oracle, <i>i.e., </i>se coloc&oacute; en una sola relaci&oacute;n cada pa&iacute;s con sus departamentos y con sus municipios <i>(i.e., </i>la relaci&oacute;n solo estaba en primera forma normal) y los resultados fueron en t&eacute;rminos pr&aacute;cticos iguales que en MongoDB, lo mismo que sucedi&oacute; con las consultas de las <a href="#f12">Figuras 12</a>, <a href="#f13">13</a> y <a href="#f14">14</a>.</p>      <p align="center"><a name="f22"><img src="img/revistas/cein/v26n1/v26n1a07f22.jpg"></a></p>       ]]></body>
<body><![CDATA[<p>A partir de las <a href="#f20">Figuras 20</a>, <a href="#f21">21</a> y <a href="#f22">22</a> se concluye que el rendimiento de MongoDB se ve afectado por las reuniones y por los costos de comunicaci&oacute;n (n&oacute;tese que cuando se us&oacute; la minired con ocho equipos y las tres colecciones los resultados fueron los peores). Por otro lado, cuando se trabaj&oacute; con una sola colecci&oacute;n (<a href="#f22">Figura 22</a>) los resultados de MongoDB fueron un poco mejores que los de Oracle, en particular cuando se us&oacute; <i>un solo equipo: </i>esto es razonable, ya que no se requirieron reuniones (todos los datos estaban en una misma colecci&oacute;n) y no hab&iacute;a costos de comunicaci&oacute;n. Sin embargo, si se trabaja igualmente en Oracle con una sola relaci&oacute;n que aloja todos los datos, se llega a resultados similares.</p>      <p>En general, los resultados sugieren que MongoDB es m&aacute;s r&aacute;pido que Oracle para las operaciones de inserci&oacute;n, actualizaci&oacute;n y borrado de datos. Para las consultas que involucran una <i>sola tabla </i>los resultados son en t&eacute;rminos pr&aacute;cticos iguales y para las consultas que involucran reuniones Oracle fue m&aacute;s r&aacute;pido, incluso cuando se consider&oacute; la minired. Estos resultados fueron similares a los obtenidos por Pavlo &#91;20&#93;, donde se compara, en un ambiente de paralelismo, el rendimiento de uno de los principales SGBD relacional (no se especifica cu&aacute;l) contra Vertica y Hadoop (ver m&aacute;s detalles en la siguiente secci&oacute;n).</p>      <p align="center"><b>5. TRABAJOS RELACIONADOS</b></p>      <p>En &#91;21&#93; se muestra a trav&eacute;s de una serie de comparaciones, entre el SGBD MySQL  y algunos SGBD NoSQL, que MySQL en inserciones por lotes de entre 100.000 y 70 millones de registros y en las consultas fue el m&aacute;s veloz. Por ejemplo, al comparar con MongoDB se obtuvo una diferencia de factor 100 en las inserciones y las consultas. En &#91;22&#93; tambi&eacute;n se comparan los tiempos de inserci&oacute;n y de consulta de MongoDB y MySQL y los resultados favorecen a MongoDB. Se afirma que aunque los SGBD relacionales a&uacute;n son necesarios, no se acomodan a las necesidades de las aplicaciones actuales que requieren manipular grandes vol&uacute;menes de datos <i>(BigData). </i>Las diferencias de los resultados en estos trabajos posiblemente se debe a la forma de inserci&oacute;n de los registros, ya que en &#91;10&#93; se insertan registros "simples" (sin claves for&aacute;neas ni documentos anidados) mientras que en &#91;22&#93; se insertan registros m&aacute;s complejos (en varias tablas/colecciones, con claves for&aacute;neas en MySQL y documentos anidados en MongoDB) lo que al parecer favorece a MongoDB.</p>      <p>En &#91;23&#93; se hace una serie de comparaciones entre MongoDB y PostgreSQL, entre estas inserci&oacute;n por lotes y consultas geoespaciales. Se concluye que MongoDB se debe usar en aquellas aplicaciones en las que las operaciones sean principalmente de inserci&oacute;n, actualizaci&oacute;n y borrado, en tanto que si se requieren principalmente operaciones de consulta se recomienda PostgreSQL.</p>      <p>Orend &#91;24&#93; compara y propone una clasificaci&oacute;n para diferentes SGBD NoSQL. Se resalta la variedad de este tipo de SGBD, y como cada uno de estos es apropiado para determinadas aplicaciones: es tarea del desarrollador determinar cu&aacute;l es el m&aacute;s apropiado seg&uacute;n sus necesidades.</p>      <p>Arora y Aggarwal &#91;25&#93; discuten sobre la incapacidad de las BD relacionales para adaptarse a las aplicaciones actuales debido a su esquema predeterminado. A ra&iacute;z de esto sugieren migrar los datos de un SGBD relacional a uno NoSQL mediante un algoritmo que transforma los datos relacionales en documentos JSON.</p>      <p>En &#91;26&#93; se compara el rendimiento entre algunos SGBD NoSQL y SGBD relacionales. Se destaca el rendimiento de las operaciones de inserci&oacute;n, actualizaci&oacute;n, borrado y consulta en MongoDB y Couchbase, SGBD NoSQL que obtuvieron los mejores resultados.</p>      <p>En &#91;27&#93; se presentan los antecedentes de las BD NoSQL y las limitaciones de las BD relacionales. Se analizan las ventajas y desventajas de los SGBD NoSQL y se propone una clasificaci&oacute;n que gu&iacute;e al usuario en la elecci&oacute;n del SGBD NoSQL m&aacute;s apropiado seg&uacute;n sus necesidades.</p>      <p>En &#91;28&#93; se discute el t&eacute;rmino NoSQL y se clasifican las BD que abarcan este t&eacute;rmino. Analizan cuatro SGBD: Cassandra, HBase, Sherpa y MySQL y hacen una serie de pruebas de rendimiento, donde Cassandra obtiene los mejores resultados. Concluyen que el uso de un producto depende de la necesidad o problema y que ninguno reemplaza al otro totalmente.</p>      ]]></body>
<body><![CDATA[<p>En &#91;29&#93; se compara el rendimiento de MongoDB y MySQL para las operaciones CRUD. Los autores concluyen que a) para conjuntos de datos de diez filas y dos columnas, MySQL tuvo un mejor desempe&ntilde;o para las consultas, b) para conjuntos de datos de dos mil filas y veinte columnas, las diferencias fueron irrelevantes, c) el tiempo de inserci&oacute;n fue menor en todas las pruebas en MongoDB, y d) para consultas que involucraron m&uacute;ltiples reuniones, MongoDB ejecut&oacute; mejor que MySQL.</p>      <p>Pavlo &#91;20&#93; analiza el rendimiento de Hadoop (uno de los sistemas m&aacute;s populares que soporta MapReduce), Vertica (un SGBD que soporta paralelismo y grandes bodegas de datos) y uno de los principales SGBD relacional tambi&eacute;n con soporte para paralelismo (no se especifica cu&aacute;l, en dicho art&iacute;culo se denomina DBMS-X). Los resultados y conclusiones concuerdan en general con los obtenidos en la secci&oacute;n 4. Pavlo concluye que: <i>"En general, el SGBD relacional fue significativamente m&aacute;s r&aacute;pido y requiri&oacute; menos c&oacute;digo, pero su afinamiento y la carga de datos requiri&oacute; m&aacute;s tiempo". </i>La reuni&oacute;n (join) en Vertica y en DBMS-X fue en promedio 50 veces m&aacute;s r&aacute;pida que en Hadoop.</p>      <p align="center"><b>6. CONCLUSIONES Y TRABAJOS FUTUROS</b></p>      <p>En este art&iacute;culo se compar&oacute; el rendimiento entre dos SGBD, uno relacional (Oracle en su versi&oacute;n Express 11g) y otro NoSQL (MongoDB) orientado a colecciones de documentos JSON. Aunque se requieren experimentos m&aacute;s exhaustivos y muchos otros tipos de pruebas, los tiempos registrados para las operaciones de inserci&oacute;n, actualizaci&oacute;n, borrado y consultas sobre una sola relaci&oacute;n/ colecci&oacute;n favorecieron a MongoDB. Esto se debe posiblemente al mayor n&uacute;mero de verificaciones de consistencia y de integridad, y a la gesti&oacute;n de transacciones realizadas por Oracle. Sin embargo, para operaciones de consulta binarias, <i>i.e., </i>que involucran dos relaciones/colecciones como la reuni&oacute;n, el tiempo de respuesta favoreci&oacute; a Oracle. Esto se debe posiblemente a los costos implicados para la ejecuci&oacute;n de la reuni&oacute;n por medio de   la   programaci&oacute;n   adicional requerida (MapReduce) y <i>los costos de comunicaci&oacute;n entre los nodos (equipos) de la red.</i></p>      <p>Debido a que el rendimiento de la programaci&oacute;n en paralelo, como en el caso de MapReduce, depende del n&uacute;mero de procesadores y de los costos de comunicaci&oacute;n entre estos, un trabajo futuro es determinar si con un mayor n&uacute;mero de procesadores los resultados de la operaci&oacute;n de reuni&oacute;n siguen favoreciendo a Oracle. Otro trabajo es comparar el rendimiento de la operaci&oacute;n reuni&oacute;n mediante MapReduce en diferentes SGBD NoSQL y el de otras operaciones binarias como la uni&oacute;n y la intersecci&oacute;n.</p>  <hr>     <p align="center"><b>BIBLIOGRAF&Iacute;A</b></p>      <!-- ref --><p>&#91;1&#93; NoSQL (2009). <i>Your Ultimate Guide to the Non-Relational Universe! </i>En: <a href="http://nosql-database.org" target="_blank">http://nosql-database.org</a>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102218&pid=S0124-8170201600010000700001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;2&#93; Strozzi C., (2015). <i>NoSQL Relational Database Management System: Home Page. </i>En: <a href="http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/Home%20 Page" target="_blank">http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/Home%20 Page</a>. (22 de septiembre de 2015).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102220&pid=S0124-8170201600010000700002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;3&#93; Duda, J. (2012). Business intelligence and NoSQL databases. <i>Information Systems in Management, </i>1(1), pp. 25-37.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102222&pid=S0124-8170201600010000700003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;4&#93; Joyanes, L. (2014). <i>Big data: an&aacute;lisis de grandes vol&uacute;menes de datos en organizaciones. </i>Barcelona: Marcombo Ediciones T&eacute;cnicas.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102224&pid=S0124-8170201600010000700004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;5&#93; Moreno, A., Redondo, T. (2016). Text Analytics: the convergence of Big Data and Artificial Intelligence. En <i>International Journal of lnteractive Multimedia and Artificial Inteligence, </i>3(6).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102226&pid=S0124-8170201600010000700005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;6&#93; Cheng, Z., Caverlee, J., Lee, K. &amp; Sui, D. Z. (2011). Exploring Millions of Footprints in Location Sharing Services. En <i>Fifth International AAAI Conference on Weblogs and Social Media, </i>Barcelona, Espa&ntilde;a, pp. 81-88.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102228&pid=S0124-8170201600010000700006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;7&#93; Elmasri, R., Navathe, S. B. (2014). <i>Fundamentals of database systems. </i>Boston: Pearson/Addison Wesley.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102230&pid=S0124-8170201600010000700007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;8&#93; Date, C. J. (2012). What First Normal Form Really Means. <i>Date on Database: Writings 2000-2006. </i>Apress.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102232&pid=S0124-8170201600010000700008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;9&#93; Scofield, B. (2009). NoSQL: Death to Relational Databases. <i>Online RubyConference. </i>En: <a href="http://es.slideshare.net/bscofield/nosql-death-to-relational-databases" target="_blank">http://es.slideshare.net/bscofield/nosql-death-to-relational-databases</a>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102234&pid=S0124-8170201600010000700009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;10&#93; Heller, M. (2007). REST and CRUD: the impedance mismatch. <i>InfoWorld-Developer World, </i>IDG News Service.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102236&pid=S0124-8170201600010000700010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;11&#93; Bassil, Y. (2012). A comparative study on the performance of the Top DBMS systems. <i>Journal of Computer Science &amp; Research, </i>1(1), pp. 20-31.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102238&pid=S0124-8170201600010000700011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;12&#93; Asay M. (2014). MongoDB, Cassandra, and HBase the three NoSQL databases to watch. <i>InfoWorld-Developer World, </i>IDG News Service.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102240&pid=S0124-8170201600010000700012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;13&#93; Shukla, D., Deepak, D., Rakesh A., Pandey, K. &amp; Agrawal, K. K. (2011). An Efficient Approach of Block Nested Loop Algorithm based on Rate of Block Transfer. En <i>Int. Journal of Comp. Applications, </i>21(3), pp.24-30.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102242&pid=S0124-8170201600010000700013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>       <!-- ref --><p>&#91;14&#93; Sullivan, D. (2015). <i>NoSQL for Mere Mortals. </i>Ann Arbor, MI, Addison-Wesley Professional, 1sr edition.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102244&pid=S0124-8170201600010000700014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;15&#93; MongoDB CRUD (2015). Introduction - MongoDB Manual 3.0.1. En: <a href="http://docs.mongodb.org/manual/core/crud-introduction" target="_blank">http://docs.mongodb.org/manual/core/crud-introduction</a>. (22 de septiembre de 2015).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102246&pid=S0124-8170201600010000700015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;16&#93; Dean,   J.,   Ghemawat,   S. (2008). MapReduce: simplified data processing on large clusters. <i>Communications of the</i> <i>ACM, </i>51(1).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102248&pid=S0124-8170201600010000700016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;17&#93; Leskovec, J., Rajaraman, A., Ullman, J. D. (2012). <i>Mining of massive datasets. </i>New York, Cambridge: Cambridge University Press.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102250&pid=S0124-8170201600010000700017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;18&#93; Niemiec, R. (2012). <i>Oracle Database 11g Release 2 Performance Tuning Tips &amp; Techniques, </i>McGraw-Hill.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102252&pid=S0124-8170201600010000700018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;19&#93; Copelan, R. (2013). <i>MongoDB Applied Design Patterns. </i>Sebastopol, CA, O'Reilly Media, 1ra edition.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102254&pid=S0124-8170201600010000700019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;20&#93; Pavlo, A., Paulson, E., Rasin, A., Abadi, D.J., DeWitt, S., Madden, S., Stonebraker, M. (2009). A Comparison of Approaches to Large-Scale Data Analysis. En <i>ACM SIGMOD International Conference on Management of data Providence, </i>USA.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102256&pid=S0124-8170201600010000700020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;21&#93; Lith, A., Mattsson, J. (2010). <i>Investigating storage solutions for large data. </i>(Tesis de maestria). Chalmers University of Technology.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102258&pid=S0124-8170201600010000700021&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;22&#93; Khan, S., Mane, V. (2013). SQL Support over MongoDB using Metadata. <i>International Journal of Scientific and Research Publications, </i>3(10).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102260&pid=S0124-8170201600010000700022&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;23&#93; Suter, R. (2012). <i>MongoDB An introduction and performance analysis. </i>Informe T&eacute;cnico, HSR Hochschule fur Technik Rapperswil, Universidad de Ciencias Aplicadas de Rapperswil. En: <a href="http://wiki.hsr.ch/Datenbanken/files/MongoDB.pdf" target="_blank">http://wiki.hsr.ch/Datenbanken/files/MongoDB.pdf</a>. (22 de septiembre de 2015).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102262&pid=S0124-8170201600010000700023&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;24&#93; Orend, K. (2010). <i>Analysis and Classification of NoSQL Databases and Evaluation of their Ability to Replace an Object-relational Persistence Layer. </i>(Tesis de maestria). Technische Universit&atilde;t Munchen.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102264&pid=S0124-8170201600010000700024&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;25&#93; Arora, R., Aggarwal, R. R. (2013). An Algorithm for Transformation of Data from MySQL to NoSQL (MongoDB). <i>International Journal of Advanced Studies in Computer Science and Engineering, </i>2(1).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102266&pid=S0124-8170201600010000700025&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;26&#93; Li, Y.,  Manoharan, S.  (2013). A performance comparison of SQL and NoSQL databases. <i>IEEE Pacific RimConference on Communications, Computers and Signal Processing (PACRIM), </i>Victoria, Canada, pp. 15-19.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102268&pid=S0124-8170201600010000700026&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;27&#93; Han, J., Haihong, E., Guan, L., Du, J. (2011). Survey on NoSQL database. En <i>6th IEEE international conference on Pervasive computing and applications, </i>pp. 363-366.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102270&pid=S0124-8170201600010000700027&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p>&#91;28&#93; Tudorica, B. G., Bucur, C. (2011). A comparison between several NoSQL databases with comments and notes. En <i>10th Roedunet International Conference (RoEduNet), </i>Lasi, Rumania, pp. 1-5.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102272&pid=S0124-8170201600010000700028&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;29&#93; Aghi, R., Mehta, S., Chauhan, R., Chaudhary, S. &amp; Bohra, N. (2015). A comprehensive comparison of SQL and MongoDB A comprehensive comparison of SQL and MongoDB. En <i>International Journal of Scientific and Research Publications, </i>5(2).    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=4102274&pid=S0124-8170201600010000700029&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <p align="center"><a name="ap"><img src="img/revistas/cein/v26n1/v26n1a07ap.jpg"></a></p>  </font>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<collab>NoSQL</collab>
<source><![CDATA[Your Ultimate Guide to the Non-Relational Universe!]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Strozzi]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<source><![CDATA[NoSQL Relational Database Management System: Home Page]]></source>
<year>2015</year>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Duda]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Business intelligence and NoSQL databases]]></article-title>
<source><![CDATA[Information Systems in Management]]></source>
<year>2012</year>
<volume>1</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>25-37</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Joyanes]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
</person-group>
<source><![CDATA[Big data]]></source>
<year>2014</year>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Moreno]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Redondo]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Text Analytics: the convergence of Big Data and Artificial Intelligence]]></article-title>
<source><![CDATA[International Journal of lnteractive Multimedia and Artificial Inteligence]]></source>
<year>2016</year>
<volume>3</volume>
<numero>6</numero>
<issue>6</issue>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cheng]]></surname>
<given-names><![CDATA[Z]]></given-names>
</name>
<name>
<surname><![CDATA[Caverlee]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Lee]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Sui]]></surname>
<given-names><![CDATA[D. Z]]></given-names>
</name>
</person-group>
<source><![CDATA[Exploring Millions of Footprints in Location Sharing Services]]></source>
<year></year>
<conf-name><![CDATA[Fifth International AAAI Conference on Weblogs and Social Media]]></conf-name>
<conf-loc>Barcelona </conf-loc>
<page-range>81-88</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Elmasri]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Navathe]]></surname>
<given-names><![CDATA[S. B]]></given-names>
</name>
</person-group>
<source><![CDATA[Fundamentals of database systems]]></source>
<year>2014</year>
<publisher-loc><![CDATA[Boston ]]></publisher-loc>
<publisher-name><![CDATA[Pearson/Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Date]]></surname>
<given-names><![CDATA[C. J]]></given-names>
</name>
</person-group>
<source><![CDATA[What First Normal Form Really Means]]></source>
<year>2012</year>
<publisher-name><![CDATA[Apress]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Scofield]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<source><![CDATA[NoSQL: Death to Relational Databases. Online Ruby Conference]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Heller]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[REST and CRUD: the impedance mismatch]]></source>
<year>2007</year>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bassil]]></surname>
<given-names><![CDATA[Y]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A comparative study on the performance of the Top DBMS systems]]></article-title>
<source><![CDATA[Journal of Computer Science & Research]]></source>
<year>2012</year>
<volume>1</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>20-31</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Asay]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[MongoDB, Cassandra, and HBase the three NoSQL databases to watch]]></source>
<year>2014</year>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Shukla]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Deepak]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Rakesh]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Pandey]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Agrawal]]></surname>
<given-names><![CDATA[K. K]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Efficient Approach of Block Nested Loop Algorithm based on Rate of Block Transfer]]></article-title>
<source><![CDATA[Int. Journal of Comp. Applications]]></source>
<year>2011</year>
<volume>21</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>24-30</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sullivan]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[NoSQL for Mere Mortals]]></source>
<year>2015</year>
<edition>1sr</edition>
<publisher-loc><![CDATA[Ann Arbor^eMI MI]]></publisher-loc>
<publisher-name><![CDATA[Addison-Wesley Professional,]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="">
<collab>MongoDB CRUD</collab>
<source><![CDATA[Introduction - MongoDB Manual 3.0.1]]></source>
<year>2015</year>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Dean]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Ghemawat]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[MapReduce: simplified data processing on large clusters]]></article-title>
<source><![CDATA[Communications of the ACM]]></source>
<year>2008</year>
<volume>51</volume>
<numero>1</numero>
<issue>1</issue>
</nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Leskovec]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Rajaraman]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Ullman]]></surname>
<given-names><![CDATA[J. D]]></given-names>
</name>
</person-group>
<source><![CDATA[Mining of massive datasets]]></source>
<year>2012</year>
<publisher-loc><![CDATA[New York^eCambridge Cambridge]]></publisher-loc>
<publisher-name><![CDATA[Cambridge University Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Niemiec]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[Oracle Database 11g Release 2 Performance Tuning Tips & Techniques]]></source>
<year>2012</year>
<publisher-name><![CDATA[McGraw-Hill]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Copelan]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[MongoDB Applied Design Patterns]]></source>
<year>2013</year>
<edition>1ra</edition>
<publisher-loc><![CDATA[Sebastopol,^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[O'Reilly Media]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pavlo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Paulson]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Rasin]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Abadi]]></surname>
<given-names><![CDATA[D.J]]></given-names>
</name>
<name>
<surname><![CDATA[DeWitt]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Madden]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Stonebraker]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[A Comparison of Approaches to Large-Scale Data Analysis]]></source>
<year>2009</year>
<conf-name><![CDATA[ ACM SIGMOD International Conference on Management of data ProvidenceUSA]]></conf-name>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Lith]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Mattsson]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Investigating storage solutions for large data]]></source>
<year>2010</year>
</nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Khan]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Mane]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[SQL Support over MongoDB using Metadata]]></article-title>
<source><![CDATA[International Journal of Scientific and Research Publications]]></source>
<year>2013</year>
<volume>3</volume>
<numero>10</numero>
<issue>10</issue>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Suter]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[MongoDB An introduction and performance analysis]]></source>
<year>2012</year>
<publisher-name><![CDATA[Universidad de Ciencias Aplicadas de Rapperswil]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Orend]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
</person-group>
<source><![CDATA[Analysis and Classification of NoSQL Databases and Evaluation of their Ability to Replace an Object-relational Persistence Layer]]></source>
<year>2010</year>
</nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Arora]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Aggarwal]]></surname>
<given-names><![CDATA[R. R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Algorithm for Transformation of Data from MySQL to NoSQL (MongoDB)]]></article-title>
<source><![CDATA[International Journal of Advanced Studies in Computer Science and Engineering]]></source>
<year>2013</year>
<volume>2</volume>
<numero>1</numero>
<issue>1</issue>
</nlm-citation>
</ref>
<ref id="B26">
<label>26</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Li]]></surname>
<given-names><![CDATA[Y]]></given-names>
</name>
<name>
<surname><![CDATA[Manoharan]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[A performance comparison of SQL and NoSQL databases]]></source>
<year>2013</year>
<conf-name><![CDATA[ IEEE Pacific RimConference on Communications, Computers and Signal Processing (PACRIM)]]></conf-name>
<conf-loc>Victoria </conf-loc>
<page-range>15-19</page-range></nlm-citation>
</ref>
<ref id="B27">
<label>27</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Han]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Haihong]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Guan]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Du]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Survey on NoSQL database]]></source>
<year>2011</year>
<conf-name><![CDATA[6th IEEE international conference on Pervasive computing and applications]]></conf-name>
<conf-loc> </conf-loc>
<page-range>363-366</page-range></nlm-citation>
</ref>
<ref id="B28">
<label>28</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Tudorica]]></surname>
<given-names><![CDATA[B. G]]></given-names>
</name>
<name>
<surname><![CDATA[Bucur]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<source><![CDATA[A comparison between several NoSQL databases with comments and notes]]></source>
<year>2011</year>
<conf-name><![CDATA[10th Roedunet International Conference (RoEduNet)]]></conf-name>
<conf-loc>Lasi </conf-loc>
<page-range>1-5</page-range></nlm-citation>
</ref>
<ref id="B29">
<label>29</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Aghi]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Mehta]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Chauhan]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Chaudhary]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Bohra]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A comprehensive comparison of SQL and MongoDB A comprehensive comparison of SQL and MongoDB]]></article-title>
<source><![CDATA[International Journal of Scientific and Research Publications]]></source>
<year>2015</year>
<volume>5</volume>
<numero>2</numero>
<issue>2</issue>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
