framework datos consultas conexion app php sql-server zend-framework yii erp

consultas - ¿Una aplicación en PHP Yii framework con base de datos MySQL manejará una solución ERP de 20K empleados?



yii2 base de datos (5)

Tenemos un proyecto para construir un sistema ERP para una de las industrias de prendas de vestir más grandes de Bangladesh.

Tienen alrededor de 20,000 empleados y alrededor del 10% de ellos salen cada mes. Somos una empresa pequeña con 5 desarrolladores PHP y no tenemos mucha experiencia con un proyecto tan grande. Hemos desarrollado diferentes proyectos de pequeña / mediana escala previamente con Codeigniter / Zend Framework y la base de datos MySQL.

Para este proyecto decidimos ir con Yii framework y MySQL o PostgreSQL. Habrá aproximadamente 1 millón de consultas de bases de datos por día. Ahora mi pregunta es si MySQL / PostgreSQL puede manejar esta carga o hay una mejor alternativa? ¿Está bien hacerlo con Yii framework o hay un mejor framework de PHP para este tipo de aplicación? Tenemos solo 5 meses para construir los módulos de nómina y administración de empleados.


Por un lado, considere usar PostgreSQL en lugar de MySQL. Tendrá que lidiar con datos de misión crítica y, en general, apreciará que:

  • Tendrás acceso a funciones de ventana (útiles para informes), con instrucciones y un planificador de consultas mucho más sólido.
  • Tendrá tipos de datos adicionales, a saber, tipos de geometría que se pueden utilizar para optimizar las consultas relacionadas con el intervalo de fechas.
  • Tendrá acceso a la funcionalidad de búsqueda de texto completo sin necesidad de utilizar un motor (MyISAM) que es propenso a la corrupción de datos.
  • Tendrá más opciones para implementar la replicación de bases de datos (algunas de las cuales están incorporadas).

Con respecto a la escalabilidad, tenga cuidado con la escalabilidad! = Rendimiento. El último se trata de hacer solicitudes individuales más rápido; el primero se trata de ser capaz de manejar cantidades masivas de solicitudes simultáneas, y a menudo viene con un ligero golpe a este último.

Para el framework PHP, nunca he usado Yii personalmente, así que no sé qué tan bien se escala. Pero estoy bastante seguro de que Symfony2 (o Symfony, si no te gusta el software beta) se escalará muy bien: sus desarrolladores clave trabajan en una agencia web cuyos clientes principales son organizaciones medianas y grandes.


Creo que Yii funcionará bien con (relativamente) gran cantidad de datos. Estoy usando Yii para administrar 1,3 millones de registros, algunos de ellos se actualizan diariamente y miles de consultas al día en un pequeño host virtual con un rendimiento increíble.

Si su base de datos puede manejar estos datos, su aplicación Yii también se encargará de eso.

Su elección de la base de datos será un punto importante. Entonces @Denis dijo algunas ideas importantes. Al utilizar MySQL, probablemente tenga que explorar / determinar el motor de almacenamiento adecuado para sus necesidades.

Pero, hay algunos puntos, que me di cuenta al crear un proyecto en crecimiento con Yii. Deberías pensar en esas cosas:

-Yii es un framework joven: las nuevas tecnologías (como ajax) son compatibles, pero en algunos casos especiales es un poco inmadura: es muy fácil generar una aplicación básica en un par de horas. El problema podría ocurrir por situación y requisitos especiales. Ejemplo: tienen un buen mecanismo de validación para las entradas del usuario (formularios HTML). Pero hasta Yii 1.1.6 que no funciona con casillas de verificación HTML, desde Yii 1.1.7, las casillas de verificación son compatibles por defecto, pero no hay grupos de casillas de verificación. Otro problema: Yii siempre usa un alias de tabla, que siempre es "t". ¡Eso podría ser un problema! A veces puede definir ese alias, a veces no (que es inconsistente). Si desea bloquear un par de tablas en MySql, se encontró con un problema, porque Yii llama a todas las tablas con el mismo alias "t". Por lo tanto, no puede eliminar las tablas en MySql por nombre de tabla y también es imposible bloquear un par de tablas, que reciben el mismo alias. -> esos son problemas específicos, puedes resolverlos, escribiendo PHP puro (sin usar la funcionalidad Yii) Lo que estoy tratando de decir: el framework no será útil en muchos casos, sino principalmente.

-Yii es fácil de extender. Es fácil agregar extensiones o funcionalidades propias. Muchos de esos "pequeños problemas" se pueden resolver escribiendo extensiones propias, widgets o mediante métodos primordiales.

-Yii es compatible con PHP 5.2. Yii es compatible con 5.3 pero (Yii funciona con 5.3, todavía lo estoy usando desde ayer, funciona) pero no es compatible con las nuevas características de 5.3 (¿quizás necesites una?) PHP5.3 será (tal vez) compatible con Yii 2.0 - en un futuro lejano (2012)

-Yii tiene una comunidad pequeña (pero muy buena).

-no hay soporte profesional (puede publicar errores con esperanza, cualquiera lo arreglará, o lo arreglará usted mismo)

-Yii es OO PHP. Piense en eso manejando con Data-Objects. Es posible cargar gran cantidad de datos en objetos de datos. Pero tenga en cuenta que su servidor de aplicaciones tiene suficiente RAM (pero eso no es algo específico de Yii)

En absoluto: me gusta Yii y si su aplicación no es compleja, se divertirá mucho y será una aplicación agradable y poderosa al final.


Solo para agregar, Yii escala muy bien en ambas direcciones (es decir, la adición de funciones con nuevos módulos, etc.) y es uno de los marcos de php más rápidos en lo que respecta al rendimiento). El único inconveniente que puedo ver con Yii es que tiene una base de usuarios menor, por lo que es un poco menos compatible que algunos otros marcos, pero esto está cambiando rápidamente. La mejor parte de Yii es la generación de código basado en gii que te ayuda a comenzar muy rápido una vez que te acostumbras.


Yii es un framework PHP muy flexible, ligero y fácil de aprender.


Aunque creo que podrías estar haciendo la pregunta incorrecta.

Tienes cinco meses para construir un sistema ERP. Las principales preocupaciones deberían ser:

  • seguridad. Estás tratando con dinero y detalles personales.
  • confiabilidad. El tiempo de actividad es probablemente un gran problema (al menos durante las horas de trabajo)
  • consistencia. No quiere arriesgarse a perder datos o corromper datos
  • productividad del desarrollador Cinco meses no es mucho tiempo, construye lo que describes
  • mantenibilidad Parece que este es un activo empresarial central, con una vida útil de años; es probable que requiera mantenimiento y extensión en el futuro.
  • escalabilidad. Necesitas apoyar a decenas de miles de trabajadores, cada uno con muchas tarjetas de tiempo, tiradas de pago, etc.
  • actuación. Desea que la aplicación responda.

Preguntaría si el rendimiento es una prioridad absoluta, no debería ser lento, pero muchos sistemas ERP son un poco lentos. Las optimizaciones de rendimiento a menudo significan intercambiar otras prioridades, por ejemplo, un sistema ORM mejora la productividad del desarrollador, pero puede ser más lento que el SQL hecho a mano.

En cuanto a la escalabilidad, siempre que tenga un esquema razonablemente diseñado, no creo que 20K empleados sea un gran desafío para cualquier RDBMS moderno con hardware decente.

Entonces, si yo fuera tú, probablemente iría con PostgreSQL, por las razones que menciona Denis. Nunca usé Yii, pero parece perfectamente razonable. Usaría ORM hasta que encuentre una situación en la que el rendimiento sea realmente inaceptable.

Críticamente, crearía un marco de prueba que le permite monitorear el rendimiento y la escalabilidad durante el ciclo de desarrollo (uso JMeter para esto) y solo realizar optimizaciones de rendimiento si es necesario. Sacrificar todas las demás cosas, especialmente la productividad y la capacidad de mantenimiento, en nombre del rendimiento, antes de que sepa que tiene un problema, tiende a crear soluciones demasiado complejas y, a su vez, tienden a tener más problemas de seguridad y de mantenimiento.