Ahora tenemos una base de datos firebird con 1.000.000 que debe procesarse después de que TODOS estén cargados en la memoria RAM. Para obtener todos estos, debemos extraer los datos usando (seleccione * primero 1000 ...) durante 8 horas. ¿Cuál es la solución para esto?¿Cómo cargar rápidamente 1 milion de registros desde la base de datos?
Respuesta
¿Qué tipo de procesamiento necesita hacer para cargarlos en la memoria y no simplemente procesarlos a través de sentencias SQL?
Hay dos técnicas que uso que funcionan dependiendo de lo que estoy tratando de hacer.
Suponiendo que hay algún tipo de clave artificial (identidad), el trabajo en lotes, incrementando el último valor de identidad procesado.
BCP los datos a un archivo de texto, agite las actualizaciones, luego vuelva a BCP, recordando desactivar las restricciones y los índices antes del paso EN.
Hacemos algunos análisis de cada uno desde db, y tenemos que tenerlos cargados en la memoria. El cuello de botella es el momento en que transferimos los datos del conjunto de registros a nuestros objetos DTO. –
Tome un vistazo a esto: http://www.firebirdfaq.org/faq13/
Nada que me ayude en ese enlace, tal vez este problema se encuentre en todas las bases de datos. Necesito optimizar el tiempo para "while (read.Read())". –
¿Tiene cada uno de su "SELECT * primeros 1000" (como lo describiste) no escanear una mesa llena? Mire esas consultas y asegúrese de que estén usando un índice.
No es la velocidad de selección el problema. La transferencia de datos del conjunto de registros de selección a la memoria, el tiempo (read.Read()) lleva a long ... –
para cargar datos de una tabla con 1.000.000 filas en C# usando una base de datos Firebird lleva en un 3 GHz Pentium 4 al menos 8 horas
todo el mundo ha estado asumiendo que se estaba ejecutando una consulta SQL para seleccionar los registros de la base de datos Algo como
select *
from your_big_table
/
Debido a que realmente tomaría unos segundos. Bueno, un poco más para mostrarlo en una pantalla, pero ejecutar la selección real debería ser muy rápido.
Pero esa referencia a C# me hace pensar que estás haciendo otra cosa. Quizás lo que realmente tienes es un bucle RBAR que ejemplifica un millón de objetos. Puedo ver cómo eso podría demorar un poco más. Pero aun así, ¿ocho horas? ¿A dónde va el tiempo?
edición
Mi suposición era correcta y que está instanciando 1000000 objetos en un bucle. El consejo correcto sería encontrar otra forma de hacer lo que sea que hagas una vez que tengas todos tus objetos en la memoria. Sin saber más sobre los detalles, es difícil dar detalles. Pero parece poco probable que esto sea una IU. ¿Qué usuario va a examinar un millón de objetos?
Por lo tanto, una observación general deberá bastar: utilizar operaciones masivas para implementar la actividad masiva. Las bases de datos SQL se destacan en el manejo de conjuntos. Aproveche la potencia de SQL para procesar sus millones de filas en un solo conjunto, en lugar de filas individuales.
Si no encuentra esta respuesta útil, entonces necesita darnos más detalles respecto a lo que quiere lograr.
Nuestro proceso se ejecuta una vez al mes como máximo en el peor de los casos. Y sí, cargamos todos los datos de la tabla en un gran bucle. Ese lazo es nuestro cuello de botella. Por un momento, estaba pensando en hacer algunos clones del DB y ahora ejecutar algunas consultas paralelas para cargar datos más rápido. –
DEBERÁ nunca cargar registros en un bucle cuando tenga tantos. Esa es la base de datos 101. Me Don; no sé pájaro de fuego, pero la mayoría de soporte de base de datos con el selector en la inserción como tabla2 inserción (campo1, campo2) seleccione campo1, campo2 de tabla1 Eso sería mucho más rápido que una fila a la vez – HLGEM
¿Cuánto tiempo lleva construir el objeto DTO que está creando con cada lectura de datos?
{ int a = read.GetInt32(0); int b = read.GetInt32(1); mylist.Add(new DTO(a,b)); }
Estás creando un millón de estos objetos. Si lleva 29 milisegundos crear un objeto DTO, tardará más de 8 horas en completarse.
- 1. ¿Cómo cargar datos rápidamente en R?
- 2. Procesando registros de apache rápidamente
- 3. Mejores prácticas para cargar archivos en la base de datos
- 4. Cómo cargar una aplicación de winforms rápidamente
- 5. Cargar la plantilla django de la base de datos
- 6. cómo cargar más de 1 MB de datos desde sqlite db al cursor android?
- 7. mysql selecciona SOLAMENTE registros duplicados de la base de datos
- 8. utilizando rake para volcar y cargar la base de datos
- 9. Cargar una base de datos innodb MySQL en la memoria
- 10. Eliminar registros más antiguos de la base de datos
- 11. ¿Cuántos registros/tablas podría tener en una base de datos de 1 gb?
- 12. ¿Cómo seleccionar los primeros registros 'N' de una base de datos que contiene millones de registros?
- 13. ¿Cómo selecciono los registros de menos de 1 año?
- 14. ¿Cómo eliminar desde una base de datos?
- 15. MYSQL: Mostrar registros omitidos después de CARGAR DATOS INFILE?
- 16. Llenar ComboBox desde la base de datos
- 17. 10,000 + registros en html para renderizar rápidamente
- 18. ¿Crear una base de datos desde otra base de datos?
- 19. ¿Cómo obtener URL de la base de datos desde java.sql.Connection?
- 20. QUERY velocidad con límite y milion records
- 21. Encontrar huecos (registros faltantes) en los registros de la base de datos usando SQL
- 22. ¿Cómo cargar otra base de datos usando CodeIgniter?
- 23. Insertar registros de conjunto de datos en la base de datos
- 24. SQL 2005 - forma rápida de duplicar rápidamente una base de datos + datos
- 25. ¿Es posible cargar una base de datos en la RAM?
- 26. Cómo generar el modelo desde la base de datos
- 27. ¿Cómo generar programáticamente DDL desde la base de datos Oracle?
- 28. ¿Cómo usar la base de datos SQLite desde MS Access?
- 29. ¿Cómo restaurar la base de datos MySQL desde WAMP?
- 30. Cargar matriz de Javascript con datos de la base de datos MYSQL
¿cuál es el tamaño de la tabla? ¿estás seguro de que tu memoria puede contener eso? – zsong
Suena como un trabajo para ... [La base de datos más rápida del mundo] (http://thedailywtf.com/Articles/Announcing-APDB-The-Worlds-Fastest-Database.aspx)! –
Se deben cargar un millón de registros en segundos a menos que estos sean realmente registros enormes. ¿Cómo los estás cargando? ¿Qué plataforma estás usando? –