Download Historial de cambios - Trabajos de Grado de la facultad de

Document related concepts

Base de datos orientada a grafos wikipedia , lookup

Modelo de base de datos wikipedia , lookup

MySQL wikipedia , lookup

Mapeo objeto wikipedia , lookup

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.