2009-12-30 11 views
6

He heredado una aplicación de empresa que usa 58 tablas por "objeto" y la aplicación puede tener N objetos. Estamos viendo una instalación de 75 a 100 objetos para una aplicación, que es de 4300-5000 tablas.1000's de tablas o instancias múltiples de mysql?

Lo que intentamos averiguar es si queremos utilizar una base de datos y prefijar los nombres de tabla por objeto, o usar una base de datos por objeto (la aplicación admite ambas). La única diferencia sería para cada instalación de la aplicación, necesitaríamos instancias mysql adicionales en puertos diferentes si tuviéramos que hacer por base de datos.

¿Alguien ha hecho algo similar? ¿Hay algún problema (fuera de la administración) de tener más de 4000 tablas en una base de datos?

Edición

Gracias por las actualizaciones. En cuanto a un montón de los comentarios

1) La compañía paga muy bien ... Sería tonto no aceptar este trabajo. Deseo simplemente escribir un gran código poner el $$ en mi cuenta bancaria

2) Nuestros clientes están contentos con el producto. Hemos pensado en volver a escribirlo, pero aparte de los costos, extrañaríamos el mercado. Si bien la estructura es mala, la aplicación funciona mejor que la que tienen la mayoría de los clientes.

3) Objeto no es el mejor término ... no es como un objeto/clase, sino objetos dentro de la aplicación. Supongo que puedo decir balde en su lugar.

+0

Un buen artículo sobre el mismo problema por el que está preguntando: http://bit.ly/5Zs9aC –

+0

Puede tener muchas tablas en una base de datos, pero los productos específicos tienen limitaciones específicas. Para mysql vea este excelente artículo: http://www.askbjoernhansen.com/2008/02/14/10000_tables_in_one_mysql_database.html ¿Es posible que su predecesor haya creado tantas tablas como una forma de partición? ¿Es un objeto como un único cliente disperso en varias tablas (verticales, columnas distribuidas) o es más que toda la colección de clientes se divide en varias tablas (horizontales, filas distribuidas)? –

+3

¡Si bien no puedo dar una respuesta, puedo expresar mi simpatía! –

Respuesta

0

Difícil de ver sin ver el esquema real (y por qué en la Tierra un objeto puede requerir tablas 58), pero si alguna vez necesita unirse a estas tablas, deberá guardarlas en una única base de datos.

Tener muchas tablas MyISAM en una base de datos significa que usarlas todas a la vez significa una necesidad de tener una gran table_cache.

2

Si repite 58 tablas cien veces, sugeriría que se hayan pisoteado las reglas de normalización. No es probable que su empresa revise el diseño del esquema para este producto, pero lo recomendaría en función de la información que ha proporcionado.

No empeore la distribución de las bases de datos. ¿Cómo puede ayudar la latencia?

2

MySql almacena cada tabla como un archivo, y no hay límite aparte de su sistema operativo y su disco duro. Sin embargo, hay una razón por la que no se discute con frecuencia: tener miles de tablas es, casi con seguridad, lo incorrecto, el esquema de la base de datos probablemente necesite un rediseño.

+0

re cada archivo como un archivo: en realidad no, InnoDB, por ejemplo, almacena todos los datos en un solo archivo, a menos que se establezca una opción específica. – shylent

2

Por extraño que parezca, HE VISTO este tipo de aplicaciones, y lo mejor que puedo decir es que vuelva a escribir la aplicación. Deje de vender la aplicación hasta que el diseño se pueda repensar para que NO incluya 58 tablas por objeto.

1

Trabajé para una empresa que implementó algo similar a lo que usted está hablando. Estábamos usando un producto llamado RAMCO, y se implementó de cualquier manera, y optamos por mantener todas las tablas en una única base de datos. Elegimos este método por varias razones (incluida la administración más sencilla, las copias de seguridad, la replicación y la agrupación en clústeres). Lo interesante de esto es que, si bien tienes un modelo de datos tan desarticulado, la cantidad real de datos que ingresas no es más de lo que colocarías en un modelo diferente. Por esta razón, nuestras copias de seguridad tenían aproximadamente 12 GB sin comprimir. En cuanto al motor, puede manejar muchas tablas sin problemas.

Dicho esto, estoy de acuerdo con todas las demás respuestas hasta el momento que su empresa definitivamente debe reconsiderar su arquitectura de datos (o si fuera usted, volvería a pensar si realmente quería trabajar para una empresa que implementaría algo como eso). En mi caso, la compañía se negó a dejar el producto, así que encontré otro empleo.

0

Siempre que pueda garantizar que el número de tablas no aumentará sin límite, tener un número razonablemente grande de tablas no es un problema.

Realmente los principales problemas son la memoria caché de tabla (que realmente debería ser más grande que el número total de tablas, a menos que desee que el rendimiento sea satisfactorio) y las limitaciones en el motor y el sistema operativo.

Utilizamos regularmente MyISAM con más de 2000 tablas por servidor, no hay ningún problema específico si lo ha ajustado y probado para que funcione con ese volumen.

Asegúrese de realizar pruebas de rendimiento con el número previsto de tablas. Abrir las mesas puede ser costoso, así que asegúrese de no hacerlo más de lo necesario.

Algunos motores (MyISAM) arrojarán algunos datos almacenados en la memoria caché (bloques clave solamente) al cerrar una tabla, esto es increíblemente malo si los cierras con regularidad.

Dependiendo de las opciones, su motor puede requerir uno o más descriptores de archivo por mesa abierta. Normalmente (en Linux de todos modos) mysql debería sintonizar correctamente el número máximo usando ulimit, pero en algunos casos puede que no.

En algún momento puede que se tope con un límite de todo el sistema operativo (32k de forma predeterminada, creo que en algunas versiones de Linux), y tiene que aumentarlo con un sysctl o algún otro ajuste.

Cuestiones relacionadas