Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-02-2014
JAI_ME JAI_ME is offline
Miembro
 
Registrado: ene 2006
Posts: 188
Poder: 19
JAI_ME Va por buen camino
Sugerencia proyecto 20.000 usuarios

Buenas tardes, me han pedido una opinión sobre un proyecto grande el cual lo usarán 20.000 clientes aproximadamente y cada uno de estos realizará entre 100 y 200 movimientos diarios en la bases de datos, el proyecto tiene aproximadamente 120 tablas.
El lenguaje de programación que sugerí es php porque soy amante de lo libre y mysql como base de datos.
Como no estoy seguro de la concurrencia de mysql y que soporte este volumen de información sugerí que anualmente se cree una base de datos nueva con los saldos finales de la anterior, con esto
garantizariamos velocidad en los datos.
Se que no es la mejor forma de hacerlo, por eso les pido su opinion y compartan su experiencia.
No se si mysql seria la mejor opcion.
__________________
JaiMelendez
Responder Con Cita
  #2  
Antiguo 04-02-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
100/200 movimientos diarios es poca cosa. Y me parece un estimado muy bajo. 20.000 clientes (usuarios?) implica potencialmente problemas de contencion dependiendo de cuantos esten actuando a la vez sobre el sistema

MySql como tal (y practicamente cualquier motor de BD) te puede dar la talla, aunque si realmente estas por las opciones open source, Postgres es una opcion mejor en casi todos los aspectos (licencia, tecnologia, estabilidad, flexibilidad, etc), pero principalmente porque postgres tiene una mejor oferta en programabilidad que me parece es insuperable entre las opciones open source.

Con todo, el nucleo de cualquier sistema es mas su diseño/arquitectura que las tecnologias especificas que uses -aunque saber elegirlas es importante, especialmente si te ahorran trabajo, son mas robustas, etc- y tambien el como se hace el despliegue de los servidores (uso de caches, config de hardware, balanceo de cargas, etc).

Aqui es donde tener la experiencia adecuada se notas mas. Es muy facil "machetear" un sistema que parece que funciona cuando no se tiene muy claro las cosas, pero otra es tener un sistema robusto. El que creas que crear bases de datos por año es lo que se necesita para que un sistema sea rapido da mala espina .


Tienes experiencia de la buena con php/mysql? Si no es asi, con que? Es mejor ir con malo conocido, a menos que tengas bases suficientes para reconocer cuando y porque usar algo nuevo es mejor. Mas importante es como diseñes el sistema, el uso de mediciones para no adivinar que es lo que hace algo rapido/lento.

Imaginate hacer todo el codigo de crear BDs por año, mover saldos, luego descubrir que necesitas hacer consultas a los historicos y todo eso... cuando REALMENTE no hay nada que *demuestre* que eso es necesario. Te sorprenderia lo bien que se mueve una BD con los indices/tablas adecuados y el hardware que es. Si pa' rematar sabes como usar las opciones avanzadas del motor, se puede sacar mucho jugo a un sistema:

http://es.wikipedia.org/wiki/Optimiz...%B3n_prematura
Cita:
En informática, el antipatrón de diseño la optimización prematura ocurre cuando un programador permite que las consideraciones de costo en tiempo o espacio afecten el diseño de un componente de software antes de tener un diseño correcto, lo que puede resultar en un diseño más complicado que lo necesario.
Tu prioridad #1 es hacer un diseño correcto, luego rapido. Es facil hacer rapido un programa correcto, pero es jodido hacer un programa rapido y luego correcto, y es imposible hacer un bodrio de codigo espaguetti rapido a punta de optimizacion voodo.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 04-02-2014
JAI_ME JAI_ME is offline
Miembro
 
Registrado: ene 2006
Posts: 188
Poder: 19
JAI_ME Va por buen camino
muy importante apreciación, efectivamente cuando hablo de clientes hablo de usuarios a quienes se les instalará el aplicativo, estos usuarios harán diariamente entre 100-200 e incluso 300 movimientos diarios (consulta, inserciones, actualizaciones y demas) como son 20.000 usuarios conectados es bastante probable que halla mucha concurrencia, tengo experiencia en php y mysql, pero realmente lo que quiero es que el sistema sea robusto y que no se me cuelgue con el tiempo.

Por eso les solicito su opinión ya que mi experiencia ha sido para pequeñas bases de datos con pocos usuarios.

Que usuarian ustedes si les pidieran hacer un tipo de sistema como este.

php y mysql son una buena opción que recomiendan.

gracias.
__________________
JaiMelendez
Responder Con Cita
  #4  
Antiguo 05-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No das información sobre lo que tienes que hacer, es imposible que te ayuden con más exactitud: soft, hard, internet, servidor, sistema, etc.
Responder Con Cita
  #5  
Antiguo 05-02-2014
JAI_ME JAI_ME is offline
Miembro
 
Registrado: ene 2006
Posts: 188
Poder: 19
JAI_ME Va por buen camino
Gracias casimiro,

Pues la idea es hacer un sistema donde los usuarios registren a través de internet la data de su empresa, clientes, precios, movimientos (compras, ventas, etc).

La parte de hardware no esta definida pero debe cumplir con todos los requerimientos para que no se cuelgue el sistema, esta aplicación sera accedida desde el navegador del cliente que son aproximadamente son 20.000 usuarios, al principio deben registrar todos sus productos y demás lo que al principio sera una carga pesada para el servidor, con el tiempo y lo que es normal ingresarán diariamente entre 200-300 registros aproximadamente.

Pensaba en un postgresql por lo que comento mamcx pero personalmente me gusta mas MySql.

que harían ustedes en mi lugar.

Gracias
__________________
JaiMelendez
Responder Con Cita
  #6  
Antiguo 05-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me gusta mucho más postgresql.
Por supuesto, tendrás que contratar o instalar servidores linux
Responder Con Cita
  #7  
Antiguo 05-02-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Estoy haciendo una cosa parecida (la 2da version de BestSeller) con miras a aguantar un numero ilimitado de usuarios (eso sueño!). Es un cuento mas de arquitectura que del componente per-se, asi que desde el punto de soportar cargas mysql, postgres, firebird, sql server dan igual la talla. La ventaja de postgres esta en sus mejores capacidad generales (es tan capaz como oracle, solo que mucho mas simple) y que puedes programarlo de formas muy variadas. Desde que lo estoy usando, me sorprende cada dia mas - siempre que pienso: Sera que podria hacer esto mejor en PG? la respuesta es siempre si -.

MySql esta mas optimizado para cargas de lecturas, pero como BD para un servicio altamente transaccional PG es mejor.

----

El lio con todo esto es mas como manejar muchos usuarios concurrentes que la cantidad de GB de los datos. PG y cualquier BD funciona muy bien incluso llegando a los terabytes (si tienen el servidor correcto!), asi que el lio es mas como manejar la concurrencia. Y la disponibilidad, y los backups, y todo lo demas.

Hay mucha informacion en este sitio que muestra ideas generales:

http://highscalability.com/blog/2008...ion-users.html
(Este es solo un ejemplo)

Observa este link, de como se escala de forma normal un sitio web (es usando django/python + PG pero la idea es general a cualquier lenguaje), las graficas hacen muy claro el tema:
http://www.djangobook.com/en/2.0/chapter12.html

A nivel general:

- Asegurate que respetas el principio de la programacion "state less"
- No tengas un unico punto de falla. Osea, debes tener al menos un par de TODO. 2+ Servidores web. 2+ Servidores de app. 2+ Instancias de PG, etc. O, que lo pruebes desde el principio asi.
- Como servidor web? nginx. Olvidate de apache. Combina con uwsgi, gunicorn o similar. Aprende como se usa un servidor de cache como memcached y/o redis. No hagas el cache tu mismo! Redis es lo mejor que existe. Memcache es lo que le sigue.
- La BD es la parte mas complicada. Mientras 1 servidor potente te puede dar pa largo, es buena idea tener al menos 2 motores (ej: Un master y un esclavo). Esto no solo es lo sano, sino que ademas simplifica el hacer backups (porque puedes hacerlo contra el esclavo sin poner mas esfuerzo en el equipo que maneja la BD):

http://www.postgresql.org/docs/9.3/i...ilability.html

- No solo debes preocuparte por el servidor web y la BD y creer que eso es todo. Como monitoreas la app? Como obtienes los logs? Como automatizas todo el proceso? Dependiendo de que tan critico sea el tema de la disponibilidad estas cosas se vuelven importantes.

- Usa un proveedor de hosting serio. NO me vayas a desplegar con gente que no sabe o hosting "baratos"!. De entrada: RackSpace, Linode, Microsoft Azure, DigitalOcean (de estos RackSpace & linode tienen mejor fama). son los que te dan mas o menos buen soporte y saben del cuento. Amazon, Google y otros es mas "barato" pero tienes mas responsabilidad (aparte que ni google ni amazon son buenos para nada de nada en soporte, aun si eres un cliente gigante).

- Si quieres lo mas facil que existe: https://www.heroku.com/. Incluso te quitas el dolor de como se administra y escala la BD: https://www.heroku.com/postgres
- Si quieres un poco mas de flexibilidad y control (y poder elegir el proveedor de hosting) entonces https://www.cloud66.com/
Esto es importante en especial si no tienes a la mano gente que sea buen sysadmin. Hacer eso bien es un dolor de cabeza y heroku/cloud66 son la gente que lo simplifica y te permite enfocarte en la programacion. Aun asi, igual tienes que pensar en lo anterior.

A menos que tengas sysadmin que sepan como escalar, administrar y monitorear servidores y todo eso, es mejor que te vayas cpon uin proveedor de cloud.
__________________
El malabarista.

Última edición por mamcx fecha: 05-02-2014 a las 17:52:50.
Responder Con Cita
  #8  
Antiguo 05-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
...
Exacto, lo importante no es si usar mysql o postgresql, hay mucho más en lo que pensar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
sugerencia proyecto web JAI_ME MySQL 15 28-03-2012 19:09:02
Sugerencia ricardo_yah OOP 10 06-11-2010 03:17:59
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


La franja horaria es GMT +2. Ahora son las 12:19:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi