Cuando utiliza el motor de cómputo Spark para acceder a Tablestore, puede usar E-MapReduce SQL o la programación con DataFrame para ejecutar cálculos complejos y analizar sus datos de manera eficiente.
Funciones
Para el cómputo por lotes, Tablestore on Spark ofrece las siguientes funciones principales de optimización:
-
Selección de índices: elegir el índice adecuado es clave para consultar los datos de forma eficiente. Elija el índice que mejor coincida con sus condiciones de filtro para mejorar la eficiencia de las consultas. Tablestore proporciona índices secundarios globales e índices de búsqueda.
NotaPara obtener más información sobre los índices secundarios globales y los índices de búsqueda, consulte A deep dive into massive structured data storage technology: Tablestore storage and indexing engines.
Poda de particiones de tabla: esta función compara las particiones lógicas (Splits) con las condiciones de filtro y descarta los Splits no válidos. De este modo, se reduce la cantidad de datos transferidos desde el servidor.
Descenso de proyecciones y filtros: esta función envía las columnas de proyección y las condiciones de filtro al servidor. Así se disminuye el volumen de datos transferidos desde cada partición.
-
Especificación dinámica del tamaño de Split: ajuste el volumen de datos y la cantidad de particiones en cada partición lógica (Split). Cada Split se asocia a una partición de Resilient Distributed Dataset (RDD), lo cual acelera la ejecución de las tareas de Spark.
NotaUtilice la API ComputeSplitsBySize para obtener las particiones lógicas (Splits). Esta API divide lógicamente una tabla completa en Splits de un tamaño aproximado especificado y devuelve los puntos de división junto con las sugerencias de ubicación de dichos Splits. Los motores de cómputo suelen utilizar esta información para planificar la ejecución, como la planificación de la concurrencia.
Para el cómputo de flujos, Tablestore on Spark emplea la tecnología Data Change Capture (CDC), basada en Tunnel Service, para implementar el consumo y el cálculo de flujos en minilotes dentro de Spark. También ofrece semántica de consistencia de tipo at-least-once. En el cómputo de flujos, cada partición se asocia a una partición de RDD. Al ampliar las particiones de la tabla, se logra un escalamiento lineal del rendimiento de los datos.
Métodos de uso
Según su escenario, elija entre E-MapReduce SQL y la programación con DataFrame para acceder a Tablestore mediante Spark.
-
Método E-MapReduce SQL
Este método usa instrucciones SQL estándar para operar y acceder a los datos del negocio. Es fácil de usar y permite migrar sin problemas la lógica de negocio existente.
-
Método DataFrame
Este método requiere conocimientos de programación. Sin embargo, le permite combinar componentes para implementar lógica de negocio compleja. Resulta ideal para escenarios complejos y flexibles.
Métodos de acceso a datos
Tablestore ofrece dos métodos de acceso a datos para el cómputo por lotes de Spark: la consulta KV en tablas de datos o índices secundarios globales, y la consulta de índices de búsqueda. Estos métodos admiten lecturas y escrituras rápidas de grandes volúmenes de datos estructurados, además de brindar amplias capacidades de consulta y análisis.
A continuación se describen las diferencias entre ambos métodos de acceso a datos:
La consulta KV resulta eficiente cuando las condiciones de filtro se aplican a columnas de clave principal. No obstante, no es adecuada para escenarios donde dichas condiciones cambian con frecuencia o involucran muchas columnas que no son de clave principal. Este método no admite consultas geográficas.
-
La consulta de índices de búsqueda es apropiada para los siguientes escenarios de acceso a datos:
NotaLos índices de búsqueda se basan en índices invertidos y almacenamiento columnar. Permiten resolver problemas de consulta complejos en big data y ofrecen funciones de consulta y análisis similares a las de Elasticsearch, como full-text search, fuzzy search, geo queries, and statistical aggregation.
Escenarios de análisis de datos en tiempo real con volúmenes pequeños de datos y requisitos estrictos de latencia.
Las condiciones de filtro involucran muchas columnas que no son de clave principal, y estas columnas no forman parte de las claves principales del índice secundario global ni de la tabla de datos.
-
Las condiciones de filtro tienen alta selectividad. Una condición sobre una sola columna elimina la mayor parte de los datos.
Por ejemplo, en
select * from table where col = 1000;,coles una columna que no pertenece a la clave principal, y la condicióncol = 1000filtra la mayor parte de los datos. Las condiciones de consulta incluyen una consulta geográfica.
La siguiente imagen utiliza la instrucción SQL select * from table where col1 like 'A%' or col2 = 'a'; para ilustrar los dos métodos de consulta.
-
Al acceder a los datos mediante un índice de búsqueda, el índice de
col1localiza una fila dondecol1es'Ali%':pk1 = 1. El índice decol2encuentra dos filas dondecol2es'a':pk1 = 1ypk1 = 2. Después, se aplica una operación de unión a los resultados intermedios para obtener el resultado final que cumple las condiciones:pk1 = 1, col1 = 'Alibaba Cloud', col2 = 'a'. -
Al acceder a los datos con el método de consulta KV, la consulta se ejecuta directamente sobre la tabla de datos de Tablestore. Dicha tabla solo se puede consultar por clave principal. Si las columnas de filtro en la instrucción SQL no corresponden a claves principales de la tabla de datos, se requiere un escaneo completo de la tabla.
Como
col1no es una clave principal de la tabla de datos, Tablestore ejecuta un escaneo completo para encontrar la fila dondecol1es'Ali%'. Puesto quecol2tampoco es clave principal, Tablestore realiza otro escaneo completo para ubicar las dos filas dondecol2es'a'. Posteriormente, se aplica una operación de unión a los resultados intermedios.En este caso, también puede crear una tabla de índices con
col1ycol2como claves principales para admitir esta consulta. Sin embargo, este método es menos flexible.