Preguntas frecuentes sobre Azure Cosmos DB for Table

SE APLICA A: Table

Comparativa de Azure Cosmos DB for Table y Azure Table Storage

¿En qué se diferencia API para Table del comportamiento de Azure Table Storage?

Hay algunas diferencias de comportamiento que los usuarios acostumbrados a Azure Table Storage que deseen crear tablas con Azure Cosmos DB for Table deben tener en cuenta:

  • Azure Cosmos DB for Table utiliza un modelo de capacidad reservada con el fin de asegurar un rendimiento garantizado, pero esto significa que se paga por la capacidad en cuanto se crea la tabla, incluso aunque no se esté usando. Con Azure Table Storage, solo se paga por la capacidad que se utilice. Esto ayuda a explicar por qué API para Table puede ofrecer un Acuerdo de Nivel de Servicio con lecturas de 10 ms y escrituras de 15 ms en el percentil 99, mientras que Azure Table Storage ofrece un Acuerdo de Nivel de Servicio de 10 segundos. Pero, como consecuencia, con las tablas de API para Table, incluso las tablas vacías sin ninguna solicitud cuestan dinero, con el fin de garantizar que la capacidad está disponible para atender las solicitudes que les llegan en el Acuerdo de Nivel de Servicio ofrecido por Azure Cosmos DB.

  • Los resultados de las consultas que devuelve la API para Table no se ordenan por la clave de fila ni por la clave de partición como sucede en Azure Table Storage.

  • Las claves de fila solo pueden ser de hasta 255 bytes.

  • Los lotes solo pueden contener hasta 2 MB.

  • CORS no se admite actualmente.

  • En los nombres de tabla de Azure Table Storage no se distinguen mayúsculas de minúsculas, a diferencia de lo que ocurre en Azure Cosmos DB for Table.

  • Algunos de los formatos internos de Azure Cosmos DB para codificar la información, como los campos binarios, no son actualmente tan eficientes como se podría desear. Por lo tanto, esto puede causar limitaciones inesperadas en el tamaño de los datos. Por ejemplo, actualmente no se puede utilizar el Meg completo de una entidad de tabla para almacenar datos binarios porque la codificación aumenta el tamaño de los datos.

  • Azure Cosmos DB reserva los nombres de propiedad de entidad ID, rid, etag y ResourceId; actualmente no se admiten.

  • TableQuery TakeCount no se limita a 1000.

  • En términos de la API de REST, Azure Table Storage (no así Azure Cosmos DB for Table) admite los siguientes puntos de conexión u opciones de consulta:

    Métodos REST Opción de punto de conexión o consulta de REST Direcciones URL de documento Explicación Se admite en Table Storage Se admite en API para Table
    GET, PUT /?Restype=service@comp=properties Establecer propiedades de Table service y Obtener propiedades de Table service Este punto de conexión se usa para establecer reglas de CORS, de configuración del análisis de almacenamiento y de configuración del registro. CORS no se admite actualmente y el análisis y el registro se tratan de forma diferente en Azure Cosmos DB y en Azure Storage Tables No
    OPTIONS /<table-resource-name> Solicitud de tabla preparatoria CORS Esto forma parte de CORS, el cual Azure Cosmos DB no admite actualmente. No
    GET /?Restype=service@comp=stats Obtener estadísticas de Table service Proporciona información sobre la rapidez con que los datos se están replicando datos entre los elementos principales y los secundarios. Esto no es necesario en Azure Cosmos DB ya que la replicación es parte de las escrituras. No
    GET, PUT /mytable?comp=acl Obtener tabla ACL y Definir ACL de tabla Así se obtienen y establecen las directivas de acceso almacenadas que se usan para administrar las firmas de acceso compartido (SAS). No
  • Azure Cosmos DB for Table solo admite el formato JSON, no ATOM.

  • Para el SDK de .NET en concreto, hay algunas clases y métodos que Azure Cosmos DB no admite actualmente.

    • Clase CloudTableClient
      • \ServiceProperties
      • \ServiceStats
    • Clase CloudTable
      • SetPermissions
      • GetPermissions

Otras preguntas frecuentes

¿Se necesita un SDK nuevo para usar la API para Table?

No, los SDK de almacenamiento existentes deberían seguir funcionando. Sin embargo, se recomienda obtener siempre los SDK más recientes para lograr la mejor compatibilidad y, en muchos casos, un rendimiento superior. Consulte la lista de lenguajes disponibles en la Introducción a Azure Cosmos DB for Table.

¿Qué cadena de conexión hay que usar para conectarse a la API para Table?

La cadena de conexión es:

DefaultEndpointsProtocol=https;AccountName=<AccountNamefromCosmosDB;AccountKey=<FromKeysPaneofCosmosDB>;TableEndpoint=https://<AccountName>.table.cosmosdb.azure.com

Puede obtener la cadena de conexión en la página de cadenas de conexión de Azure Portal.

¿Cómo se invalidan los valores de configuración de las opciones de solicitud del SDK de .NET para la API para Table?

Algunas opciones de configuración se tratan en el método CreateCloudTableClient y otros a través del archivo app.config en la sección appSettings en la aplicación cliente. Para información sobre las opciones de configuración, vea Funcionalidades de Azure Cosmos DB.

¿Existen cambios para los clientes que usan los SDK existentes de Azure Table Storage?

Ninguno. No hay ningún cambio para los clientes nuevos o existentes que usan los SDK existentes de Azure Table Storage.

¿Cómo se ven los datos de tablas que se almacenan en Azure Cosmos DB para usarlos con la API para Table?

Puede usar Azure Portal para examinar los datos. También puede usar el código de la API para Table o las herramientas que se mencionan en la respuesta siguiente.

¿Qué herramientas funcionarán con la API para Table?

Puede usar el Explorador de Azure Storage.

Las herramientas que tengan la flexibilidad suficiente como para aceptar una cadena de conexión con el formato especificado antes son compatibles con la nueva API para Table. En la página Herramientas de cliente de Azure Storage se ofrece una lista de herramientas de tabla.

¿Se controla la simultaneidad en las operaciones?

Sí, se ofrece simultaneidad optimista a través del mecanismo de ETag.

¿Es el modelo de consulta de OData compatible con entidades?

Sí. La API para Table admite la consulta OData y la consulta LINQ.

¿Puedo conectarme en paralelo a Azure Table Storage y a Azure Cosmos DB for Table en la misma aplicación?

Sí, puede conectarse mediante la creación de dos instancias independientes de CloudTableClient, donde cada una apunte a su propio URI a través de la cadena de conexión.

¿Cómo se puede migrar la aplicación de Azure Table Storage existente a esta nueva oferta?

Se admite AzCopy.

¿Cómo se realiza la expansión del tamaño de almacenamiento para este servicio si, por ejemplo, se empieza por "n" GB de datos y con el tiempo los datos crecen a 1 TB?

Azure Cosmos DB está diseñado para ofrecer almacenamiento ilimitado mediante el uso de escalado horizontal. Nuestro servicio puede supervisar y aumentar el almacenamiento de forma eficaz.

¿Cómo se supervisa la oferta de API para Table?

Puede usar el panel Métricas de la API para Table para supervisar las solicitudes y el uso del almacenamiento.

¿Cómo se puede calcular el rendimiento que se necesita?

Puede usar la calculadora de capacidad para calcular el valor de TableThroughput necesario para las operaciones. Para más información, vea Estimate Request Units and Data Storage (Cálculo de unidades de solicitud y almacenamiento de datos). Normalmente, puede mostrar la entidad como JSON e indicar las cantidades para las operaciones.

¿Se puede usar el SDK de API para Table localmente con el emulador?

De momento, no.

¿Puede una aplicación existente funcionar con la API para Table?

Sí, se admiten las mismas API.

¿Es necesario migrar las aplicaciones existentes de Azure Table Storage al SDK si no se quieren usar las características de la API para Table?

No, se pueden crear y usar recursos existentes de Azure Table Storage sin interrupciones de ningún tipo. Sin embargo, si no usa la API para Table, no podrá aprovechar el índice automático, la opción de coherencia adicional ni la distribución global.

¿Cómo se agrega la replicación de los datos de la API para Table en más de una región de Azure?

Puede usar la configuración de replicación global del portal de Azure Cosmos DB para agregar regiones que sea adecuada para la aplicación. Para desarrollar una aplicación distribuida globalmente, debe agregar también la aplicación con la información de PreferredLocation establecida en la región local para proporcionar baja latencia de lectura.

¿Cómo se puede cambiar la región principal de escritura para la cuenta de la API para Table?

Puede usar el panel del portal de replicación global de Azure Cosmos DB para agregar una región y luego conmutar por error a la región necesaria. Para obtener instrucciones, vea Developing with multi-region Azure Cosmos DB accounts (Desarrollo con cuentas de Azure Cosmos DB de varias regiones).

¿Cómo se configuran las regiones de lectura preferidas con una baja latencia al distribuir los datos?

Con el fin de leer desde la ubicación local, use la clave PreferredLocation en el archivo app.config. En aplicaciones existentes, la API para Table genera un error si se establece LocationMode. Quite el código, ya que la API para Table recoge esta información del archivo app.config.

¿Cómo debo plantearme los niveles de coherencia en la API para Table?

Azure Cosmos DB ofrece contrapartidas bien fundamentadas entre coherencia, disponibilidad y latencia. Azure Cosmos DB ofrece cinco niveles de coherencia para desarrolladores de API para Table, por lo que puede elegir el modelo adecuado en el nivel de tabla y realizar solicitudes individuales al tiempo que se consultan datos. Al conectarse, el cliente puede especificar un nivel de coherencia. Puede cambiar el nivel a través del argumento consistencyLevel de CreateCloudTableClient.

La API para Table ofrece lecturas de baja latencia con la opción de lectura de sus propias escrituras con coherencia de obsolescencia limitada como valor predeterminado. Para más información, consulte Niveles de coherencia.

De forma predeterminada, Azure Table Storage ofrece una coherencia alta dentro de una región y una posible coherencia en las ubicaciones secundarias.

¿Azure Cosmos DB for Table ofrece más niveles de coherencia que Azure Table Storage?

Sí, para obtener información sobre cómo beneficiarse de la naturaleza distribuida de Azure Cosmos DB, vea Niveles de coherencia. Dado que se ofrecen garantías para los niveles de coherencia, puede usarlos con toda confianza.

Cuando se habilita la distribución global, ¿cuánto se tarda en replicar los datos?

En cuestión de milisegundos, Azure Cosmos DB confirma los datos de manera duradera en la región local y los inserta inmediatamente en otras regiones. Esta replicación solo depende del tiempo de ida y vuelta (RTT) del centro de datos. Para obtener más información sobre la funcionalidad de distribución global de Azure Cosmos DB, vea Azure Cosmos DB: Distribución de datos global con Azure Cosmos DB.

¿Se puede cambiar el nivel de coherencia de la solicitud de lectura?

Con Azure Cosmos DB, puede establecer el nivel de coherencia en el nivel de contenedor (en la tabla). Mediante el SDK para .NET, puede cambiar el nivel especificando el valor de la clave TableConsistencyLevel en el archivo app.config. Los valores posibles son: Alta, Obsolescencia limitada, Sesión, Prefijo coherente y Posible. Para más información, vea Niveles de coherencia de datos optimizables en Azure Cosmos DB. La idea clave es que no se puede establecer el nivel de coherencia de la solicitud por encima del establecido para la tabla. Por ejemplo, no puede establecer el nivel de coherencia de la tabla en Posible y el nivel de coherencia de la solicitud en Alta.

¿Cómo trata la API para Table la conmutación por error en caso de que una región deje de funcionar?

La API para Table usa la plataforma distribuida globalmente de Azure Cosmos DB. Para garantizar que la aplicación puede tolerar un tiempo de inactividad del centro de datos, habilite otra región adicional para la cuenta como mínimo en Developing with multi-region Azure Cosmos DB accounts (Desarrollo con cuentas de Azure Cosmos DB de varias regiones) del portal de Cosmos DB. Puede establecer la prioridad de la región mediante Developing with multi-region Azure Cosmos DB accounts (Desarrollo con cuentas de Azure Cosmos DB de varias regiones) del portal.

Puede agregar todas las regiones que quiera para la cuenta y controlar adónde puede conmutar por error especificando una prioridad. Para usar la base de datos, debe especificar también una aplicación allí. Al hacerlo, los clientes no experimentarán tiempo de inactividad. El SDK cliente de .NET más reciente tiene hospedaje automático, a diferencia de los otros SDK. Es decir, puede detectar la región que no funciona y conmutar por error automáticamente a la nueva región.

¿Está habilitada la API para Table para copias de seguridad?

Sí, la API para Table aprovecha la plataforma de Azure Cosmos DB para las copias de seguridad. Se realizan copias de seguridad automáticamente. Para más información, vea Copias de seguridad y restauración automáticas en línea con Azure Cosmos DB.

¿Indexa la API para Table todos los atributos de una entidad de manera predeterminada?

Sí, todos los atributos de una entidad se indexan de forma predeterminada. Para obtener más información, vea Directivas de indexación de Azure Cosmos DB.

¿Significa esto que no hay que crear más de un índice para responder a las consultas?

Sí, Azure Cosmos DB for Table ofrece indexación automática de todos los atributos sin ninguna definición de esquema. Esta automatización libera al desarrollador para que se centre en la aplicación y no en la creación y administración de índices. Para obtener más información, vea Directivas de indexación de Azure Cosmos DB.

¿Se puede cambiar la directiva de indexación?

Sí, puede cambiar la directiva de indexación especificando la definición del índice. Esta configuración se tiene que codificar adecuadamente e incluir secuencias de escape.

La directiva de indexación solo se puede establecer en el portal en el Explorador de datos. Vaya a la tabla concreta que quiera cambiar y, después, vaya a Escala y configuración->Directiva de indexación, realice el cambio deseado y, a continuación, haga clic en Guardar.

Azure Cosmos DB como plataforma parece tener gran cantidad de funcionalidades, como ordenación, agregados, jerarquía y otras funciones. ¿Se van a agregar estas funcionalidades a la API para Table?

La API para Table proporciona la misma funcionalidad de consulta que Azure Table Storage. Azure Cosmos DB también admite ordenación, agregados, consulta geoespacial, jerarquía y una amplia variedad de funciones integradas. Para más información, vea Consultas de SQL.

¿Cuándo se debe cambiar TableThroughput por la API para Table?

Debe cambiar el valor de TableThroughput cuando se cumpla alguna de las condiciones siguientes:

  • Va a realizar una extracción, transformación y carga (ETL) de datos o quiere cargar una gran cantidad de datos en un período corto de tiempo.
  • Necesita más rendimiento desde el contenedor o desde un conjunto de contenedores en el back-end. Por ejemplo, verá que el rendimiento de uso es mayor que el rendimiento aprovisionado, lo que se traduce en limitaciones. Para más información, vea Configuración del rendimiento para contenedores de Azure Cosmos DB.

¿Se puede escalar o reducir verticalmente el rendimiento de mi tabla de API para Table?

Sí, puede usar el panel de escala del portal de Azure Cosmos DB para ello. Para más información, vea Establecimiento del rendimiento.

¿Existe un TableThroughput predeterminado que se establezca para tablas recién aprovisionadas?

Sí, si no invalida TableThroughput a través de app.config y no usa un contenedor creado previamente en Azure Cosmos DB, el servicio crea una tabla con un rendimiento de 400.

¿Hay algún cambio de precio para los clientes actuales del servicio Azure Table Storage?

Ninguno. No hay ningún cambio de precio para los clientes existentes de Azure Table Storage.

¿Cómo se calcula el precio de la API para Table?

El precio depende del TableThroughput asignado.

¿Cómo se tratan las limitaciones de frecuencia en las tablas de la oferta de API para Table?

Si la tasa de solicitudes es mayor que la capacidad del rendimiento aprovisionado para el contenedor subyacente o un conjunto de contenedores, obtiene un error y el SDK vuelve a intentar la llamada aplicando la directiva de reintentos.

¿Por qué hay que elegir un rendimiento además de PartitionKey y RowKey para aprovechar las ventajas de la oferta de API para Table de Azure Cosmos DB?

Si no se especifica un rendimiento predeterminado para el contenedor en el archivo app.config o a través del portal, Azure Cosmos DB establecerá uno.

Azure Cosmos DB ofrece garantías de rendimiento y latencia con límites superiores por operación. Esta garantía es posible cuando un motor puede aplicar la gobernanza de las operaciones del inquilino. Al establecer TableThroughput se asegura de obtener el rendimiento y la latencia garantizados, ya que la plataforma reserva esta capacidad y garantiza el éxito operativo.

Si usa la especificación de rendimiento, puede cambiarla de forma elástica para aprovechar la estacionalidad de la aplicación, satisfacer las necesidades de rendimiento y ahorrar costos.

Azure Table Storage me ha resultado económico ya que solo pago por almacenar los datos y rara vez hago consultas. Parece que la oferta de Azure Cosmos DB for Table me cobra aunque no haya realizado ni una sola transacción ni haya almacenado nada. ¿Cómo se explica esto?

Azure Cosmos DB se ha diseñado para ser un sistema basado en contratos de nivel de servicio distribuido globalmente con garantías de disponibilidad, latencia y rendimiento. A diferencia de otros sistemas, cuando se reserva rendimiento en Azure Cosmos DB, este está garantizado. Azure Cosmos DB ofrece más funcionalidades que los clientes han solicitado, como índices secundarios y distribución global.

Nunca aparece una notificación de "cuota completa" (que indica que una partición está completa) cuando se ingieren datos en Azure Table Storage. Con la API para Table, recibo este mensaje. ¿Esta oferta me limita y me obliga a cambiar mi aplicación actual?

Azure Cosmos DB es un sistema basado en contratos de nivel de servicio que ofrece escalado ilimitado con garantías de latencia, rendimiento, disponibilidad y coherencia. Para obtener el rendimiento premium garantizado, asegúrese de que el tamaño de los datos y el índice son administrables y escalables. El límite de 20 GB en el número de entidades o elementos por clave de partición tiene por objeto asegurar un excelente rendimiento de consultas y búsquedas. Para asegurarse de que la aplicación se escala correctamente, incluso con Azure Storage, es recomendable que no cree una partición muy activa almacenando toda la información en una partición y realizando consultas en ella.

Entonces, ¿PartitionKey y RowKey siguen siendo necesarios con la API para Table?

Sí. Dado que el área expuesta de la API para Table es similar a la del SDK de Azure Table Storage, la clave de partición supone una forma excelente de distribuir los datos. La clave de fila es única en esa partición. La clave de fila tiene que estar presente y no puede ser nula como en el SDK estándar. La longitud de RowKey es 255 bytes y la de PartitionKey es 1 KB.

¿Cuáles son los mensajes de error de la API para Table?

Azure Table Storage y Azure Cosmos DB for Table usan el mismo SDK, por lo que la mayoría de los errores son los mismos.

¿Por qué tengo limitaciones al tratar de crear muchas tablas seguidas en la API para Table?

Azure Cosmos DB es un sistema basado en Acuerdos de Nivel de Servicio que ofrece garantías de latencia, rendimiento, disponibilidad y coherencia. Puesto que es un sistema aprovisionado, reserva recursos para garantizar estos requisitos. Se detecta y limita la frecuencia rápida de creación de tablas. Se recomienda que examine la tasa de creación de tablas y la reduzca a menos de cinco por minuto. Recuerde que la API para Table es un sistema aprovisionado. Se empieza a pagar por él desde el momento en que se aprovisiona.

¿Cómo se pueden hacer comentarios sobre el SDK o los errores?

Puede proporcionar comentarios de alguna de las siguientes formas: