Compartir a través de


Tablas elásticas para desarrolladores

Las tablas elásticas de Dataverse cuentan con tecnología de 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 son adecuadas para aplicaciones con cargas de trabajo impredecibles, puntiagudas o de rápido crecimiento.

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, vaya a 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, vaya a:

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, debe elegir y aplicar de forma coherente una estrategia de creación de particiones. Si no establece un partitionid valor para cada fila, el valor permanecerá nulo y no podrá cambiarlo 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 debe usar 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 en él 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 debe tener 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 se 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, tiene un paso de complemento síncrono que está registrado en la etapa 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. Siempre debe evitar cancelar intencionalmente cualquier operación lanzando InvalidPluginExecutionException en las etapas sincrónicas 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, siempre debe aplicar reglas de validación en un complemento registrado para la PreValidation fase sincrónica. 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 se iniciará. 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, se lanzará un error.

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

Para más información sobre las transacciones de varios registros, vaya a:

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 .

Cuando se establece 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 se establece ningún 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 ha implementado en todo el mundo. Contoso debe almacenar y consultar grandes cantidades de datos de sensor emitidos desde 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