Download Historial de cambios - Trabajos de Grado de la facultad de
Document related concepts
Transcript
FanJam, red social para buscar e integrar talentos en la industria musical Trabajo de Grado DOCUMENTO DE COMPARACIÓN DE TECNOLOGÍAS 4 de Noviembre de 2012 Juan Sebastián Ruiz Juan David Cadena V3.0 Pontificia Universidad Javeriana Facultad Ingeniería Carrera Ingeniera de Sistema Bogotá D.C 2012 Historial de cambios Sección del documento modificada Versión Fecha 1.0 Oct 6 y 7 de 2012 1 2.0 Oct 26 y 27 de 2012 2 2.5 3.0 Nov 2 y 3 de 2012 Nov 3 y 4 de 2012 1 2 Descripción de cambios Elaboración de comparación de Tecnologías (CakePHP vs Symfony2) Elaboración de comparación de tecnologías (BD Relacional vs BD de grafos) Corrección de comparación de tecnologías, cambio de referencias Corrección de comparación de tecnologías, cambio de referencias Tabla 1 - Historial de cambios Responsable Juan Sebastián Ruiz Juan Sebastián Ruiz Juan Sebastián Ruiz Juan Sebastián Ruiz Tabla de contenido Historial de cambios ............................................................................................................................ 2 Lista de Ilustraciones........................................................................................................................... 4 Lista de Tablas .................................................................................................................................... 5 1. Comparación de Tecnologías (CakePHP vs Symfony2) ............................................................. 6 2. Comparación de tipos de Bases de datos (Grafos vs Relacional) ............................................... 9 Bibliografía ....................................................................................................................................... 13 Lista de Ilustraciones Ilustración 1 - Diferencia de rendimiento entre bases de datos con enteros ..................................... 11 Ilustración 2 - Diferencia de rendimiento entre bases de datos con strings ...................................... 12 Ilustración 3 – Relaciones en las bases de datos relacionales y de grafos [17] ................................. 12 Lista de Tablas Tabla 1 - Historial de cambios ............................................................................................................ 2 Tabla 2 - Comparación Framework CakePHP - Symfony2 ................................................................ 8 Tabla 3 - Resumen resultados de comparación de frameworks .......................................................... 8 Tabla 4 - Comparación BD relacional y BD de grafos ..................................................................... 11 Tabla 5 - Resumen comparación bases de datos ............................................................................... 11 Tabla 6 - Decisión de tecnologías ..................................................................................................... 13 1. Comparación de Tecnologías (CakePHP vs Symfony2) El objetivo de realizar una tabla comparativa entre los frameworks CakePHP y Symfony2 es dar información con el fin de verificar que tecnología se acomoda de mejor manera a las necesidades para la realización del proyecto web “FanJam”. ASPECTO Desempeño CAKEPHP SYMFONY2 Una de las ventajas más destacadas de Symfony2 después de haber terminado una aplicación web, es el rendimiento, ésto debido a que Symfony2 desde el inicio fue pensado para ser rápido y buscar la eficiencia. Se justifica esto después de haber realizado comparaciones entre la versión 1.4 de Symfony, CakePHP 1.3.4 y la versión 2.0 de Symfony, donde está última es más rápida. [0] Facilidad de uso CakePHP cuenta con una buena Symfony2 es accesible, existe una documentación en su sitio web, pero buena documentación [4], y en la a comparación de Symfony2, es web se pueden encontrar varios menos conciso [2]. Además hacen ejemplos de cómo crear un sitio web falta buenos ejemplos que guíen al con Symfony2 [5] (haciendo uso de desarrollador en su aprendizaje, componentes ya creados, para debido a que sus ejemplos son visualizar lo fácil que es crear una superficiales, verdadero no mostrando potencial framework. [3] de el aplicación sin reinventar la rueda). Al su finalizar el tutorial sobre como crear un blog, se puede sentir que se ha mostrado la mayoría de ventajas que tiene el framework, ésto, para mostrar su verdadero potencial. [6] Finalmente el soporte por parte de la comunidad y profesionales es bueno y complementa documentación. su buena Expandible En CakePHP los componentes son Todo en Symfony2 es un paquetes de lógica, éstos pueden ser componente (Bundle), hasta el propio compartidos entre los controladores; framework en sí es un conjunto de se incluyen componentes de componentes. La creación de un seguridad, sesiones, lista de control componente de acceso, emails, debe tener una cookies, funcionalidad específica y ésta podrá autenticación, manejo de pedido, ser reutilizada en diferentes entre otros. Todos los componentes proyectos y/o compartida entre la anteriormente mencionados pueden comunidad de desarrolladores, con la ser modificables para ajustarse a las facilidad necesidades del programador. [7] de que puede ser modificada, incluyendo el core de Symfony2.[1] Mantenibilidad Se puede hacer uso de la arquitectura Al igual que CakePHP, se puede MVC (Model-View-Controller) para hacer uso de la arquitectura MVC, el desarrollo de aplicaciones, ésto pero a diferencia de éste, Symfony2 para simplificar el mantenimiento y es más amigable ya que con un sólo la depuración. comando, todos los archivos son Una de las desventajas que tiene generados y nombrados CakePHP es que usa una estricta apropiadamente, sin la intervención convención de nombres, ésto quiere del desarrollador. Finalmente todo lo decir que si un archivo, tabla o clase que tiene que hacer el desarrollador no esta nombrada consistentemente, es llenar los espacios con código. [9] puede que la aplicación no funcione de manera correcta a razón a que no puede encontrar las partes de la aplicación que necesita para su correcto funcionamiento. [9] Validación de formularios CakePHP al igual que Symfony2 Symfony2 utiliza la validación de cuenta con validación la característica de formularios de diferente manera, éste de formularios, la cuenta diferencia esta en como se realiza la llamada con una validator clase la especial cual esta validación, CakePHP hace uso de un emparejada con un widget. Los arreglo de pares (nombre del campo, elemento como un textbox puede ser requerimiento). Los arreglos pueden definidos como un widget, ésto subdividirse para utilizar múltiples puede llegar a confundir al validaciones en un solo campo, pero programador sino sabe cual validador este tiene la desventaja que puede utilizar para cada widget, pero, por llegar a ser algo complejo sino se lo general se nombran los widgets y maneja de manera organizada. [2] los validadores de forma similar para saber identificarlos y ubicarlos. [4] CakePHP no utiliza un mapeo objeto Symfony2 hace uso de YAML y ORM relacional, el desarrollador debe Doctrine, lo que hace mucho mas configurar la base de datos a mano y fácil debido a que si se tiene ya asegurarse de nombrar las tablas de definido el esquema en el archivo acuerdo a la convención. La schema.yml, doctrine genera las configuración de la aplicación para tablas a partir de un comando. [9] conectarse a la base de datos se define en el archivo database.php.[9] CakePHP hace uso de PHPUnit, para Al igual que CakePHP, Symfony2 Pruebas pruebas unitarias. [2] integradas hace uso de PHPUnit, para desarrollar las pruebas unitarias. [4] Multiplataforma El desarrollo puede hacerse en las El desarrollo puede hacerse en las plataformas existentes como (Linux, plataformas existentes como (Linux, Mac y Windows). [10] Mac y Windows). [11] Tabla 2 - Comparación Framework CakePHP - Symfony2 CakePHP Symfony2 Tabla 3 - Resumen resultados de comparación de frameworks Multiplataforma Pruebas Integradas ORM Validación de formularios Mantenibilidad Expandible Facilidad de uso Desempeño Resumen de resultados: 2. Comparación de tipos de Bases de datos (Grafos vs Relacional) El objetivo de realizar una comparación entre dos tipos de bases de datos totalmente distintas (Grafos y Relacional) reside en que se requiere saber cual de las dos es más eficiente a la hora de desplegar el proyecto web “FanJam” en el servidor, todo para obtener una mayor escalabilidad y desempeño. Es por esto que a continuación se expondrán diferencias con el fin de determinar cuál es la mejor opción. ASPECTO Grafos Relacional Estructura de Grafos Arboles Nodos y relaciones Tablas (Columnas y tuplas) datos Tipo de datos que se manejan Índices Se cuentan con índices para hacer También se cuentan con índices para las búsquedas más rápidas para los hacer las búsquedas más rápidas, nodos y las aristas, lo que lo hace pero la estructura de datos se maneja más eficiente cuando demasiadas relaciones.[12] existen de diferente manera, lo que lo hace menos eficiente si existen Por el contrario las consultas son demasiadas relaciones. menos eficientes cuando se quiere Claro está que si se quiere buscar un buscar un atributo específico como atributo específico en una tabla, es lo pueden ser de tipo fecha o más eficiente una BD relacional que numérico. [13] Escalabilidad una de grafos. [13] Asegura un alto desempeño y una El desempeño va disminuyendo a alta disponibilidad (escalamiento de medida que hay más relaciones y lectura) [12] Librerías que soporten nodos. [12] Actualmente existen librerías que Existen librerías que soportan PHP. soportan PHP. [14] [15] conexión con PHP Facilidad de Estas bases de datos hacen uso de Todas las bases de datos relacionales programar lenguajes específicos que tienen sus hacen uso del lenguaje SQL, lo cual propias APIs, lo que crea genera una mayor facilidad para dificultades a la hora de hacer una hacer transiciones entre diferentes transición. implementaciones. Recorrer un grafo La facilidad para recorrer un grafo en las BD relacionales es más es bastante simple, especialmente complicado, puede implicar bucles o en Neo4j gracias a que contienen recursiones con lo que se genera múltiples y costosos “joins”. [13] métodos para realizarlo. [13] Seguridad Hace falta un soporte para Incorporan soporte a multiusuario, ambientes de multiusuario. Lo que cuentan con un apoyo de seguridad obliga a los usuarios a realizar la integrado y con soporte ACL para ser gestión a nivel de aplicación. manejado desde la base de datos, lo Además la mayoría de BD de que las hace confiables y seguras a la grafos no cuenta con ningún tipo de hora de implementar una aplicación. apoyo de seguridad integrada lo que [13] las hace vulnerables. Finalmente no se cuenta con un diseño rudimentario para ACL (Access control list), es por ésto que se debe manejar a nivel de aplicación. [16] Orientado Redes Sociales, servicios basados Listas de salarios o para la mayoría en localización y biología (Grafos de aplicaciones web [13] de estructuras químicas, grupos de genes y mapas genéticos.) [13] “Ver Ilustración 2” Madurez La penetración de las bases de La penetración de las bases de datos datos de grafos en el mercado es relacionales en el mercado es mucho mucho menor. No tienen un mayor, notándose su uso en los lenguaje unificado, ésto hace que el ámbitos comerciales y académicos. soporte para una implementación Lo anterior hace que estas bases de pueda no funcionar de manera datos sean más sólidas, estables y general. [13] Soporte seguras. [13] Dado a la poca madurez que tienen Dado a la experiencia y a la madurez este tipo de bases de datos, se que tienen este tipo de bases de puede tornar complicado obtener un datos, se puede hallar soporte y buen soporte y documentación sino documentación fácilmente. [13] es por parte de la compañía que lo creo. [13] Soporte Madurez N/A Orientado N/A Seguridad Relacional Facilidad de programar N/A Librerías que soporten conexión con PHP N/A Escalabilidad Tipo de datos que se manejan Grafos Índices Estructura de datos Tabla 4 - Comparación BD relacional y BD de grafos Tabla 5 - Resumen comparación bases de datos Ejemplo 1: Tiempos de respuesta entre una base de datos relacional y una de grafos: A partir de un estudio realizado por seis (6) personas de la Universidad de Mississippi sobre el desempeño en bases de datos relacionales y de grafos [13], se encontró que para ciertos casos las base de datos de grafos tienen un mejor desempeño que las relacionales. Teniendo en cuenta los resultados que se obtuvieron en este estudio, se realizaron dos graficas con el fin de apreciar claramente como varía el desempeño (tiempos de respuesta) y ver que tan grande es esta diferencia. Consulta S128 en Integers 120 Tiempo (ms) 100 80 60 My SQL S128 40 Neo4J S128 20 0 Int1000 Int5000 Int10000 Int100000 Tipo de dato (Int) Ilustración 1 - Diferencia de rendimiento entre bases de datos con enteros Tiempo (ms) Consulta S128 en Strings 45 40 35 30 25 20 15 10 5 0 My SQL S128 Neo4J S128 Tipo de dato (Char32k) Ilustración 2 - Diferencia de rendimiento entre bases de datos con strings En las dos graficas anteriormente expuestas se observa la diferencia en los tiempos de respuesta, se puede ver como a medida que aumenta el número de datos, el tiempo de respuesta en una base de datos relacional cambia drásticamente, ésto si la comparamos con la base de datos de grafos. Ilustración 3 – Relaciones en las bases de datos relacionales y de grafos [17] Analizando todos los aspectos señalados en la Ilustración 1, se puede decir que se recomendaría utilizar la base de datos de grafos, debido a la gran cantidad de relaciones que pueden existir en una red social, lo que la hace mucho más eficiente a la hora de consultar información, esta eficiencia se debe a que no es necesario hacer uso de tablas intermedias al formar una relación de muchos a muchos. A diferencia la base de datos de grafos recurre únicamente a las aristas las cuales pueden contener atributos para poder relacionar los nodos, así de esta forma se disminuye notablemente la cantidad de recursos a utilizar. Se presenta la Ilustración 4 para visualizar de manera grafica lo descrito anteriormente. [17] MySql No No PHP con CakePHP PHP con Symfony2 Neo4J No Si Tabla 6 - Decisión de tecnologías Finalmente las tecnologías escogidas para la realización de la red social de músicos fueron el framework Symfony2 y la base de datos basada en grafos. Bibliografía [0] “PHP Framework Benchmarks” [Available]: http://www.elefantcms.com/wiki/PHP- Framework-Benchmarks [1] “The technological benefits of Symfony in 6 easy lessons” [Available]: http://symfony.com/sixgood-technical-reasons. [2] “CakePHP Cookbook Documentation” http://book.cakephp.org/2.0/_downloads/en/CakePHPCookbook.pdf [Available]: [3] “Tutorial para desarrollar el Blog” [Available]: http://book.cakephp.org/2.0/es/tutorials-andexamples/blog/blog.html [4] “Symfony the book” [Available]: http://symfony.com/pdf/Symfony_book_2.1.pdf?v=2 [5] “Symfony2 tutoriales” [Available]: http://www.symfony.es/noticias-sobre-symfony-y-tutorial/ [6] “Symblog creating a blog in Symfony2” [Available]: http://tutorial.symblog.co.uk/ [7] “Cake PHP, The 1.3 http://book.cakephp.org/1.3/es/view/994/Introducci%C3%B3n book” [Available]: [8] “Building PHP Applications with Symfony, CakePHP and Zend frameworks”, Bartosz Porebski, Karol Przystalski, Leszek Nowak [9] “A comparative study of rapid development frameworks for the creation of a language placement exam template”, Melisa Canales, Texas A&M University - Corpus Christi [Available]: http://sci.tamucc.edu/~cams/projects/343.pdf [10] “Hire Cakephp Developer Is Common Practice on the Web”, ArticleSnatch Article Directory. [Online]. [Available]: http://www.articlesnatch.com/Article/Hire-CakephpDeveloper-Is-Common-Practice-On-The-Web/3503276. [11] «Guía de instalación de Symfony 2.0». [Online]. http://www.symfony.es/documentacion/guia-de-instalacion-de-symfony-2-0/. “Neo4J, [12] Video: Getting Started with Database and Neo4j” Available: [Available]: http://www.neotechnology.com/neo4j/ [13] “A Comparison of a Graph a Relational Database” http://www.cs.olemiss.edu/~ychen/publications/conference/vicknair_acmse10.pdf [14] “Neo4j Remote Client Libraries” [Available]: http://docs.neo4j.org/chunked/stable/tutorialsrest.html [15] “MySQL PHP API” [Available]: http://dev.mysql.com/doc/refman/5.5/en/apis-php.html [16] T. Ivarsson. [Neo] security. http://lists.neo4j.org/pipermail/user/2009-November/001955.html, 2009. [17] “From SQL to Cypher” [Available]: http://docs.neo4j.org/chunked/milestone/examples-fromsql-to-cypher.html.