Grandes tablas de MySQL

votos
3

Para una aplicación web que estoy desarrollando, necesito almacenar una gran cantidad de registros. Cada registro consistirá en una clave principal y un único valor de cadena (short-ish). Espero tener aproximadamente 100GB de almacenamiento disponible y me gustaría poder usarlo todo.

Los registros se insertarán, eliminarán y leerán con frecuencia y debo usar una base de datos MySQL. La integridad de los datos no es crucial, pero el rendimiento sí lo es. ¿Qué problemas y dificultades puedo encontrar y qué motor de almacenamiento sería el más adecuado para la tarea?

Muchas gracias, J

Publicado el 09/12/2008 a las 20:58
fuente por usuario
En otros idiomas...                            


6 respuestas

votos
5

Independientemente de la solución que utilice, dado que su base de datos tendrá mucha escritura, debe asegurarse de que toda la tabla no se bloquee en las escrituras. Esto descarta MyISAM, que algunos han sugerido. MyISAM bloqueará la tabla en una actualización, eliminar o insertar. Eso significa que cualquier cliente que quiera leer en la mesa tendrá que esperar a que termine la escritura. No sé qué hace el INSERT IGNORE LOW PRIORITY, probablemente algún hack alrededor de la mesa :-)

Si simplemente debe usar MySQL, querrá InnoDB, que no se bloquea en la escritura. No sé cómo MySQL hace las tablas InnoDB de VACUUM (InnoDB es MVCC como PostgreSQL y, por lo tanto, debe limpiarse) ... pero tendrá que tener esto en cuenta si realiza muchas actualizaciones o eliminaciones.

Respondida el 25/02/2009 a las 22:23
fuente por usuario

votos
3

Todo depende del patrón de lectura / escritura que genere su aplicación y del nivel de precisión que desee obtener. Por ejemplo, si realmente no le importa tener inmediatamente disponibles todas las últimas filas insertadas, considere utilizar INSERT IGNORE LOW PRIORITY para ayudar a SELECTs. Si el tamaño del texto es relativamente pequeño, puede usar un tipo CHAR fijo que ayudará a indexar mucho y reducir el tiempo de SELECT. Si su aplicación genera muchas actualizaciones, preferirá el motor de almacenamiento InnoDB, que permite bloquear solo una fila cuando actualización (frente a toda la tabla en myISAM). Por otro lado, consume más CPU, por lo que si no usa transacciones y su patrón de actualización es relativamente pequeño, considere usar myISAM

Respondida el 10/12/2008 a las 17:07
fuente por usuario

votos
1

Si usa la indexación (e incluso si no lo está) puede encontrar problemas de escala. Puedes intentar particionar para tratar de reducir esos efectos.

En mi propio proyecto, la integridad no es crucial, pero el rendimiento también lo es. Lo que hicimos fue relajar todos los requisitos transaccionales, relajar los requisitos de sincronización de disco y realizar inserciones por lotes, y realmente mejoramos nuestras velocidades de escritura.

Además, asegúrese de hacer sus propias pruebas para ajustar el tamaño de su memoria. Creo que MySQL tiene algunos tipos diferentes de cachés de los cuales puedes configurar el tamaño.

Respondida el 09/12/2008 a las 21:05
fuente por usuario

votos
0

Está mucho mejor si la "cadena de caracteres abreviados" está en una columna de longitud fija para que la tabla tenga filas de longitud fija. MySQL con MyISAM funcionará de manera bastante eficiente para usted en ese momento. Asigne la mayor cantidad de memoria posible al Key Buffer para que la mayor parte del índice en la memoria. Su objetivo debe ser un único acceso aleatorio al disco para recuperar una fila; no se puede hacer mejor que eso dados 100 GB de datos y 8 GB de memoria. No debe esperar obtener más de unos cientos de consultas por segundo, porque son todos los accesos aleatorios que un disco puede hacer.

Puede que esté interesado en mi motor de almacenamiento personalizado MySQL (descrito aquí ). Gestiona la memoria de forma diferente a MyISAM, aunque el perfil de su aplicación no es exactamente para lo que se optimizó mi motor.

Respondida el 21/03/2009 a las 14:47
fuente por usuario

votos
0

grandes consultas de MySQL hacen que mi servidor Quad Core / 8GB Ram DB Server se bloquee ...

solución es utilizar PostgresSQL (SQL Server si puede pagarlo)

Respondida el 09/12/2008 a las 21:20
fuente por usuario

votos
0

Definitivamente desea utilizar MyISAM para el motor de almacenamiento. Pero dices que esperas 100 GB y solo contendrá un valor de cadena corto. Definitivamente desea utilizar un int int de 64 bits para su identidad / clave principal.

Pero mi verdadera pregunta es. ¿Estás usando esto para almacenar información de sesión del sitio web? Si es así, desea utilizar Memcache en lugar de MySQL.

Respondida el 09/12/2008 a las 21:16
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more