FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
sugerencia proyecto web
Buenas tengo un proyecto web para unas escuelas de aproximadamente 80 tablas, tengo pensado hacerlo con php y sqlserver, el problema que veo es que son aproximadamente 500 escuelas, mi duda es como manejar esta información en mi base de datos ya que estoy seguro se pondrá lento al cabo de 1 año, ya que es un año de estar ingresando información todos los días, todas las escuelas.
Se que esos motores de bases de datos son robustos pero es muchísima información. Tenia pensado crear automáticamente una base de datos con las mismas características (80 tablas) por cada escuela que se registre y manejar su información de forma independiente y usar mysql porque la carga de información se reduce muchísimo y me ahorro lo de la licencia, inclusive también dividir estas bases de datos individuales por años. es decir basededatos1-2011, basededatos1-2012. basededatos2-2011, basededatos2-2012. Pero en dos años ya serian 800 bases de datos. Otro inconveniente con este sistema, es que si quiero hacer una consulta general de todas las 400 escuelas no lo podré hacer. Que me recomiendan.
__________________
JaiMelendez |
#2
|
||||
|
||||
Necesitamos mucha más información de la que nos has dado, pero en principio, con sólo una BD para acceder todos es más que suficiente.
|
#3
|
|||
|
|||
Cita:
Gracias casimiro que otra información necesitas, estoy dispuesto a brindar cualquier información con el fin de aclarar mis dudas, mysql si soporta esta cantidad de informacion. por lo pronto te puedo decir que este proyecto lo realizare con php y que mas o menos 60 de las 80 tablas aproximadamente son de movimiento y que día a día están trabajando sobre ellas.
__________________
JaiMelendez |
#4
|
||||
|
||||
Cita:
Podemos hacer una comparación, sólo por hacernos una idea, dices que son 500 escuelas y supongo que almacenarán las fichas de los alumnos y sus notas, entre otras cosas. Pues ahora imagina sitios como meneame.net, digg.com, reddit.com, etc. que tienen miles de conexiones abiertas continuamente las 24 horas del día y con usuarios subiendo noticias, mensajes, comentarios. Creo que los 3 sitios esos están hechos con php+mysql y no tienen ningún problema después de años de acumular información. Así que lo importante, lo principal, es que hagas un buen análisis de lo que vas a necesitas y crear una estructura de datos correcta. Es lo principal, la base donde se sustentará después todo el sistema, así que tienes que aplicarte en ese apartado. También clubdelphi funciona con php+mysql, aunque la información acumulada son muchos menos de los que puede tener los sitios que he mencionado antes; Clubdelphi (24.03.2012): Temas: 73.912, Posts: 421.141, Miembros: 78.871 |
#5
|
|||
|
|||
Gracias Casimiro, por compartir su opinión.
cualquier duda le comento. de nuevo gracias.
__________________
JaiMelendez |
#6
|
||||
|
||||
Lo que debes hacer es investigar como hacer apps escalables:
http://www.slideshare.net/techdude/s...and-approaches http://www.slideshare.net/jbellis/wh...se-scalability Como te explica el 1er slide, se puede lograr una arquitectura escalable con casi cualquier combo tecnologico. En el caso especifico de sql server, www.stackoverflow.com es un sitio que ppalmente esta corriendo sobre win+sql server: http://highscalability.com/blog/2010...koverflow.html Y luego cuando crecieron aun mas: http://highscalability.com/blog/2011...n-page-vi.html ----- Ten en cuenta que la nueva version de sql server (http://www.microsoft.com/sqlserver/en/us/default.aspx) tiene una serie de mejoras que *definitivamente* ayudan en estos casos. ----- Con todo, las estimaciones que estas informando no son tan problematicas como suenan. Eso es un sitio "pequeño"/"medianito" en terminos de escalabilidad web. Con relacion a como estructurar el sitio web, hay dos escuelas basicas: Metes todo en la misma BD y separar por campo (ej CompanyID) o creas BD por cada escuela + una central: http://stackoverflow.com/questions/2...tabase-or-many (mira varios de estos) Ambos tienen sus pro y contras. Tambien ciertos motores empujan hacia una arquitectura y otros a la otra. Debes leer primero un rato sobre esto para que tengas la mente clara.... -------------------- Ahora bien, lo de arriba es lo basico. Una cosa en la que parece que no has pensado: Vas a administrar toda esa infraestructura??? Para www.bestsellerapp.com estoy armando un servicio parecido, y lo que mas me ha preocupado es como administrar: Configurar servidor, provisionarlos, mantener la integridad del sitio, los backups, la seguridad, etc... este aspecto se vuelve rapidamente en un lio inmenso (en mi caso: integridad y backups confiables!). Aqui es donde el error de tratar de ahorrarse unos pesos te puede salir carisimo. Seria bueno que analizaras si mas bien utilizas un PAAS (plataforma como servicio) como https://www.windowsazure.com/, http://www.heroku.com/, https://appharbor.com/, http://www.rackspace.com/cloud/ u otro. Quitarse de encima la carga de la administracion de todo eso es un aspecto importante. Por ejemplo, yo elegi Heroku + Azure. El hosting me valdra unos US 300-350/mes. Caro? SUPERBARATO. Lo que me ahorro en tiempo y salarios? Un administrador de sitios web solo valdria unos US 800 (sueldo mediocre), y la verdad, en el caso de heroku (https://postgres.heroku.com/) me quitan de encima la preocupacion del manejo de la BD del todo. Calcula bien este punto, es el dolor de cabeza grande. Veras que el desarrollo en si no es nada.
__________________
El malabarista. |
#7
|
||||
|
||||
Evidentemente, ese proyecto es mucho más complejo de lo que parece, no es algo que se deba dejar en manos de novatos o incluso de personas sin muchísima experiencia, son bastantes factores a tener en cuenta.
Ahora bien, si hablas de escalabilidad, el consejo no me parece demasiado acertado, aconsejar MS sql server, es anclarse a windows, para siempre. Con todos los problemas que ello puede acarrear, y no ya sólo en costes de licencias de MS sql server y windows, que serán enormes. Yo encuentro mucho más escalable usar lo que JAI_ME ha indicado, mysql, aunque por supuesto seleccionaría firebird o postgresql, totalmente escalable, que pueden pasar desde pequeños servidores windows hasta los más grandes superordenadores existentes, con linux, evidentemente. El mantenimiento del sistema, para un caso como el descrito, creo que tampoco es demasiado complejo si se hace bien desde el inicio. Pero, por supuesto, todo esto no son más que divagaciones porque JAI_ME no ha dicho nada de lo que realmente le han pedido. Escalabilidad: En telecomunicaciones y en ingeniería informática, la escalabilidad es la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para extender el margen de operaciones sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos. Por ejemplo, un sistema de procesamiento y transacción en línea o un sistema administrador de base de datos escalable pueden ser actualizados para poder procesar más transacciones añadiendo por medio de nuevos procesadores, dispositivos y almacenamiento que se pueden implementar fácil y transparentemente sin apagarlos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 24-03-2012 a las 22:08:26. |
#8
|
||||
|
||||
Mi ERP es multiempresa.
En una tabla se definen las empresas y a cada una se le asigna un ID. En casi todas las demás tablas, agrego este ID para identificar a qué empresa pertenece el dato. Por ejemplo Clientes tiene una estructura ID_EMPRESA, ID, NRO_CLIENTE, NOMBRE, ... Si haces un índice en las tablas que tenga en cuenta primero el ID de la escuela y luego el ID de la tabla no deberías tener ningún problema. En el caso anterior, el indice es ID_EMPRESA, ID. Tengo tablas con millones de registros y la búsuqeda indexada no tarda nada (milisegundos) Trabajo con Firebird y te lo recomiendo! Pequeño ejemplo de como yo armaría la base de datos: ESCUELA : ID, NOMBRE, DATOS ... |
#9
|
|||
|
|||
Gracias a todos por sus comentarios, la verdad me gusta mucho mysql y mucho mas firebird por su ambiente gráfico, en un proyecto configure php con firebird y me funciono perfecto, la cuestión es que no estoy seguro que la empresa donde alojare la pagina brinde el servicio con firebird, pienso comprar el servidor ya que estoy de acuerdo con lo que dice mamcx en cuanto a copias de seguridad, mantenimiento del servidor, etc, etc. eso es un verdadero dolor de cabeza y un gran mundo aveces costoso, soy responsable de esa información y ese trabajo se lo quiero dejar a la empresa con la que contrate.
Lo que agrego nuestro amigo duilioisola me gusto por lo menos ya tengo una referencia que no se cuelga y funciona bien teniendo muchísima información y mas con un motor de base datos gratuito como firebird. Comparto muchísimas opiniones con Casimiro Notevi me gusta mas lo libre que windows sin demeritarlo. Cita:
ESCUELA : ID, NOMBRE, DATOS ... PROFESOR: ID_ESCUELA, ID, NOMBRE, DATOS ... CLASE : ID_ESCUELA, ID, HORARIO, ID_PROFESOR, DATOS ... MATERIA : ID_ESCUELA, ID, NOMBRE, DATOS ... ALUMNO : ID_ESCUELA, ID, NOMBRE, DATOS ... //Clases a las que asiste un alumno ALUMNO_CLASE : ID_ALUMNO, ID_CLASE //Control de asistencia a las clases ALUMNO_ASISTENCIA : ID_ALUMNO, ID_CLASE, FECHA, Se me olvidaba preguntarles si conocen una buena empresa hosting que tenga un servicio excelente, y donde pueda configurar firebird. gracias a todos.
__________________
JaiMelendez Última edición por JAI_ME fecha: 26-03-2012 a las 16:30:17. |
#10
|
||||
|
||||
La velocidad no cambiaría nada, pero es que ¡¡¡no puedes quitarlo!!! si quieres tener controlado qué pertenece a cada escuela, porque todas van a estar en una misma BD.
|
#11
|
||||
|
||||
Cita:
Con respecto a del servicio "excelente", creo que el único excelente en el PaaS es Google AppEngine. Lo único malo y por lo que se quejan algunos (malos) desarrolladores es que tienes que cambiar tu forma de pensar para poder desarrollar una aplicación para este servicio. Pero apartando cuál PaaS usar, quiero mencionar algo que nadie ha comentado. Si quieres una aplicación escalable, usa memcache lo más que puedas. Aunque contrates el mejor PaaS, sino utilizas memcache tu aplicación nunca será escalable y te saldrá muy pero muy costosa mantenerla. Saludos! |
#12
|
||||
|
||||
Cita:
Como te escribi solo hay dos escuelas: O pones todo en una tabla y particionas por un(os) campo(s) como los que te pusieron o particionas por base de datos. En el primero, si la BD se crece mucho (mucho es mucho: millones y millones) y no tienes RAM para cargar los indices en memoria y el motor no lo aguanta, se quedaria "colgado". En esta escuela, debes saber poner indices y ser muy juicioso en el manejo de los SQL para cargar solo lo necesario, debes por todos lados injectar los campos que particionan la tabla y hay JOINS a lo loco. Los backups son dificiles: Como sacas solo un colegio? Y los restore peor aun. Pero es facil hacer reportes. Y hacer cambios globales, como agregar un campo. Pero replicar es mas simple ya que es solo un BD. La otra escuela, requiere mayor complejidad de administracion (ej: hacer backups, o sea configurarlos N veces), pero los datos son aislados de forma natural, puedes mover de forma simple los datos de una empresa, puedes meter facilmente varios servidores y escalar facil porque mueves unas empresas al uno y otras al otro, pero hacer reportes es un lio (y con FB no veo como sacar una consulta que agrupe muchas BD) y los cambios en los esquemas hay que repetirlo por N bd, sin un pool de conexiones pierdes velocidad al estar conectando y desconectando a N bd, los planes de ejecucion los pierdes al moverte entre BD, etc.. El codigo es mas simple (no hay que injectar campos ni tanto join) y las consultas salen mas facil y rapido. Gastas mas espacio en disco, y ram. O no. Es difcil adivinarlo. Eso es pa empezar. Cita:
P.D. Quizas sea buena idea que evalues postgres. Su concepto de lo que es una BD encaja muy bien con la escuela de "bd por compañia" y a la vez es viable hacer un query a todas las BD. De hecho, postgres es asi: Una BD = Un cluster de "esquemas". Un esquema en postgres = Una bd en mysql, firebird. Por lo tanto, queda una sola instancia de BD que configurar y administrar, y tienes un poco mas simple el manejo de los esquemas. Ademas, tienes opcion de usar https://postgres.heroku.com/, que es la razon #1 por la que estoy con postgres ahora. Ya depende que economicamente te de resultado.
__________________
El malabarista. Última edición por mamcx fecha: 26-03-2012 a las 18:24:39. |
#13
|
|||
|
|||
Gracias de nuevo, al parecer lo haré todo en una sola base de datos, pero sigo teniendo la duda, mysql o postgresql.
en cuanto a la relaciones anteriores No se porque se perdería la integridad referencial, si por lo menos la tabla ALUMNO_CLASE tiene el id del alumno y lo puedo relacionar con el ID de la tabla alumno y esta ultima me dice a que escuela pertenece. Lo mismo con la tabla ALUMNO_CLASE saludos a todos.
__________________
JaiMelendez |
#14
|
||||
|
||||
Tienes razón, esos campos no son necesarios en esas tablas.
Por otro lado, quizá debas considerar el caso en que un profesor de clase en varias escuelas o un alumno tome cursos en varias escuelas. // Saludos |
#15
|
||||
|
||||
Cita:
http://wiki.postgresql.org/wiki/MySQL http://stackoverflow.com/questions/1...ls-environment http://stackoverflow.com/questions/1...sql-over-mysql En lineas generales? MySql esta optimizado para ser rapido en lecturas a costas de integridad de datos, a menos que se use un motor de almacenamiento diferente. Ya que la seleccion del almacenamiento altera el funcionamiento, hay cosas que funcionan de una manera u otra. Basicamente, mysql muy bueno para hacer paginas web, pero no para datos transaccionales. Postgres es mas orientado a ser robusto a nivel transaccional y le dan mucha prioridad a la estabilidad de datos. Un punto a favor es que postgres es una comunidad unificada - incluso quienes comercialmente trabajan sobre postgres como EnterpriseDB- mientras MySql ahora es una serie de "forks" en especial MySql original que lo mantiene Oracle y MariaDB que es el intento por ser mas opensource. Como notas por las referencias que te doy, estoy mas inclinado a Postgres. Lo estoy usando ahora, y me ha sorprendido: Tiene un esquema de programacion muy flexible y potente. Me parece que es rapido, facil de configurar y flexible a lo loco. La unica cosa que tiene MySql es su facilidad para hacer un esquema de Maestro de escritura-Esclavos de solo lectura que es ideal para escalar sitios web, pero desde la version 9.1 toda la historia de la escalabilidad horizontal de postgres se ha vuelto mucho mejor. En general, si estas acostumbrado a Sql Server y/o Firebird, pienso que postgres es mejor alternativa. Casi todo lo que hago con Sql Sever a nivel de BD (Sql server tiene otras cosas que no tienen los motores opensource) lo hago en postgres. Incluso me pregunto: Sera que podria en postgres hacer esto? Y puff! resulta que si. Un punto muy bueno son sus modulos: http://www.postgresql.org/docs/9.1/static/contrib.html Hay modulos para hacer cosas muy potentes. Dale una mirada.
__________________
El malabarista. |
#16
|
|||
|
|||
Gracias Roman, en conclusión definitivamente php-postgresql y una sola base de datos ? en caso que ustedes los fueran a desarrollar
__________________
JaiMelendez Última edición por JAI_ME fecha: 28-03-2012 a las 19:22:25. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Sugerencia | ricardo_yah | OOP | 10 | 06-11-2010 03:17:59 |
Una sugerencia... | david_uh | Varios | 6 | 06-06-2007 20:10:10 |
Una sugerencia por favor Sugerencia !! | yepixxx | Firebird e Interbase | 6 | 13-03-2007 19:07:10 |
Sugerencia | turminator | Varios | 2 | 30-06-2006 19:42:28 |
|