2012-04-01 18 views
6

tengo dos rutas,Rendimiento MySQL - Número de tablas vs. Número de filas

1) la creación de sub-tablas para cada usuario y almacenar su contenido individual

2) la creación de algunas mesas y almacenar datos de todos los usuarios en ellos.

por ejemplo.

1) 100.000 mesas cada una con 1000 filas

2) 50 mesas cada una con 2.000.000 de filas

quiero saber en qué ruta es la mejor y eficiente.

Contexto: como Facebook, para millones de usuarios, sus publicaciones, fotos, etiquetas. Toda esta información está en algunas tablas gigantes para todos los usuarios o cada usuario tiene sus propias tablas secundarias.

+1

Puedes ver el video curso gratuito "Introducción a las bases de datos": http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases –

Respuesta

7

Estos son algunos de los pros y los contras de estos dos enfoques en MySQL.

1. Muchas mesas pequeñas.

Contras:

  • Más mesas simultáneas utilizadas significa más descriptores de ficheros necesarios (consultar this)
  • Una base de datos con 100.000 mesas es un desastre.

Pros:

  • mesas pequeñas significa índices pequeños. Los índices pequeños se pueden cargar por completo en la memoria, lo que significa que sus consultas se ejecutarán más rápido.
  • Además, debido a los índices pequeños, la manipulación de datos como inserciones se ejecutará más rápido.

2.Unos grandes mesas

Contras:

  • Una enorme mesa implican muy grandes índices. Si su índice no se puede cargar por completo en la memoria, la mayoría de las consultas serán muy lentas.

Pros:

  • La base de datos (y también su código) es clara y de fácil mantenimiento.
  • Puede usar el particionamiento si sus tablas se volvieron tan grandes. (marque this).

Desde mi experiencia, una tabla de dos millones de filas (he trabajado con 70 millones de filas de tablas) no es un problema de rendimiento en MySQL si puede cargar todo su índice activo en la memoria.

Si tiene muchos usuarios concurrentes, le sugiero que evalúe otras tecnologías como Elastic Search que parecen encajar mejor en este tipo de situaciones.

1

Crear una tabla para cada usuario es el peor diseño posible. Es una de las primeras cosas que le enseñan en la clase de diseño db.

0

La tabla es un componente lógico fuerte de una base de datos y, por lo tanto, se utiliza para muchas de las tareas de mantenimiento por RDBMS. P.ej. es habitual configurar el espacio de archivos de tabla, las limitaciones, la cuota, el espacio de registro, el espacio de transacción, el espacio de árbol de índice y muchas otras cosas. Si cada tabla obtiene su propio archivo para ingresar datos, obtendrá grandes tiempos de ida y vuelta al unir mesas o lo que sea.

Cuando cree muchas tablas, tendrá una gran sobrecarga de mantenimiento. Además, estarás negando la naturaleza misma de las fuentes relacionales. Y supongamos que está agregando registros a una base de datos, ¿creando una nueva tabla cada vez? Sería un poco más difícil en tu código.

Pero, de nuevo, podría intentarlo por sí mismo.

+0

Gracias Dmitriy ... Es útil. –

+0

De nada :) –

+0

@DmitriyReznik si no tengo coincidencias en mis consultas, ¿está bien tener muchas tablas como 100k – Rams

Cuestiones relacionadas