Este documento describe las funciones de usuario en PHP. Explica la sintaxis básica para definir funciones, cómo pasar parámetros a funciones, devolver valores de funciones e incluir archivos. Las funciones se definen usando la palabra clave function, pueden aceptar parámetros y devolver valores. Los archivos pueden incluirse usando las instrucciones require e include.
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
El documento presenta Ruby on Rails como un framework ágil para el desarrollo de aplicaciones web. Explica conceptos clave como MVC, ORM, migraciones de base de datos y convención sobre configuración. También muestra ejemplos prácticos de código en Ruby on Rails para crear modelos, controladores y vistas.
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
El documento presenta Ruby on Rails como un framework ágil para el desarrollo de aplicaciones web. Explica conceptos clave como MVC, ORM, migraciones de base de datos y convención sobre configuración. También muestra ejemplos básicos de código para crear modelos, controladores y vistas en Rails.
1) El documento habla sobre el proceso de tuning o afinamiento de bases de datos, el cual busca detectar cuellos de botella y lograr que los procesos se ejecuten de manera más eficiente con menos recursos.
2) Se mencionan cuatro áreas clave para el tuning en Oracle: SGA, causas de mal desempeño, razones para un pobre rendimiento del RDBMS, y programas.
3) Se detallan cuatro metas principales para mejorar rápidamente el rendimiento en Oracle: asignar suficiente memoria, cargar datos
Este documento presenta 6 razones por las cuales se debe usar el framework Rails para desarrollar aplicaciones web. Rails hace que los desarrolladores sean más productivos al proporcionar convenciones sólidas, herramientas de generación de código, y una gran cantidad de gemas que resuelven problemas comunes. Sin embargo, también menciona algunas razones por las que no se debería usar Rails, como problemas de rendimiento, la necesidad de revisión de código extensiva, y que quizás pierda popularidad en el futuro. El documento también proporcion
Este documento describe las funciones de usuario en PHP. Explica la sintaxis básica para definir funciones, cómo pasar parámetros a funciones, devolver valores de funciones e incluir archivos. Las funciones se definen usando la palabra clave function, pueden aceptar parámetros y devolver valores. Los archivos pueden incluirse usando las instrucciones require e include.
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
El documento presenta Ruby on Rails como un framework ágil para el desarrollo de aplicaciones web. Explica conceptos clave como MVC, ORM, migraciones de base de datos y convención sobre configuración. También muestra ejemplos prácticos de código en Ruby on Rails para crear modelos, controladores y vistas.
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
El documento presenta Ruby on Rails como un framework ágil para el desarrollo de aplicaciones web. Explica conceptos clave como MVC, ORM, migraciones de base de datos y convención sobre configuración. También muestra ejemplos básicos de código para crear modelos, controladores y vistas en Rails.
1) El documento habla sobre el proceso de tuning o afinamiento de bases de datos, el cual busca detectar cuellos de botella y lograr que los procesos se ejecuten de manera más eficiente con menos recursos.
2) Se mencionan cuatro áreas clave para el tuning en Oracle: SGA, causas de mal desempeño, razones para un pobre rendimiento del RDBMS, y programas.
3) Se detallan cuatro metas principales para mejorar rápidamente el rendimiento en Oracle: asignar suficiente memoria, cargar datos
Este documento presenta 6 razones por las cuales se debe usar el framework Rails para desarrollar aplicaciones web. Rails hace que los desarrolladores sean más productivos al proporcionar convenciones sólidas, herramientas de generación de código, y una gran cantidad de gemas que resuelven problemas comunes. Sin embargo, también menciona algunas razones por las que no se debería usar Rails, como problemas de rendimiento, la necesidad de revisión de código extensiva, y que quizás pierda popularidad en el futuro. El documento también proporcion
Este documento proporciona recomendaciones para optimizar el rendimiento de aplicaciones Genexus en la plataforma .NET. Recomienda usar aislamiento de snapshot en la base de datos para mejorar el rendimiento de las transacciones concurrentes, particionar tablas grandes para mejor aprovechar múltiples procesadores y particionar funciones para agrupar datos relacionados. También recomienda usar AppFabric para almacenar en caché datos, sesiones y estado entre instancias de aplicaciones para lograr escalabilidad horizontal de manera fácil
Este documento proporciona recomendaciones para optimizar el rendimiento de aplicaciones Genexus en la plataforma .NET. Recomienda usar aislamiento de snapshot en la base de datos para mejorar el rendimiento de las transacciones concurrentes, particionar tablas grandes para mejor aprovechar múltiples procesadores y particionar funciones para distribuir datos. También recomienda usar AppFabric para almacenar en caché datos, sesiones y estado entre instancias de aplicaciones para lograr escalabilidad horizontal de manera fácil.
Rendimiento en aplicaciones web con Symfony2Asier Marqués
Este documento proporciona consejos sobre el rendimiento web y el rendimiento de bases de datos. Resalta la importancia de diseñar aplicaciones de forma escalable y optimizada desde el principio. Recomienda evitar consultas innecesarias, usar índices adecuados, particionar tablas grandes y almacenar en caché resultados cuando sea posible. También analiza herramientas para medir el rendimiento como Varnish y sugiere opciones alternativas como NoSQL para ciertos casos.
Este documento describe los pasos para definir y desarrollar una primera API, incluyendo: (1) crear un documento funcional, (2) diseñar la API, (3) implementar una versión fake, (4) implementar la API real, (5) validar la API, (6) generar documentación, (7) casos de prueba y (8) SDKs. También discute consideraciones como el protocolo RESTful, formatos de datos, autenticación, versionado y documentación de APIs usando RAML.
Este documento proporciona consejos sobre cómo mejorar el rendimiento de Magento. Explica cómo instalar Magento de forma básica, identificar cuellos de botella mediante herramientas como XHProf y Onestic Profiler, y realizar pruebas de carga. También recomienda el uso de caché externa como Varnish o Ezapps Zoom, y escalar la infraestructura separando la aplicación del servidor de base de datos.
Este documento proporciona instrucciones para configurar y ejecutar un script de Python para crear usuarios masivos en Active Directory. Explica cómo editar el script para adecuarlo a las necesidades específicas, como establecer la ubicación donde se crearán los usuarios y los campos de datos a extraer de un archivo CSV. También describe el formato y contenido requerido de dicho archivo CSV con la información de los usuarios. Finalmente, da instrucciones para ejecutar el script y verificar que los usuarios se hayan creado correctamente.
Este documento discute varias técnicas para mejorar la escalabilidad de aplicaciones Rails. Describe cómo Rankia ha crecido a millones de usuarios y contenidos utilizando estas técnicas como cachés, índices de base de datos, desnormalización, optimización de consultas y configuración de servidores. También cubre optimizaciones a nivel de frontend como imágenes comprimidas, reducción de peticiones de red, CSS ligero y uso de CDNs.
Configuración Script Usuarios Masivos Windows Server 2012 R2cyberleon95
Este documento describe cómo configurar y ejecutar un script para crear masivamente usuarios de Active Directory. Explica cómo editar un script de ejemplo para adecuarlo a las necesidades específicas, como especificar la ubicación donde se crearán los usuarios y los campos requeridos en el archivo CSV de entrada. Además, provee instrucciones sobre cómo ejecutar el script y verificar que los usuarios se hayan creado correctamente.
Este documento describe los conceptos básicos de automatización y controladores lógicos programables (PLC). Explica las ventajas de usar PLC en lugar de lógica cableada, así como los pasos para configurar e implementar un PLC, incluida la configuración de entradas y salidas, archivos de datos y comunicación.
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
Buenas práctias en el desarrollo de software con javascript. Código limpio, mantenible, escalable, tests,... Charla perteneciente al evento Betabeers Murcia del día 9 de Mayo de 2014
Curso migración de aplicaciones nsl nk90 a tmpEdgar Solis
El documento proporciona recomendaciones para el desarrollo de aplicaciones en la plataforma TMP, incluyendo la estructuración de scripts, llamadas a funciones, manejo de archivos, pruebas y documentación. Se describen buenas prácticas para la modularización, versionado, uso de rutas estándar y registro de cambios.
Es una introducción a PHP, para personas que ya tengan conocimientos de programación y quieran desarrollar sistemas de forma rápida, usando PHP, HTML5, JQUERY, GOOGLE MAPS, el ejemplo final aplica todas las tecnologías indicadas.
Este documento presenta información sobre la API web de Microsoft Dynamics 365. Brevemente describe las características clave de la API web como la implementación de OData V4, la capacidad de consumir y crear registros, y las limitaciones actuales como la actualización de campos de búsqueda a NULL. También proporciona enlaces a recursos adicionales sobre temas como Xrm.WebApi, Postman y Typescript.
El documento describe las 10 vulnerabilidades web más críticas según OWASP, incluyendo inyección SQL, XSS, y autenticación débil. También discute técnicas de inyección ciega como sumas lineales de valores ASCII y consultas pesadas para extraer datos de bases de datos de forma automática. El documento proporciona ejemplos detallados de cómo explotar estas vulnerabilidades.
Este proyecto presenta el diseño de un banco de pruebas dinamómetro para motores diésel de camiones fuera de carretera en una empresa mecánica. El banco permitirá realizar pruebas eficientes de motores reparados y diagnosticar fallas con precisión. El diseño incluye planos de la estructura, sistema de refrigeración y dinamómetro. El costo estimado de la implementación es de S/ 15,000. Se concluye que el banco optimizará las pruebas de motores y generará mayores ingresos para la
Laravel es un framework de código abierto para desarrollar aplicaciones web en PHP que sigue el patrón MVC. Utiliza Eloquent ORM para mapear tablas de base de datos a objetos y Blade como motor de plantillas. La estructura principal incluye carpetas para la aplicación, vistas, controladores y más. Eloquent ORM permite crear, leer, actualizar y eliminar registros de la base de datos como objetos.
Buenas Prácticas de desarrollo en Ruby on RailsSergio Gil
Este documento presenta las buenas prácticas de desarrollo en Ruby on Rails. Cubre temas como testing, control de versiones, documentación, arquitectura MVC, REST, acoplamiento, refactorización, uso de variables y el idioma del código. El objetivo es compartir opiniones sobre cómo escribir código Ruby on Rails de manera limpia, legible y mantenible.
Este documento presenta 20 consejos y trucos para mejorar el rendimiento y la seguridad de MySQL. Algunos de los consejos incluyen la configuración de cuotas de usuario, el uso de UTF-8, la importación y exportación de CSV, la elección adecuada del motor de almacenamiento y la investigación de los diferentes tipos de datos disponibles. El documento también cubre temas avanzados como subconsultas, procedimientos almacenados, gestores y disparadores.
SOPRA STERIA presenta una aplicació destinada a persones amb discapacitat intel·lectual que busca millorar la seva integració laboral i digital. Permet crear currículums de manera senzilla i intuitiva, facilitant així la seva participació en el mercat laboral i la seva independència econòmica. Aquesta iniciativa no només aborda la bretxa digital, sinó que també contribueix a reduir la desigualtat proporcionant eines accessibles i inclusives. A més, "inCV" està alineat amb els Objectius de Desenvolupament Sostenible de l'Agenda 2030, especialment els relacionats amb el treball decent i la reducció de desigualtats.
Este documento proporciona recomendaciones para optimizar el rendimiento de aplicaciones Genexus en la plataforma .NET. Recomienda usar aislamiento de snapshot en la base de datos para mejorar el rendimiento de las transacciones concurrentes, particionar tablas grandes para mejor aprovechar múltiples procesadores y particionar funciones para agrupar datos relacionados. También recomienda usar AppFabric para almacenar en caché datos, sesiones y estado entre instancias de aplicaciones para lograr escalabilidad horizontal de manera fácil
Este documento proporciona recomendaciones para optimizar el rendimiento de aplicaciones Genexus en la plataforma .NET. Recomienda usar aislamiento de snapshot en la base de datos para mejorar el rendimiento de las transacciones concurrentes, particionar tablas grandes para mejor aprovechar múltiples procesadores y particionar funciones para distribuir datos. También recomienda usar AppFabric para almacenar en caché datos, sesiones y estado entre instancias de aplicaciones para lograr escalabilidad horizontal de manera fácil.
Rendimiento en aplicaciones web con Symfony2Asier Marqués
Este documento proporciona consejos sobre el rendimiento web y el rendimiento de bases de datos. Resalta la importancia de diseñar aplicaciones de forma escalable y optimizada desde el principio. Recomienda evitar consultas innecesarias, usar índices adecuados, particionar tablas grandes y almacenar en caché resultados cuando sea posible. También analiza herramientas para medir el rendimiento como Varnish y sugiere opciones alternativas como NoSQL para ciertos casos.
Este documento describe los pasos para definir y desarrollar una primera API, incluyendo: (1) crear un documento funcional, (2) diseñar la API, (3) implementar una versión fake, (4) implementar la API real, (5) validar la API, (6) generar documentación, (7) casos de prueba y (8) SDKs. También discute consideraciones como el protocolo RESTful, formatos de datos, autenticación, versionado y documentación de APIs usando RAML.
Este documento proporciona consejos sobre cómo mejorar el rendimiento de Magento. Explica cómo instalar Magento de forma básica, identificar cuellos de botella mediante herramientas como XHProf y Onestic Profiler, y realizar pruebas de carga. También recomienda el uso de caché externa como Varnish o Ezapps Zoom, y escalar la infraestructura separando la aplicación del servidor de base de datos.
Este documento proporciona instrucciones para configurar y ejecutar un script de Python para crear usuarios masivos en Active Directory. Explica cómo editar el script para adecuarlo a las necesidades específicas, como establecer la ubicación donde se crearán los usuarios y los campos de datos a extraer de un archivo CSV. También describe el formato y contenido requerido de dicho archivo CSV con la información de los usuarios. Finalmente, da instrucciones para ejecutar el script y verificar que los usuarios se hayan creado correctamente.
Este documento discute varias técnicas para mejorar la escalabilidad de aplicaciones Rails. Describe cómo Rankia ha crecido a millones de usuarios y contenidos utilizando estas técnicas como cachés, índices de base de datos, desnormalización, optimización de consultas y configuración de servidores. También cubre optimizaciones a nivel de frontend como imágenes comprimidas, reducción de peticiones de red, CSS ligero y uso de CDNs.
Configuración Script Usuarios Masivos Windows Server 2012 R2cyberleon95
Este documento describe cómo configurar y ejecutar un script para crear masivamente usuarios de Active Directory. Explica cómo editar un script de ejemplo para adecuarlo a las necesidades específicas, como especificar la ubicación donde se crearán los usuarios y los campos requeridos en el archivo CSV de entrada. Además, provee instrucciones sobre cómo ejecutar el script y verificar que los usuarios se hayan creado correctamente.
Este documento describe los conceptos básicos de automatización y controladores lógicos programables (PLC). Explica las ventajas de usar PLC en lugar de lógica cableada, así como los pasos para configurar e implementar un PLC, incluida la configuración de entradas y salidas, archivos de datos y comunicación.
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
Buenas práctias en el desarrollo de software con javascript. Código limpio, mantenible, escalable, tests,... Charla perteneciente al evento Betabeers Murcia del día 9 de Mayo de 2014
Curso migración de aplicaciones nsl nk90 a tmpEdgar Solis
El documento proporciona recomendaciones para el desarrollo de aplicaciones en la plataforma TMP, incluyendo la estructuración de scripts, llamadas a funciones, manejo de archivos, pruebas y documentación. Se describen buenas prácticas para la modularización, versionado, uso de rutas estándar y registro de cambios.
Es una introducción a PHP, para personas que ya tengan conocimientos de programación y quieran desarrollar sistemas de forma rápida, usando PHP, HTML5, JQUERY, GOOGLE MAPS, el ejemplo final aplica todas las tecnologías indicadas.
Este documento presenta información sobre la API web de Microsoft Dynamics 365. Brevemente describe las características clave de la API web como la implementación de OData V4, la capacidad de consumir y crear registros, y las limitaciones actuales como la actualización de campos de búsqueda a NULL. También proporciona enlaces a recursos adicionales sobre temas como Xrm.WebApi, Postman y Typescript.
El documento describe las 10 vulnerabilidades web más críticas según OWASP, incluyendo inyección SQL, XSS, y autenticación débil. También discute técnicas de inyección ciega como sumas lineales de valores ASCII y consultas pesadas para extraer datos de bases de datos de forma automática. El documento proporciona ejemplos detallados de cómo explotar estas vulnerabilidades.
Este proyecto presenta el diseño de un banco de pruebas dinamómetro para motores diésel de camiones fuera de carretera en una empresa mecánica. El banco permitirá realizar pruebas eficientes de motores reparados y diagnosticar fallas con precisión. El diseño incluye planos de la estructura, sistema de refrigeración y dinamómetro. El costo estimado de la implementación es de S/ 15,000. Se concluye que el banco optimizará las pruebas de motores y generará mayores ingresos para la
Laravel es un framework de código abierto para desarrollar aplicaciones web en PHP que sigue el patrón MVC. Utiliza Eloquent ORM para mapear tablas de base de datos a objetos y Blade como motor de plantillas. La estructura principal incluye carpetas para la aplicación, vistas, controladores y más. Eloquent ORM permite crear, leer, actualizar y eliminar registros de la base de datos como objetos.
Buenas Prácticas de desarrollo en Ruby on RailsSergio Gil
Este documento presenta las buenas prácticas de desarrollo en Ruby on Rails. Cubre temas como testing, control de versiones, documentación, arquitectura MVC, REST, acoplamiento, refactorización, uso de variables y el idioma del código. El objetivo es compartir opiniones sobre cómo escribir código Ruby on Rails de manera limpia, legible y mantenible.
Este documento presenta 20 consejos y trucos para mejorar el rendimiento y la seguridad de MySQL. Algunos de los consejos incluyen la configuración de cuotas de usuario, el uso de UTF-8, la importación y exportación de CSV, la elección adecuada del motor de almacenamiento y la investigación de los diferentes tipos de datos disponibles. El documento también cubre temas avanzados como subconsultas, procedimientos almacenados, gestores y disparadores.
Similar a Optimización, rendimiento y escalabilidad en ActiveRecord (20)
SOPRA STERIA presenta una aplicació destinada a persones amb discapacitat intel·lectual que busca millorar la seva integració laboral i digital. Permet crear currículums de manera senzilla i intuitiva, facilitant així la seva participació en el mercat laboral i la seva independència econòmica. Aquesta iniciativa no només aborda la bretxa digital, sinó que també contribueix a reduir la desigualtat proporcionant eines accessibles i inclusives. A més, "inCV" està alineat amb els Objectius de Desenvolupament Sostenible de l'Agenda 2030, especialment els relacionats amb el treball decent i la reducció de desigualtats.
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...AMADO SALVADOR
Descarga el Catálogo General de Tarifas 2024 de Vaillant, líder en tecnología para calefacción, ventilación y energía solar térmica y fotovoltaica. En Amado Salvador, como distribuidor oficial de Vaillant, te ofrecemos una amplia gama de productos de alta calidad y diseño innovador para tus proyectos de climatización y energía.
Descubre nuestra selección de productos Vaillant, incluyendo bombas de calor altamente eficientes, fancoils de última generación, sistemas de ventilación de alto rendimiento y soluciones de energía solar fotovoltaica y térmica para un rendimiento óptimo y sostenible. El catálogo de Vaillant 2024 presenta una variedad de opciones en calderas de condensación que garantizan eficiencia energética y durabilidad.
Con Vaillant, obtienes más que productos de climatización: control avanzado y conectividad para una gestión inteligente del sistema, acumuladores de agua caliente de gran capacidad y sistemas de aire acondicionado para un confort total. Confía en la fiabilidad de Amado Salvador como distribuidor oficial de Vaillant, y en la resistencia de los productos Vaillant, respaldados por años de experiencia e innovación en el sector.
En Amado Salvador, distribuidor oficial de Vaillant en Valencia, no solo proporcionamos productos de calidad, sino también servicios especializados para profesionales, asegurando que tus proyectos cuenten con el mejor soporte técnico y asesoramiento. Descarga nuestro catálogo y descubre por qué Vaillant es la elección preferida para proyectos de climatización y energía en Amado Salvador.
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)codesiret
Los protocolos son conjuntos de
normas para formatos de mensaje y
procedimientos que permiten a las
máquinas y los programas de aplicación
intercambiar información.
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
HPE presenta una competició destinada a estudiants, que busca fomentar habilitats tecnològiques i promoure la innovació en un entorn STEAM (Ciència, Tecnologia, Enginyeria, Arts i Matemàtiques). A través de diverses fases, els equips han de resoldre reptes mensuals basats en àrees com algorísmica, desenvolupament de programari, infraestructures tecnològiques, intel·ligència artificial i altres tecnologies. Els millors equips tenen l'oportunitat de desenvolupar un projecte més gran en una fase presencial final, on han de crear una solució concreta per a un conflicte real relacionat amb la sostenibilitat. Aquesta competició promou la inclusió, la sostenibilitat i l'accessibilitat tecnològica, alineant-se amb els Objectius de Desenvolupament Sostenible de l'ONU.
La inteligencia artificial sigue evolucionando rápidamente, prometiendo transformar múltiples aspectos de la sociedad mientras plantea importantes cuestiones que requieren una cuidadosa consideración y regulación.
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
2. Introducción
optimizar != escalar
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
3. Introducción
“La optimización es el proceso de
búsqueda de la mejor manera de realizar un
proceso, con respecto a uno o más
recursos, que pueden ser: tiempo de
ejecución, uso de memoria, uso de CPU...”
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
4. Introducción
“La escalabilidad es la propiedad deseable
de un sistema, que indica su habilidad para,
o bien manejar el crecimiento continuo de
trabajo de manera fluida, o bien para estar
preparado para hacerse más grande con un
impacto mínimo en el redimiento.”
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
5. Introducción
“El rendimiento es la relación entre los
resultados obtenidos y los recursos
utilizados.”
e = resultados / recursos
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
6. Introducción
Optimización => Aumentar el rendimiento
Escalabilidad => Mantener el rendimiento
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
7. Reducir el tamaño de las consultas
Consulta ineficiente:
def index
@users = User.find(:all, :limit => 20)
end
SELECT * FROM users LIMIT 0,10 ORDER BY id desc
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
8. Reducir el tamaño de las consultas
Optimización:
def index
@users = User.find(:all, :select => “id, name”, :limit => 20)
end
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
9. Reducir el tamaño de las consultas
Benchmark (75000 registros):
#1 User.find(:all, :limit => 20)
#2 User.find(:all, :limit => 20, :select => “id, name, surname”)
user system total real
#1 0.000000 0.000000 0.000000 ( 0.000927)
#2 0.000000 0.000000 0.000000 ( 0.000552)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
10. Reducir el tamaño de las consultas
Benchmark (75000 registros):
#1 User.find(:all)
#2 User.find(:all, :select => “id, name, surname”)
user system total real
#1 6.520000 0.350000 6.870000 ( 7.945950)
#2 2.140000 0.040000 2.180000 ( 2.931969)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
11. Contadores
Categorias
- Ruby (1345)
- Rails (2389)
- Testing (345)
- Performance (34)
for cat in @categories
puts “#{cat.name} (#{cat.posts.count})”
end
=> select count(*) from posts where category_id = id
500.000 posts x 4 categorias = 2.000.000 de registros consultados!!
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
12. Contadores
Optimización:
class Post < ActiveRecord::Base
belongs_to :category, :counter_cache => true
end
create_table :categories do |t|
t.string :name
...
t.integer :posts_count, :default => 0
t.timestamps
end
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
13. Contadores
for cat in @categories
puts “#{cat.name} (#{cat.posts_count})”
end
Evitamos los 2.000.000 de registros recorridos en 4 consultas
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
14. Eager Loading
Consulta ineficiente:
def index
@posts = Post.find(:all, :limit => 10)
end
for post in @posts
puts “Titulo:” + post.title
puts “Autor:” + post.user.name
end
=> 1+10 querys
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
15. Eager Loading
Optimización:
def index
@posts = Post.find(:all, :limit => 10, :include => :user)
end
for post in @posts
puts “Titulo:” + post.title
puts “Autor:” + post.user.name
end
=> 1+1 querys
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
16. Eager Loading
Optimización:
def index
@posts = Post.find(:all, :limit => 10, :select => “posts.id,
posts.title”, :include => :user)
end
for post in @posts
puts “Titulo:” + post.title
puts “Autor:” + post.user.name
end
=> 1+1 querys
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
17. Eager Loading
Problema:
Podríamos hacer...
def index
@posts = Post.find(:all, :limit => 10, :select => “posts.id,
posts.title, user.id, user.name”, :include => :user)
end
Pero no funciona :(
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
18. Eager Loading
Optimización:
def index
@posts = Post.find(:all, :limit => 10, :select => quot;posts.title,
users.name AS user_namequot;, :joins => [:user])
end
for post in @posts
puts “Titulo:” + post.title
puts “Autor:” + post.user_name
end
=> 1 query
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
19. Eager Loading
Consulta ineficiente:
def index
@post = Post.find(params[:id])
end
for comment in @post.comments
puts comment.body
puts “Autor:” + comment.user.name
end
=> 1 query para el post
=> 1 query para los comentarios
=> N querys para los usuarios
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
20. Eager Loading
Optimización:
def index
@post = Post.find(params[:id])
@comments = @post.comments.find(:all, :include => :user)
end
for comment in @comments
puts comment.body
puts “Autor:” + comment.user.name
end
=> 1 query para el post
=> 1 query para los comentarios
=> 1 query para los usuarios
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
21. Eager Loading
Optimización:
def index
@post = Post.find(params[:id],
:include => [:user, :comments])
end
puts “Post:” + @post.body
puts “Autor:” + @post.user.name
for comment in @post.comments
puts “Comentario:” + comment.body
end
=> 3 querys
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
22. Tareas en background
Si con lo anterior no es suficiente para optimizar una consulta
siempre nos queda el Método de toda la vida:
User.find_by_sql(SELECT id, name, surname WHERE user.name = 'Pepe')
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
23. Tareas en background
Sacar tareas fuera del ciclo del request
- Envío de emails
- Cálculos
- Tareas de mantenimiento
...
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
24. Tareas en background
Opciones:
- script/runner
- daemon_generator
- BackgrounDRB
- Spawn
- Starling
...
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
25. Índices
Consulta ineficiente:
@users = User.find(:all, :conditions => “name = Pepe”)
Recorre toda la tabla
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
26. Índices
Evitar consultas que recorran toda la tabla (*)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
27. Índices
Restricciones:
- No utilizar índices en columnas que se actualizan
frecuentemente
- No utilizar índices en columnas con poca variación (p.e.
booleanos)
- No utilizar Índices en tablas pequeñas
- No utilizar índices muy grandes
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
28. Índices
Optimización
Añadimos un índice en el campo “name” con una migración
add_index :users, :name
Benchmark 75000 usuarios
@users = User.find(:all, :conditions => “name = Pepe”)
user system total real
#1 0.010000 0.000000 0.010000 ( 0.631635)
#2 0.010000 0.000000 0.010000 ( 0.015232)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
29. Índices
Podemos añadir índices multicolumna
add_index :users, [:name, :city]
No permite índices de más de 1024 bytes
En UTF-8 cada carácter necesita 3 bytes
(256+256)*3 = 1536 bytes
1536 x 500000 = 768 MB
Limitar el tamaño de los campos
t.column :login, :string, :limit => 10, :null => false
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
30. Índices
Definir la longitud del índice
def self.up
execute quot;CREATE INDEX full_name ON users (name(10), surname(10))quot;
end
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
31. Índices
“La regla de la izquierda”
Si se utilizan índices multicolumna en las cláusulas WHERE, hay
que incluir siempre de izquierda a derecha las columnas
indexadas
add_index :users, [:name, :surname, :city]
SELECT * from users WHERE city = ʻMadridʼ
SELECT * from users WHERE name = ʻPepeʼ
SELECT * from users WHERE name = ʻPepeʼ AND surname = ʻLopezʼ
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
32. Índices y ordenación
Podemos añadir índices multicolumna para ordenar
add_index :users, [:city, :created_at]
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
33. MyISAM vs InnoDB
Benchmark 75000 usuarios
User.count
user system total real
#1 0.000000 0.000000 0.000000 ( 0.663447) (InnoDB)
#2 0.010000 0.000000 0.010000 ( 0.000688) (MyISAM)
User.find(:all)
user system total real
#1 11.040000 0.660000 11.700000 ( 12.585430) (InnoDB)
#2 11.070000 0.670000 11.740000 ( 12.124938) (MyISAM)
User.find(:all, :conditions => “name = ‘Pepe’”)
user system total real
#1 0.010000 0.000000 0.010000 ( 0.015615) (InnoDB)
#2 0.000000 0.000000 0.000000 ( 0.018247) (MyISAM)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
34. MyISAM vs InnoDB
Benchmark 270.000 posts
Post.find_by_category_id(14)
#1 0.000000 0.000000 0.000000 ( 0.000865) (InnoDB)
#2 0.000000 0.000000 0.000000 ( 0.001019) (MyISAM)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
35. MyISAM vs InnoDB
Benchmark 270.000 posts
Post.find(:all, :conditions => 'body LIKE “Hello”’)
user system total real
#1 0.000000 0.000000 0.000000 ( 3.471458) (InnoDB)
#2 0.000000 0.000000 0.000000 ( 3.371270) (MyISAM)
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
36. Herramientas
Antes de empezar a optimizar: rellenar la base de datos
- populator
- db-populate
- babel
...
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com
45. Resumen
• Optimizar es un proceso necesario y contínuo
• Optimizar a medida que desarrollamos o cuando
refactorizamos
• Utilizar herramientas para encontrar “slow
querys”
Optimización, rendimiento y escalabilidad en AR Emili Parreño - www.eparreno.com