Si quiero agregar 4 millones de registros en un segundo en una base de datos, ¿qué recursos debo tener y cómo lo codifico en Java?

Estás muy limitado en las optimizaciones de Java que puedes hacer. Debe usar cualquier controlador JDBC oficial que suministre en la base de datos y agrupar sus consultas según la memoria disponible en el sistema Java y el tamaño de cada registro individual. Honestamente, la única forma de determinar el equilibrio correcto de menos consultas frente a no sobrecargar su RAM e intercambiar es monitorear y experimentar.

En cuanto a 4 millones de lecturas y escrituras en 1 segundo … Realmente no estoy seguro de la viabilidad. La velocidad depende de demasiados factores: a saber, la ubicación y la conexión a los servidores de la base de datos (¿red local? ¿A través de Internet? ¿En la misma máquina?), La propia base de datos (PostgreSQL? MySQL?), El tamaño de los registros, cómo se consultan , velocidad y memoria de las máquinas involucradas, otras solicitudes, etc.

Es posible que desee comenzar a pensar de lado sobre este problema. ¿Qué estás tratando de resolver / lograr con esta migración masiva rápida (aparentemente continua)?

Es posible ejecutar millones de inserciones o actualizaciones por segundo en un sistema escalable de alto rendimiento. Sin embargo, si esta es una operación única, es poco probable que pueda alimentar los datos lo suficientemente rápido; Este desafío parece estar limitado por el cliente .

Normalmente, si tiene que hacer una operación rara, optimizada en masa como esta, explora las API de datos en masa que están expuestas por una base de datos, como BCP para Sybase o SQL Server, o SQL * Loader para Oracle (consulte: http: //stackoverflow.com/questio …).

De todos modos, según su pregunta, es muy probable que aún no comprenda los requisitos de lo que está intentando hacer. La incomprensión del objetivo básico y los requisitos podría enviarle por caminos técnicos muy malos, así que dedique un poco más de tiempo por adelantado para asegurarse de comprender por qué necesitaría cargar 4 millones de filas en un segundo, porque puede encontrar que hay mejores alternativas que cargar 4 millones de filas en un segundo.

¿Realmente necesitas hacerlo en Java? o usar la interfaz SQL para el caso? Hacer lecturas y escrituras secuenciales dentro de una transacción es muy costoso, e incluso si logra optimizar el proceso, afectará en gran medida al servidor de la base de datos.

Considere usar las herramientas de exportación / importación proporcionadas por la base de datos. Las utilidades de importación pgdump o MySQL de Postgres son muy rápidas y le permiten realizar la exportación / importación fuera de una transacción. SQL Loader de Oracle va incluso un paso por delante: escribe los datos directamente en los archivos de datos, por lo que no se producirán transacciones ni gastos generales adicionales.

La mejor respuesta es hacerlo en cero tiempo y esfuerzo, al no hacerlo.

Diseñe cosas para que los datos puedan permanecer en un solo lugar y no se puedan mezclar.

La siguiente mejor solución es no enviar tantos datos. Los datos no cambian tan rápido que necesita enviarlos más de una vez al día, solo las partes que han cambiado, que es una cantidad muy pequeña de datos.