2009-09-23 10 views
13

Tengo una tabla de registro que recibirá inserciones de varias aplicaciones web. No haré ninguna búsqueda/clasificación/consulta de estos datos. Llevaré los datos a otra base de datos para ejecutar informes. La tabla inicial es estrictamente para RECIBIR los mensajes de registro.¿Cómo optimizar una tabla solo para inserciones rápidas?

¿Hay alguna forma de garantizar que las aplicaciones web no tengan que esperar en estas inserciones? Por ejemplo, sé que agregar muchos índices ralentizaría las inserciones, por lo que no lo haré. ¿Qué más hay ahí? ¿No debería agregar una clave principal? (Cada noche, la mesa se bombea a un informes de base de datos que tendrá un montón de llaves/índices)

+3

¿Por qué utilizar SQL en absoluto? ¿Por qué no simplemente escribir en los archivos para cargarlos en la base de datos de informes? –

+0

Para ser sincero, nunca utilicé archivos de registro regulares, lo investigaré. –

+0

Puede usar SQL con sotrage engine = ARCHIVE. –

Respuesta

9

Si el rendimiento es clave, es posible que no desea escribir estos datos en una base de datos. Creo que la mayoría procesará la escritura de una base de datos como un viaje de ida y vuelta, pero parece que no quiere esperar el mensaje de confirmación devuelto. Compruebe si, como sugiere S. Lott, puede que no sea más rápido agregar una fila a un archivo de texto simple en alguna parte.

Si la escritura de la base de datos es más rápida (o necesaria, por razones de seguridad u otra comercial/operativa), pondría sin índices en la tabla, y eso incluye una clave principal. Si no se utilizará para lecturas o actualizaciones, y si no necesita integridad relacional, entonces no necesita un PK en esta tabla.

Para recomendar lo obvio: como parte de la ejecución de informes nocturnos, borre el contenido de la tabla. Además, nunca restablezca los archivos de la base de datos (tamaños) (comando ol olde shrink database); después de aproximadamente una semana de uso regular, los archivos de la base de datos deben ser tan grandes como lo que necesiten y no tendrá que preocuparse por el rendimiento del crecimiento del archivo.

5

Estas son algunas ideas, nota de los últimos en ser importante que tendría extremadamente altas volumns:

  • no tienen una clave principal, que está forzada a través de un índice
  • no tienen ningún otro índice
  • Crear la base de datos lo suficientemente grande como para que usted no tiene ningún crecimiento de base de datos
  • Coloque la base de datos en su propio disco para evitar la contención
  • evitar el software RAID
  • lugar la base de datos en un disco duplicado, guarda el cálculo realizado sobre RAID 5
4

No hay llaves, no hay restricciones, ninguna validación, no activa, Sin columnas calculadas

Si es posible, tienen la asíncrono servicios de inserción, a fin de no esperar a los resultados (si eso es aceptable)

Incluso puede intentar insertar en una tabla "diaria", que entonces debería ser menos registros, y luego mover esto antes de que el lote se ejecute por la noche.

Pero sobre todo sobre la mesa ninguna tecla/Validación (PK y los índices únicos te matarán)

+0

En un mundo de Internet 24/7, ya no existe la noción de día contra noche.¿Cómo sacarías la información "antigua" (pero aún la mantendrás en una base de datos)? ¿constantemente? cada X minutos? ¿Alguna idea? –

Cuestiones relacionadas