Importación de Datos en Rails: Del modo menos indicado al óptimo

Guía práctica para importar datos desde JSON o Excel en Rails: tres enfoques de rendimiento, con insert_all y activerecord-import; batching, transacciones y lookups para grandes volúmenes de datos.

24 ago 2025 • 4 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

Este post fue 100% creado con ejemplos, codigo y experiencias reales, formateado para mejor lectura con ayuda de IA. La inteligencia artificial puede ayudar a organizar y estructurar contenido, pero no sustituye el conocimiento y la experiencia practica de los desarrolladores.

Codigo completo disponible en GitHub en la ruta https://github.com/rodrigonbarreto/event_reservation_system/tree/blog_post_import_data

Importar datos desde archivos JSON o Excel es una tarea habitual en proyectos Rails. En este articulo muestro tres enfoques con resultados muy distintos. En una prueba local con 10000 registros la diferencia fue de aproximadamente 40 segundos contra aproximadamente 5 segundos, una mejora superior a 8 veces.

Preparacion del escenario: generamos datos mock para probar. Ejemplo de generador de archivos: crear un archivo llamado file_generator.rb en la raiz del proyecto y ejecutar ruby file_generator.rb. Esto genera el archivo blog_json_data_10k.json con 10000 posts simulados.

Clase auxiliar JsonImporter: una clase simple que lee el archivo JSON y devuelve el array. Esta implementacion carga todo el archivo en memoria. Existen formas mas eficientes para ficheros enormes como streaming y chunking, pero aqui el foco es la importacion a la base de datos.

Como probar las implementaciones en consola Rails: abrir rails console y ejecutar las importaciones: Importer::BadImporter.import! para la version no recomendable; Importer::BlogDataImporter.import! para la version razonable; Importer::BlogDataImporterWithActiveRecordImport.import! para la version optimizada.

Ejemplo 1 El modo menos recomendado: el codigo procesa cada post de forma individual usando find_or_create_by para usuarios, posts y categorias. Problemas: explosion de consultas, sin transaccion, performance pobre, comprobaciones repetidas y sin proteccion ante fallos. En mis pruebas este enfoque tardo alrededor de 38.43 segundos para 10000 registros.

Razon principal para evitarlo: por cada registro se hacen multiples queries a la base y se realizan operaciones redundantes que disparan el tiempo de ejecucion y la carga en el servidor.

Ejemplo 2 Enfoque razonable: usar transaccion, extraer datos unicos antes de insertar, usar insert_all para insertar categorias y usuarios en lote, y construir hashes de lookup mediante Category.all.pluck name, id to_h y User.all.pluck email, id to_h. Esto reduce enormemente las consultas y convierte busquedas O n en accesos O 1. En mi prueba este enfoque tardo alrededor de 15 segundos.

Concepto clave: los hashes de lookup son oro para rendimiento. En vez de buscar la categoria por cada post se hace una query unica y se accede por clave, evitando miles de consultas redundantes.

Ejemplo 3 Enfoque optimizado con activerecord-import: añadir la gem activerecord-import al Gemfile y opcionalmente pg para Postgres. Este metodo crea objetos en memoria en batches, realiza importaciones masivas con import o import_all y aprovecha opciones como on_duplicate_key_ignore, on_duplicate_key_update y validate false para maximizar velocidad. Ademas se procesan los posts en grupos de por ejemplo 1000 para controlar memoria y luego se crean las relaciones post categoria tambien en batches. Resultado en mi test: alrededor de 5 segundos para 10000 registros.

Por que activerecord-import es tan potente: genera INSERTs SQL optimizados con multiples VALUES, reduce round trips a la base, permite gestionar memoria con batch_size y ofrece flexibilidad para upserts y opciones de validacion.

Comparacion de rendimiento en un equipo Apple M3 Pro con 18GB RAM: BadImporter aproximadamente 40 segundos; BlogDataImporter aproximadamente 15 segundos; BlogDataImporterWithActiveRecordImport aproximadamente 5 segundos. En VPS modestos los tiempos pueden aumentar 3 o 4 veces pero la proporcion de mejora se mantiene.

Buenas practicas resumidas: usar transacciones para garantizar atomicidad, preferir insert_all o activerecord-import para inserciones en masa, construir hashes de lookup para evitar consultas por registro, procesar y deduplicar datos antes de insertar y utilizar batches para controlar uso de memoria.

Si trabajas con volúmenes mayores como 100000 o 1000000 de registros, deberias valorar procesado paralelo, colas con Sidekiq o ActiveJob, y herramientas especificas de ingestion en masa.

Sobre Q2BSTUDIO: Q2BSTUDIO es una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida. Ofrecemos servicios de consultoria y desarrollos personalizados, soluciones de inteligencia artificial e ia para empresas, agentes IA, integraciones de Power BI y servicios inteligencia de negocio. Tambien somos expertos en ciberseguridad y gestion de infraestructuras cloud con servicios cloud aws y azure. Nuestro equipo combina experiencia en desarrollo backend y frontend con conocimientos avanzados en inteligencia artificial, analitica de datos y seguridad para ofrecer soluciones robustas y escalables.

Palabras clave y servicios destacados: aplicaciones a medida, software a medida, inteligencia artificial, ia para empresas, agentes IA, power bi, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, desarrollos personalizados.

Si te interesa que preparemos contenido adicional podemos cubrir: estrategias avanzadas con la gem activerecord-import, migraciones y alteraciones de columnas en bases de datos con millones de registros, casos reales con Kafka o SQS para procesamiento asincrono, y otras tecnicas de optimizacion de bases de datos.

Te invitamos a probar las tres variantes en tu entorno, comparar tiempos y elegir la que mejor se adapte a tus necesidades. Si necesitas ayuda implementando procesos de importacion a medida, optimizaciones de rendimiento, soluciones de inteligencia artificial, ciberseguridad o migracion a la nube con servicios cloud aws y azure contacta a Q2BSTUDIO para una consultoria especializada.

Si te ha parecido util este articulo deja un like y comparte con otros desarrolladores Rails. Comenta que tema te gustaria ver a continuacion y prepararemos el contenido.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.