Compartir a través de


Tablas elásticas para desarrolladores

Las tablas elásticas de Dataverse usan Azure Cosmos DB. Se escalan automáticamente de forma horizontal para manejar grandes cantidades de datos y altos niveles de caudal con baja latencia. Las tablas elásticas funcionan bien para las aplicaciones que tienen cargas de trabajo impredecibles, intermitentes o de crecimiento rápido.

Este artículo se centra en la información que los desarrolladores necesitan saber sobre el uso de tablas elásticas. Para obtener más información sobre las funcionalidades de las tablas elásticas y lo que se admite, consulte Creación y edición de tablas elásticas.

Cuándo usar tablas elásticas

Los requisitos específicos de los datos y la aplicación determinan si debe usar tablas elásticas o tablas estándar.

Use tablas elásticas en estas situaciones:

  • Es posible que los datos no estén estructurados o semiestructurados, o que el modelo de datos cambie constantemente.
  • Necesita el escalado horizontal para manejar el crecimiento de la carga de trabajo a lo largo del tiempo o una carga de trabajo repentina en un momento determinado.
  • Debe gestionar un gran volumen de solicitudes de lectura y escritura.

Use tablas estándar en estas situaciones:

  • La aplicación requiere una coherencia de datos sólida.
  • La aplicación requiere modelado relacional y necesita funcionalidad transaccional entre tablas o durante la ejecución del complemento.
  • Su aplicación requiere uniones complejas.

Una combinación de tablas elásticas y estándar podría ser adecuada para los datos y la aplicación.

Para obtener más información sobre las diferencias en el modelado de tablas elásticas, consulte:

Creación de particiones y escalado horizontal

Las tablas elásticas usan la creación de particiones de Azure Cosmos DB para escalar tablas individuales para cumplir los requisitos de rendimiento de la aplicación. Todas las tablas elásticas contienen una columna de cadena de identificador de partición definida por el sistema. Esta columna tiene el nombre PartitionId del esquema y el nombre partitionidlógico .

Azure Cosmos DB garantiza que las filas de una tabla se dividen en subconjuntos distintos, en función del valor de la partitionid columna para cada fila. Estos subconjuntos se denominan particiones lógicas.

Importante

Para obtener el mejor rendimiento disponible con tablas elásticas, elija y aplique de forma coherente una estrategia de creación de particiones. Si no establece un partitionid valor para cada fila, el valor permanece nulo y no se puede cambiar más adelante.

Si usa un valor personalizado partitionid , el valor de clave principal no tiene una restricción única. En otras palabras, puede crear varios registros que tengan la misma clave principal, pero valores diferentes partitionid . Es importante comprender que las referencias únicas para las tablas elásticas son una combinación de la clave principal y el partitionid valor.

Elección de un valor de partition ID

El partitionid valor que use depende de la naturaleza de los datos. Una partición lógica de una tabla elástica consta de un conjunto de filas que tienen el mismo partitionid valor. Por ejemplo, en una tabla que contiene datos sobre distintos productos, puede usar la categoría de producto como partitionid valor de la tabla. En este caso, los grupos de elementos que tienen valores específicos para la categoría de producto, como Clothing, Books, Electronic Appliancesy Pet supplies, forman particiones lógicas distintas.

Dataverse de forma transparente y automática administra particiones lógicas asociadas a una tabla. No hay ningún límite en el número de particiones lógicas que puede tener en una tabla. Además, no existe ningún riesgo de que se elimine una partición lógica si se eliminan sus filas subyacentes.

Para todas las tablas elásticas, la partitionid columna debe cumplir estos criterios:

  • Los valores no cambian. Después de crear una fila que tenga un partitionid valor, no se puede cambiar.
  • Tiene un valor de cardinalidad alto. En otras palabras, la propiedad tiene una amplia gama de valores posibles. Cada partición lógica puede almacenar 20 gigabytes (GB) de datos. Por lo tanto, al elegir un partitionid valor que tenga una amplia gama de valores posibles, asegúrese de que la tabla puede escalar sin alcanzar límites para cualquier partición lógica específica.
  • Distribuye los datos lo más uniformemente posible entre todas las particiones lógicas.
  • No hay valores mayores de 1024 bytes.
  • Ningún valor contiene barras diagonales (/), corchetes angulares (<, >), asteriscos (*), signos de porcentaje (%), ampersands (&), dos puntos (:), barras diagonales inversas (\), signos de interrogación (?) o signos más (+). Estos caracteres no son compatibles con claves alternativas.

Si no especifica un partitionid valor para una fila, Dataverse usa el valor de clave principal como valor predeterminado partitionid . En el caso de las tablas con intensas operaciones de escritura de cualquier tamaño o en los casos en que las filas se recuperan principalmente mediante la clave principal, esta es una opción excelente para la columna partitionid.

Nivel de coherencia

La tabla elástica admite una coherencia fuerte durante una sesión lógica. Una sesión lógica es una conexión entre un cliente y Dataverse. Cuando un cliente realiza una operación de escritura en una tabla elástica, recibe un token de sesión que identifica de forma única la sesión lógica. Para lograr una coherencia sólida, debe mantener el contexto lógico de la sesión mediante la inclusión del token de sesión en todas las solicitudes siguientes.

Los tokens de sesión garantizan que todas las operaciones de lectura que se realizan durante el mismo contexto de sesión lógica devuelvan la escritura más reciente realizada durante esa sesión lógica. En otras palabras, los tokens de sesión garantizan que las lecturas respeten las garantías read-your-writes y write-follows-reads dentro de una sesión lógica. Si una sesión lógica diferente realiza una operación de escritura, es posible que otras sesiones lógicas no detecten inmediatamente esos cambios.

El token de sesión está disponible como un x-ms-session-token valor en la respuesta de todas las operaciones de escritura. Para obtener la fila más reciente, debes incluir este valor cuando recuperes los datos.

  • Si usa el SDK, use el SessionToken parámetro opcional.
  • Si usa Web API, use el encabezado de solicitud MSCRM.SessionToken.

Si recupera un registro sin un token de sesión, es posible que no se apliquen los cambios aplicados recientemente. En su lugar, es posible que se devuelvan en solicitudes posteriores.

Obtenga más información sobre el uso del token de sesión.

Comportamiento transaccional

Las tablas elásticas no admiten transacciones de registros múltiples. Para una sola ejecución de solicitudes, varias operaciones de escritura que se producen durante la misma fase de complemento sincrónica o durante distintas fases de complemento sincrónicas no son transaccionales entre sí.

Por ejemplo, registra un paso de complemento sincrónico en la fase PostOperation del mensaje Create en una tabla elástica. En este caso, un error que se produce en el complemento no revierte el registro que se crea en Dataverse. Evite siempre cancelar intencionadamente cualquier operación mediante el lanzamiento de InvalidPluginExecutionException en la fase sincrónica PreOperation o PostOperation. Si el error se produce después de la Main operación, la solicitud devuelve un error, pero la operación de datos se realiza correctamente. Las operaciones de escritura que se inician en la fase PreOperation se realizan correctamente.

Sin embargo, aplique siempre reglas de validación en un complemento que registra para la etapa sincrónica PreValidation. La validación es el propósito de esta fase. Incluso cuando se usan tablas elásticas, la solicitud devuelve un error y la operación de datos no comienza. Obtenga más información sobre la canalización de ejecución de eventos.

Las tablas elásticas tampoco admiten la agrupación de solicitudes en una sola transacción de base de datos que usa la clase ExecuteTransactionRequest del SDK o en un conjunto de cambios de operación de API $batch web. Actualmente, estas operaciones se realizan correctamente, pero no son atómicas. En el futuro, estas operaciones generan un error.

Las tablas elásticas no admiten la inserción profunda como lo hacen las tablas estándar. Recibe este error: Cannot create related entities. Create has to be called individually for each entity.

Para obtener más información sobre las transacciones multiregistro, consulte:

Expiración de datos utilizando Tiempo de vida (TTL)

Dataverse incluye automáticamente una columna de período de vida entero con tablas elásticas. Esta columna tiene el nombre TTLInSeconds del esquema y el nombre ttlinsecondslógico .

Al establecer un valor en esta columna, define la cantidad de tiempo, en segundos, antes de que expire la fila y se elimine automáticamente de la base de datos. Si no establece un valor, el registro persiste indefinidamente, al igual que las tablas estándar.

Scenario

Los ejemplos de artículos relacionados usan este escenario.

Contoso opera un gran número de dispositivos de Internet de las cosas (IoT) que la empresa implementa en todo el mundo. Contoso debe almacenar y consultar grandes cantidades de datos de sensor que emiten los dispositivos IoT para que pueda supervisar su estado y recopilar otras conclusiones.

Para almacenar y consultar el gran volumen de datos de IoT, Contoso crea una tabla elástica denominada contoso_SensorData. Usa una columna de cadena denominada contoso_DeviceId como valor partitionid para cada fila que corresponda a un dispositivo. Dado que cada contoso_DeviceId valor es único para un dispositivo y Contoso realiza consultas principalmente en el contexto de un valor determinado contoso_DeviceId , actúa como una buena estrategia de partición para todo el conjunto de datos.

Artículos relacionados:

Problemas conocidos

Los siguientes problemas conocidos con las tablas elásticas deben solucionarse antes de que esta característica esté disponible con carácter general.

No se devuelve ningún error cuando las operaciones de datos de tabla elástica se agrupan en una transacción.

Dataverse no devuelve un error al agrupar las operaciones de datos mediante la clase ExecuteTransactionRequest del SDK o un conjunto de cambios de operación de API $batch web. Aunque se completan estas operaciones de datos, no se aplica ninguna transacción. Dado que no se puede aplicar ninguna transacción, estas operaciones deben fallar y devolver un error.

No se devuelve ningún valor x-ms-session-token para las operaciones de eliminación.

Dataverse no devuelve el valor x-ms-session-token de las operaciones de eliminación. Obtenga más información sobre cómo se usa este valor para la coherencia de los datos administrados.

El parámetro opcional partitionId no está disponible para todos los mensajes.

Siempre que se deba identificar un registro que use un partitionid valor personalizado, como para las operaciones Retrieve, Update o Upsert, necesita una manera de hacer referencia al valor partitionid. En este caso, puede usar la clave alternativa para hacer referencia al registro. Si lo prefiere, también debería poder usar el estilo de parámetro opcional partitionId. Actualmente, solo Retrieve y Delete las operaciones admiten el uso del parámetro opcional partitionId. Obtenga más información sobre el uso del parámetro partitionId.

Cuando se usa el período de vida (TTL) en una fila, la fila se eliminará de la tabla elástica cuando el TTL haya expirado. Si se sincroniza con un lago de datos mediante Synapse Link para Dataverse antes de que expire TTL, no se eliminará del lago de datos.

Preguntas más frecuentes

En esta sección se incluirán las preguntas más frecuentes (FAQ). Si tiene una pregunta que no se aborda en la documentación, seleccione el botón Esta página en la sección Comentarios de la parte inferior de la página. Debe tener una cuenta de GitHub para enviar preguntas de esta manera.

Pasos siguientes

Consulte también

Usar tablas elásticas mediante código
Consultar columnas JSON en tablas elásticas
Mensajes de operación en masa
Código de ejemplo de tablas elásticas
Realizar una partición y ampliación horizontal en Azure Cosmos DB