Tengo que escribir en la base de datos MySQL una gran cantidad de datos durante aproximadamente 5 veces por segundo. ¿Cuál es la manera más rápida: insertar cada 1/5 de segundo o hacer una cola e insertar todos los datos almacenados cada ~ 5 segundos? Si la segunda forma es mejor, ¿es posible insertarla en 1 tabla usando 1 solicitud de algunas filas?Inserción en la base de datos
Respuesta
Teniendo en cuenta la frecuencia de las inserciones Su mejor a ir con el segundo enfoque que está haciendo cola y que agregar de una sola vez.!
Pero Debe tener en cuenta estos escenarios primera:
es su sistema en tiempo real.? Sí, entonces, ¿cuál es la demora máxima que puede permitirse (ya que demorará ~ 5 segundos para que la siguiente inserción y datos sean persistentes/disponibles)?
¿Cuáles son las posibilidades de que aparezcan valores/errores incorrectos en los datos, como si un dato fuera incorrecto perderá todo el resto si la consulta tiene que fallar?
Uso de varias agrupaciones de almacenamientos intermedios con innodb_buffer_pool_instances
. puede depender de la cantidad de núcleos en la máquina. Use Partitioning
de la tabla.
Puede insertar datos colectivamente usando XML
.
Puede hacer un inserto con todos los datos witho algo como esto:
INSERT INTO table (field1, field2,... , fieldN)
VALUES
(value1_1', value1_2,... , value1_N),
(value2_1', value2_2,... , value2_N),
...
(valueM_1', valueM_2,... , valueM_N);
Como cada transacción tiene un costo fijo, yo diría que el hacer una multilínea insertar cada pocos segundos es mejor . Con algunos de los sistemas que usamos en el trabajo, almacenamos en caché cientos de líneas antes de insertarlas todas de una vez.
Desde el MySQL documentation que puede hacer una multilínea insertar este modo:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
mi experiencia es que al insertar datos en una base de datos MySQL es más rápido para trabajar con lotes.
Así que la opción lento está ejecutando varias consultas de inserción:
INSERT INTO my_table VALUES (1, "a"); INSERT INTO my_table VALUES (2, "b");
La opción más rápido sería:
INSERT INTO my_table VALUES (1, "a"), (2, "b");
- 1. Rendimiento de inserción de base de datos
- 2. Hibernate - Personalizar inserción en la base de datos
- 3. Inserción segura de datos en la base de datos SQLite con el apóstrofo
- 4. C# Optimización: Inserción de 200 millones de filas en la base de datos
- 5. Cuándo filtrar/desinfectar datos: antes de la inserción de la base de datos o antes de la visualización?
- 6. Estructura de datos eficiente para la inserción
- 7. ¿está bien usar plinq ForAll para una inserción masiva en la base de datos?
- 8. Configuración/Inserción en la base de datos Many-to-Many con Python, SQLALchemy, Sqlite
- 9. Error de base de datos MySQL: no se permiten paquetes mayores que max_allowed_packet: durante la inserción
- 10. columna de inserción de datos C# en la posición 0
- 11. C++: Crear base de datos con SQLite para la inserción y actualización
- 12. SQLite - la inserción de una secuencia con saltos de línea en la base de datos del archivo csv
- 13. ¿Cómo insertar un archivo en la base de datos MySQL?
- 14. Error: "Debe declararse la variable escalar" para las instrucciones de inserción en la base de datos múltiple
- 15. Nullable DateTime y la base de datos
- 16. Insertar registros de conjunto de datos en la base de datos
- 17. Copia de datos relacionales de la base de datos a la base de datos
- 18. Bloqueos de inserción de tabla de base de datos desde una aplicación de múltiples hilos
- 19. obteniendo un ID de inserción del almacenamiento de base de datos HTML5 de Webkit
- 20. Error al tirar de la base de datos mysql en la base de datos mysql local
- 21. ¿Cómo insertar caracteres arábigos en la base de datos sql?
- 22. cómo almacenar datos en la base de datos en HTML5
- 23. Guardar datos en árabe en la base de datos MySQL
- 24. Insertar fecha/hora en la base de datos de Access
- 25. tabla de actualización de la inserción de datos VARBINARY
- 26. ¿Cómo colocar todas las tablas en la base de datos sin soltar la base de datos?
- 27. Manejo de datos de jerarquía en la base de datos
- 28. ¿Herencia en la base de datos?
- 29. imagen en la base de datos
- 30. Actualizando la base de datos en __destruct()?
Sí, el sistema es en tiempo real. Los datos son una base64 simple con ~ 100 bytes de datos. – Ockonal
En caso afirmativo, iría con una sola inserción y con Connection Pooling en la capa DAO. Debido a que no puede permitirse perder datos en RTS, el tiempo también es crítico. Espero que esto te haya ayudado. :) –
Gracias por la ayuda;) – Ockonal