Realizar búsquedas y consultas de datos
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Utilizar consultas sin reducir el desempeño al trabajar con grandes volúmenes de datos.
- Utilizar consultas masivas para consultar grandes conjuntos de datos de forma eficiente.
- Describir las ventajas del uso de tablas reducidas para contener campos utilizados con frecuencia.
Arquitectura de búsqueda
El almacenamiento de grandes cantidades de datos en su organización puede afectar el desempeño, y eso incluye definitivamente las búsquedas. La búsqueda es la capacidad de consultar registros basándose en texto de formato libre. La arquitectura de búsqueda de Salesforce se basa en su propio almacenamiento de datos, que se optimiza para la búsqueda de ese texto.
Para que los datos se puedan buscar, primero se deben indexar. Force.com indexa automáticamente la mayoría de los campos de texto de modo que sus usuarios puedan crear búsquedas de objetos cruzados y encontrar rápidamente registros que contienen cadenas de interés. Las búsquedas indexadas se realizan primero buscando los índices para registros apropiados, liego restringiendo los resultados basándose en permisos de acceso, límites de búsqueda y otros filtros.
Ésto crea un conjunto de resultados, que contiene habitualmente los resultados más relevantes. Cuando el conjunto de resultados alcanza un tamaño predeterminado, se descartan los registros restantes. El conjunto de resultados se utiliza a continuación para consultar los registros desde la base de datos para recuperar los campos que un usuario ve. Además, cuando se agregan o se cambian grandes volúmenes de datos, toso este proceso podría tardar mucho tiempo.
Uso de consultas
Considere este escenario: Obtuvo un buen conjunto de objetos limitado. Todo el código para integraciones y páginas de Visualforce personalizadas se redactó y funciona bien con datos de prueba. Todo va bien cuando los usuarios comienzan a utilizar el sistema. Pero el desempeño comienza a degradarse seriamente cuando la organización carga o acumula una gran cantidad de datos.
La solución: creación de consultas. Es clave para el diseño de una organización que puede gestionar LDV. Es importante diseñar vistas de lista, reportes y consultas SOQL selectivos, y comprender la optimización de consultas.
Consultas SOQL frente a SOSL
Se puede acceder a la búsqueda con consultas SOQL o SOSL. SOQL es el lenguaje de consulta de base de datos de Force.com, similar a SQL. Puede utilizar SOQL para consultar relaciones secundario a principal, que son a menudo varios a uno, y las relaciones principal a secundario, que son en su mayoría uno a varios.
SOSL es el lenguaje de búsqueda de texto completo de Force.com. SOSL puede tokenizar múltiples términos en un campo, y puede crear un índice de búsqueda fuera de éste. Si está buscando un término distinto específico que sabe que existe en un campo, podría encontrar SOSL con mayor rapidez que SOQL. Sin embargo, para cada transacción de Apex, el límite regulador correspondiente a múltiples búsquedas SOSL es 2.000; para búsquedas SOQL es 50.000. Por lo que necesita recuperar más de 2.000 registros, SOQL la mejor opción.
Query Optimizer de Force.com
Como Salesforce utiliza arquitectura de múltiples arrendatarios, el optimizador del sistema de la base de datos no puede optimizar de forma efectiva consultas de Salesforce sin ayuda. Por lo que la plataforma de Salesforce incluye su propio optimizador de consultas que saca provecho de campos sin indexar para crear el plan de ejecución más eficiente para una consulta concreta, ayudando el optimizador de sistema de la base de datos a producir planes de ejecución efectivos para consultas de Salesforce.
El optimizador de consultas de Force.com mantiene una tabla de estadísticas acerca de la distribución de datos en cada índice. Utiliza esta tabla para realizar consultas previas para determinar su el uso del índice puede acelerar la consulta. Funciona ne las consultas generadas automáticamente para gestionar reportes, vistas de lista y tanto las consultas SOQL como las otras consultas que se aprovechan de ellas.
Apex por lotes
En general, la mejor forma de consultar y procesar grandes conjuntos de datos en la plataforma Force.com es hacerlo de forma asíncrona en lotes. Puede consultar y procesar hasta 50 millones de registros utilizando Apex por lotes.
Apex por lotes no funciona en todos los casos de uso (por ejemplo, si tiene un uso síncrono como una página de Visualforce que necesita consultar más de 50.000 registros), pero es una gran herramienta a tener en su kit de herramientas.
Consultas masivas
Otra estrategia para consultar grandes conjuntos de datos de forma eficiente es utilizar consultas masivas. Una consulta masiva puede recuperar hasta 15 GB de datos, divididos en quince archivos de 1 GB. Cuando los resultados exceden 1 GB, se agregan archivos adicionales para completar la respuesta.
La consulta de API masiva admite operaciones consultar y consultar todo. La operación consultar todo devuelve registros que se eliminaron debido a una combinación o una eliminación. La operación consultar todo devuelve también información acerca de registros de Tarea y Evento archivados.
Al agregar un lote a un trabajo de consulta masiva, el tipo de contenido en el encabezado para la solicitud debe ser text/csv, application/xml o application/json, dependiendo del tipo de contenido especificado cuando se creó el trabajo. La declaración SOQL actual proporcionada para el lote tiene un formato de texto sin formato.
How Bulk Queries Are Processed
Cuando se procesa una consulta masiva, Salesforce intenta ejecutar la consulta. Si la consulta no se ejecuta en el límite de tiempo de espera estándar de dos minutos, el trabajo falla y se devuelve un error QUERY_TIMEOUT. Si sucede ésto, vuelva a escribir una consulta más sencilla y reenvíe el lote.
Si la consulta se realiza con éxito, Salesforce intenta recuperar los resultados. Si los resultados superan el límite de tamaño de archivo de 1 GB o su recuperación tarda más de 5 minutos, los resultados completados se incluyen en la caché y se lleva a cabo otro intento. Después de 30 intentos, el trabajo falla y se devuelve el mensaje de error Recuperado más de treinta veces. Si sucede esto, considere el uso del encabezado Fragmentación de PK para dividir los resultados de la consulta en fragmentos más pequeños (se proporciona más información sobre la fragmentación de PK en una unidad subsiguiente). Si los intentos se realizan con éxito, los resultados se devuelven y se almacenan durante siete días.
Uso de tablas reducidas
Supongamos que siguió mejores prácticas de codificación y trabajó con Servicio de atención al cliente de Salesforce para colocar índices personalizados donde sean apropiados, pero aún encuentra problemas de desempeño. Los usuarios se quejan del tiempo de espera de sus reportes y tableros y el SOQL llamado desde su página de Visualforce tiene un desempeño cada vez más lento. Si necesita con urgencia mejorar aún más el desempeño, existe una solución potente especial: tablas reducidas.
Una tabla reducida es una tabla personalizada en la plataforma Force.com que contiene un subconjunto de campos desde un objeto de Salesforce base estándar o personalizado. Force.com puede tener múltiples tablas reducidas si es necesario y las mantiene completamente transparentes para usted.
Teniendo filas más reducidas y menos datos para explorar que el objeto de Salesforce base, las tablas reducidas permiten a Force.com devolver más filas por búsqueda de la base de datos, aumentando la productividad al leer desde un objeto de gran tamaño, como muestra este diagrama:
Además, las talas reducidas no incluyen filas eliminadas recuperables (por ejemplo, registros en la papelera con isDeleted = true), que a menudo reduce el volumen de la tabla. Los índices personalizados en la tabla base también se replican y habitualmente funcionan mejor debido las uniones de tabla reducidas que suceden en las consultas de base de datos subyacentes.
Éste es un ejemplo de cómo puede una tabla reducida acelerar consultas. En vez de utilizar un intervalo de fecha como 01/01/16 a 12/31/16 (que implica un cálculo repetido costoso para crear un reporte anula o del año hasta la fecha), puede utilizar una tabla reducida para incluir un campo Año y filtrar en Año = '2016'.
La plataforma Force.com sincroniza automáticamente las filas entre el objeto base y la tabla reducida, por lo que los datos siempre se mantienen actualizados. La plataforma Force.com determina en el momento de ejecución de la consulta cuándo tendría sentido utilizar tablas reducidas, por lo que no tiene que modificar sus reportes o desarrollar ningún código Apex o llamadas de API.
La tablas reducidas son más útiles con tablas que contienen millones de registros. Se puede crear en objetos personalizados, y en objetos Cuenta, Contacto, Oportunidad, Prospecto y Caso. Además, pueden mejorar el desempeño para reportes, vistas de lista y SOQL.
Las tablas reducidas puede ser una forma práctica de remediar problemas de desempeño. Pero podrían no ajustarse a todos los casos de uso, o mejorar el desempeño más que leer desde el objeto de Salesforce base con índices eficientes. Incluyen efectos laterales que debe comprender, porque podrían restringir o sobrecargar sus procesos de negocio.
Éstas son algunas cosas a tener en cuenta antes de implementar tablas reducidas:
-
Las tablas reducidas son reducidas. Para garantizar un desempeño óptimo, contienen únicamente el conjunto de campos mínimo requerido para cumplimentar casos de uso de negocio específicos. Si decide más tarde agregar un campo a su reporte o consulta SOQL, debe hacer contacto con el Servicio de atención al cliente de Salesforce para volver a crear la tabla.
-
Para entornos sandbox completos: Las tablas reducidas se copian a sus organizaciones de sandbox completos. Para otros tipos de entornos sandbox: Las tablas reducidas no se copian en sus organizaciones de sandbox. Para activar las tablas reducidas de producción para tipos de sandbox que no sean sandbox completos, haga contacto con el Servicio de atención al cliente de Salesforce.
-
Las tablas reducidas son tablas personalizadas en la base de datos subyacente de Force.com. No tienen la flexibilidad de metadatos dinámica que encuentra en el objeto base. Si altera un tipo de campo (por ejemplo, cambia un campo de número a un campo de texto), la tabla reducida queda invalida y debe hacer contacto con el Servicio de atención al cliente de Salesforce para crear una nueva tabla reducida.
Ahora que tiene algunas herramientas para acelerar búsquedas que incluyen grandes volúmenes de datos, continúe a la siguiente unidad para ver la verdad en cargas de datos.
Recursos
- Desarrollador de Salesforce: Long- and Short-Term Approaches for Tuning Force.com Performance
- Desarrollador de Salesforce: Working with Very Large SOQL Queries
- PDF: Force.com SOQL Best Practices: Nulls and Formula Fields
- Desarrollador de Salesforce: Mejores prácticas para implementaciones con grandes volúmenes de datos/SOQL y SOSL
- Desarrollador de Salesforce: How Bulk Queries Are Processed
- Desarrollador de Salesforce: Best Practices for Deployments with Large Data Volumes
- Desarrollador de Salesforce: Walk Through a Bulk Query Sample
- PDF: Query & Search Optimization Cheat Sheet