Compartir a través de


Consulta de varias particiones mediante las herramientas de Elastic Database

Se aplica a: Azure SQL Database

Información general

Con las herramientas de Elastic Database, puede crear soluciones de base de datos particionadas. Consultas a través de particiones múltiples se usa para tareas como informes y recopilación de datos que requieren ejecutar una consulta que abarca varias particiones. (Compare esto con el enrutamiento dependiente de los datos, que ejecuta todo el trabajo en una sola partición).

  1. Obtenga una clase RangeShardMap (Java, .NET) o ListShardMap (Java, .NET ) mediante los métodos TryGetRangeShardMap (Java, .NET), TryGetListShardMap ( Java, .NET) o GetShardMap (Java, .NET). Consulte Construcción de un ShardMapManager y Obtención de las clases RangeShardMap o ListShardMap.
  2. Cree un objeto MultiShardConnection (Java, .NET).
  3. Cree un objeto MultiShardStatement o MultiShardCommand (Java, .NET).
  4. Establezca la propiedad CommandText (Java, .NET) en un comando T-SQL.
  5. Ejecute el comando mediante una llamada a los métodos ExecuteQueryAsync o ExecuteReader (Java, .NET).
  6. Para ver los resultados use las clases MultiShardResultSet o MultiShardDataReader (Java, .NET).

Ejemplo

El código siguiente ilustra el uso de consultas a través de particiones múltiples con un ShardMap llamado myShardMap.

using (MultiShardConnection conn = new MultiShardConnection(myShardMap.GetShards(), myShardConnectionString))
{
    using (MultiShardCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable";
        cmd.CommandType = CommandType.Text;
        cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
        cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults;

        using (MultiShardDataReader sdr = cmd.ExecuteReader())
        {
            while (sdr.Read())
            {
                var c1Field = sdr.GetString(0);
                var c2Field = sdr.GetFieldValue<int>(1);
                var c3Field = sdr.GetFieldValue<Int64>(2);
            }
        }
    }
}

Una diferencia clave es la construcción de conexiones entre particiones múltiples. Donde SqlConnection opera en una base de datos individual, MultiShardConnection toma una colección de particiones como entrada. Complete la recopilación de particiones a partir de un mapa de particiones. Luego la consulta se ejecuta en la recopilación de particiones usando la semántica UNION ALL para ensamblar un solo resultado global. De manera opcional, el nombre de la partición donde se origina la fila se puede agregar a la salida usando la propiedad ExecutionOptions en el comando.

Observe la llamada a myShardMap.GetShards() . Este método recupera todas las particiones desde el mapa de particiones y brinda una manera fácil de ejecutar una consulta a través de todas las bases de datos importantes. La colección de particiones para una consulta a través de particiones múltiples se puede restringir aún más si se realiza una consulta LINQ sobre la colección devuelta desde la llamada a myShardMap.GetShards() . En combinación con la directiva de resultados parciales, la actual capacidad en las consultas a través de particiones múltiples se diseñó para funcionar bien con decenas, y hasta centenas, de particiones.

Una limitación con las consultas a través de particiones múltiples actualmente es la falta de validación de las particiones y de los shardlets que se consultan. Mientras que el enrutamiento dependiente de los datos comprueba que una partición determinada sea parte del mapa de particiones en el momento de la consulta, las consultas a través de particiones múltiples no realizan esta comprobación. Esto puede llevar a que las consultas a través de particiones múltiples se ejecuten en bases de datos que se han quitado del mapa de particiones.

Consultas a través de particiones múltiples y operaciones de división y combinación

Las consultas a través de particiones múltiples no comprueban si los shardlets en la base de datos consultada forman parte de las operaciones de división y combinación en curso. (Consulte el artículo sobre escalado con la herramienta de división y combinación de Elastic Database). Esto puede llevar a incoherencias donde las filas del mismo shardlet se muestran para bases de datos múltiples en la misma consulta a través de particiones múltiples. Tenga en cuenta estas limitaciones y considere la posibilidad de agotar las operaciones de división y combinación y los cambios en el mapa de particiones mientras se realizan consultas a través de particiones múltiples.

¿Aún no ha usado las herramientas de base de datos elástica? Consulte la Guía de introducción. Si tiene alguna pregunta, póngase en contacto con nosotros en la Página de preguntas y respuestas de Microsoft sobre SQL Database y, para efectuar solicitudes de características, agregue nuevas ideas o vote por las ideas existentes en el foro de comentarios sobre SQL Database.