Domande frequenti su Azure Cosmos DB for Table

SI APPLICA A: Tabella

Confronto tra Azure Cosmos DB for Table e Azure Table Storage

Quali sono le differenze tra il comportamento dell'API Table e quello di Azure Table Storage?

Esistono alcune differenze a livello di comportamento che gli utenti di archiviazione tabelle di Azure che vogliono creare tabelle con Azure Cosmos DB for Table devono tenere in considerazione:

  • Azure Cosmos DB for Table usa un modello di capacità riservata per assicurare prestazioni garantite, ma ciò comporta il pagamento della capacità non appena viene creata la tabella, anche se la capacità non viene usata. Archiviazione tabelle di Azure prevede solo il pagamento della capacità effettivamente usata. Questo è il motivo per cui l'API per Table può offrire un contratto di servizio con 10 ms di lettura e 15 ms di scrittura al 99° percentile, mentre Azure Table Storage offre un contratto di servizio con 10 secondi. Con l'API per Table, tuttavia, sono previsti costi anche per le tabelle vuote senza richieste, in modo da assicurare che sia disponibile la capacità per la gestione di eventuali richieste in base al contratto di servizio offerto da Azure Cosmos DB.

  • I risultati delle query restituiti dall'API per Table non vengono ordinati in base a chiave di partizione/chiave di riga, come avviene in Azure Table Storage.

  • Le chiavi di riga possono avere una dimensione massima di 255 byte.

  • I batch possono avere una dimensione massima di 2 MB.

  • CORS non è attualmente supportato.

  • I nomi di tabella in Azure Table Storage non rispettano la distinzione tra maiuscole e minuscole, come invece avviene in Azure Cosmos DB for Table.

  • Alcuni dei formati interni di Azure Cosmos DB per le informazioni di codifica, ad esempio i campi binari, non offrono attualmente l'efficienza auspicabile. Di conseguenza questo può causare limitazioni impreviste per le dimensioni dei dati. Ad esempio, attualmente non è possibile usare l'intero MB di un'entità tabella per archiviare i dati binari, perché la codifica incrementa le dimensioni dei dati.

  • Azure Cosmos DB riserva i nomi di proprietà dell'entità ID, rid, etag e ResourceId e pertanto non sono attualmente supportati.

  • TableQuery TakeCount non è limitato a 1000.

  • In termini di API REST, Azure Table Storage (ma non Azure Cosmos DB for Table) supporta le opzioni di query/endpoint seguenti:

    Metodi Rest Opzione relativa a endpoint/query REST URL della documentazione Spiegazione Supportato in Table Storage Supportato nell'API per Table
    GET, PUT /?Restype=service@comp=properties Set Table Service Properties (Operazione Set Table Service Properties) Get Table Service Properties (Operazione Get Table Service Properties) Questo endpoint viene usato per configurare le regole CORS, la configurazione di analisi di archiviazione e le impostazioni di registrazione. CORS non è attualmente supportato e l'analisi e la registrazione vengono gestite in modo diverso in Azure Cosmos DB rispetto ad archiviazione tabelle di Azure. No
    OPTIONS /<table-resource-name> Richiesta tabella preliminare Questa è una parte di CORS che non è attualmente supportata da Azure Cosmos DB. No
    GET /?Restype=service@comp=stats Get Table Service Stats (Operazione Get Table Service Stats) Fornisce informazioni sulla velocità con cui i dati vengono replicati tra il server primario e i server secondari. Non è necessario in Azure Cosmos DB perché la replica fa parte delle operazioni di scrittura. No
    GET, PUT /mytable?comp=acl Get Table ACL (Operazione Get Table ACL) e Set Table ACL (Operazione Set Table ACL) Ottiene e configura i criteri di accesso archiviati usati per gestire le firme di accesso condiviso. No
  • Azure Cosmos DB for Table supporta solo il formato JSON, non ATOM.

  • Per .NET SDK in particolare, alcune classi e alcuni metodi non sono attualmente supportati da Azure Cosmos DB.

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

Altre domande frequenti

È necessario un nuovo SDK per usare l'API Table?

No, gli SDK di archiviazione esistenti dovrebbero funzionare ancora. È tuttavia consigliabile ottenere sempre gli SDK più recenti per assicurare il supporto migliore e in molti casi prestazioni superiori. Per un elenco dei linguaggi supportati, vedere Introduzione ad Azure Cosmos DB for Table.

Quale stringa di connessione è necessario usare per connettersi all'API Table?

La stringa di connessione è:

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

È possibile ottenere la stringa di connessione nella pagina Stringa di connessione del portale di Azure.

Come si sostituiscono le impostazioni di configurazione per le opzioni relative alle richieste in .NET SDK per l'API Table?

Alcune impostazioni vengono gestite nel metodo CreateCloudTableClient e altre tramite il file app.config nella sezione appSettings dell'applicazione client. Per informazioni sulle impostazioni di configurazione, vedere Funzionalità di Azure Cosmos DB.

Sono stati introdotti cambiamenti per i clienti che usano gli SDK di archiviazione tabelle di Azure?

Nessuno. Non è stato introdotto alcun cambiamento per i clienti nuovi o esistenti che usano gli SDK di archiviazione tabelle di Azure esistenti.

Come si visualizzano i dati di tabella archiviati in Azure Cosmos DB da usare con l'API Table?

Per esplorare i dati si può usare il portale di Azure. È anche possibile usare il codice dell'API Table o gli strumenti illustrati nella risposta successiva.

Quali strumenti è possibile usare con l'API Table?

È possibile usare Azure Storage Explorer.

La nuova API Table è supportata dagli strumenti sufficientemente flessibili da accettare una stringa di connessione nel formato specificato in precedenza. Per un elenco degli strumenti di tabella, vedere la pagina Strumenti client di Archiviazione di Azure.

La concorrenza nelle operazioni è controllata?

Sì. La concorrenza ottimistica è supportata tramite l'uso del meccanismo degli ETag.

È supportato il modello di query OData per le entità?

Sì. L'API Table supporta query OData e query LINQ.

È supportata la connessione affiancata tra Azure Table Storage e Azure Cosmos DB for Table?

Sì. È possibile connettersi creando due istanze separate di CloudTableClient, ognuna delle quali punta a un URI specifico tramite la stringa di connessione.

Come si esegue la migrazione di un'applicazione di archiviazione tabelle di Azure esistente a questa offerta?

AzCopy è supportata.

Come si espandono le dimensioni di archiviazione per questo servizio, se ad esempio 'n' GB di dati iniziali crescono nel tempo fino a 1 TB?

Azure Cosmos DB è progettato per offrire spazio di archiviazione illimitato tramite scalabilità orizzontale. Il servizio può monitorare e aumentare efficacemente lo spazio di archiviazione.

Come si monitora l'offerta dell'API Table?

È possibile usare il riquadro Metriche dell'API Table per monitorare le richieste e l'utilizzo dello spazio di archiviazione.

Come si calcola la velocità effettiva necessaria?

È possibile usare lo strumento di stima della capacità per calcolare il valore di TableThroughput necessario per le operazioni. Per altre informazioni, vedere Estimate Request Units and Data Storage (Stimare le unità richiesta e l'archiviazione dei dati). In generale, è possibile rappresentare un'entità in formato JSON e specificare i numeri relativi alle operazioni.

È possibile usare l'SDK dell'API Table in locale con l'emulatore?

Non al momento.

È possibile usare un'applicazione esistente per l'API Table?

Sì, è supportata la stessa API.

È necessario eseguire la migrazione delle applicazioni di Azure Table Storage esistenti all'SDK se non si vogliono usare le funzionalità dell'API per Table?

No. È possibile creare e usare asset di archiviazione tabelle di Azure esistenti senza interruzioni di alcun tipo. Se non si usa l'API per Table, tuttavia, non è possibile usufruire dell'indicizzazione automatica, dell'opzione di coerenza aggiuntiva o della distribuzione globale.

Come si aggiunge la replica dei dati nell'API per Table in più aree di Azure?

È possibile usare le impostazioni di replica globale del portale di Azure Cosmos DB per aggiungere le aree idonee per l'applicazione. Per sviluppare un'applicazione distribuita a livello globale, è consigliabile anche aggiungere l'applicazione con il valore di PreferredLocation impostato sull'area locale, per garantire una bassa latenza di lettura.

Come si modifica l'area di scrittura primaria per l'account nell'API per Table?

È possibile usare il riquadro del portale relativo alla replica globale di Azure Cosmos DB per aggiungere un'area e quindi effettuare il failover nell'area necessaria. Per istruzioni, vedere l'articolo relativo allo sviluppo con account Azure Cosmos DB tra più aree.

Come si configurano le aree di lettura preferite per una bassa latenza quando si distribuiscono i dati?

Per facilitare la lettura dalla località locale, usare la chiave PreferredLocation nel file app.config. Per le applicazioni esistenti, l'API per Table genera un errore in caso di impostazione di LocationMode. Rimuovere tale codice, poiché l'API per Table acquisisce queste informazioni dal file app.config.

Come funzionano i livelli di coerenza nell'API per Table?

Azure Cosmos DB offre compromessi ben ponderati tra coerenza, disponibilità e latenza. Azure Cosmos DB offre cinque livelli di coerenza per gli sviluppatori che usano l'API per Table, consentendo così di scegliere il modello di coerenza appropriato a livello di tabella ed effettuare singole richieste durante l'esecuzione di query sui dati. Quando un client si connette, può specificare un livello di coerenza. È possibile modificare il livello tramite l'argomento consistencyLevel di CreateCloudTableClient.

L'API per Table offre letture a bassa latenza con la "lettura delle proprie scritture", con la coerenza con obsolescenza associata come impostazione predefinita. Per altre informazioni, vedere l'articolo relativo ai livelli di coerenza.

Per impostazione predefinita, l'archivio tabelle di Azure offre coerenza assoluta all'interno di un'area e coerenza finale nelle località secondarie.

Azure Cosmos DB for Table offre più livelli di coerenza rispetto ad Azure Table Storage?

Sì. Per informazioni su come trarre vantaggio dalla natura distribuita di Azure Cosmos DB, vedere l'articolo relativo ai livelli di coerenza. Grazie alle garanzie associate ai livelli di coerenza, possono essere usati in tutta sicurezza.

Quando è abilitata la distribuzione globale, quanto tempo è necessario per replicare i dati?

Azure Cosmos DB esegue il commit permanente dei dati nell'area locale e ne effettua immediatamente il push in altre aree, nell'arco di millisecondi. Questa replica dipende solo dal tempo di round trip del data center. Per altre informazioni sulla funzionalità di distribuzione globale di Azure Cosmos DB, vedere l'articolo relativo ad Azure Cosmos DB come servizio di database distribuito a livello globale in Azure.

È possibile modificare il livello di coerenza delle richieste di lettura?

Con Azure Cosmos DB, è possibile impostare il livello di coerenza a livello di contenitore (nella tabella). Usando .NET SDK, si può modificare il livello specificando il valore della chiave TableConsistencyLevel nel file app.config. I valori possibili sono: Strong, Bounded Staleness, Session, Consistent Prefix ed Eventual. Per altre informazioni, vedere Livelli di coerenza dei dati ottimizzabili in Azure Cosmos DB. Il concetto chiave è che non è possibile impostare un livello di coerenza delle richieste superiore rispetto all'impostazione della tabella. Ad esempio, non è possibile impostare il livello di coerenza Eventual per la tabella e il livello di coerenza Strong per le richieste.

Come viene gestito il failover dall'API per Table se un'area diventa inattiva?

L'API per Table sfrutta i vantaggi della piattaforma distribuita a livello globale di Azure Cosmos DB. Affinché l'applicazione possa tollerare i tempi di inattività del data center, abilitare almeno un'altra area per l'account nel portale di Azure Cosmos DB, come illustrato nell'articolo relativo allo sviluppo con account Azure Cosmos DB tra più aree. Si può impostare la priorità dell'area usando il portale. Vedere l'articolo relativo allo sviluppo con account Azure Cosmos DB tra più aree.

È possibile aggiungere il numero di aree desiderato per l'account e controllare in quale potrà essere effettuato il failover specificando una priorità di failover. Per usare il database, è necessario includere anche un'applicazione. Nel corso di questa operazione, i clienti non riscontrano tempi di inattività. A differenza degli altri SDK, l'SDK client .NET più recente supporta l'homing automatico. ovvero può rilevare l'area inattiva ed effettuare automaticamente il failover nella nuova area.

L'API per Table è abilitata per il backup?

Sì, l'API per Table sfrutta i vantaggi della piattaforma di Azure Cosmos DB per i backup. I backup vengono eseguiti automaticamente. Per altre informazioni, vedere Backup online automatico e ripristino con Azure Cosmos DB.

L'API per Table indicizza tutti gli attributi di un'entità per impostazione predefinita?

Sì. Per impostazione predefinita vengono indicizzati tutti gli attributi di un'entità. Per altre informazioni, vedere l'articolo relativo ai criteri di indicizzazione di Azure Cosmos DB.

Questo significa che non è necessario creare più di un indice per soddisfare le query?

Sì. Azure Cosmos DB for Table offre l'indicizzazione automatica di tutti gli attributi senza definizione di schema. Questa automazione consente agli sviluppatori di concentrarsi sull'applicazione anziché sulla creazione e sulla gestione degli indici. Per altre informazioni, vedere l'articolo relativo ai criteri di indicizzazione di Azure Cosmos DB.

È possibile modificare i criteri di indicizzazione?

Sì. È possibile modificare i criteri di indicizzazione specificando la definizione di indice. È necessario eseguire correttamente la codifica e l'escape delle impostazioni.

È possibile configurare i criteri di indicizzazione solo nel portale in Esplora dati. Passare alla tabella specifica da modificare, quindi selezionare Scala e impostazioni->Criteri di indicizzazione, apportare le modifiche desiderate e quindi scegliere Salva.

Come piattaforma, Azure Cosmos DB offre numerose funzionalità, come l'ordinamento, le aggregazioni, la gerarchia e così via. Queste funzionalità verranno aggiunte all'API per Table?

L'API per Table offre le stesse funzionalità di query dell'archiviazione tabelle di Azure. Azure Cosmos DB supporta anche l'ordinamento, le aggregazioni, le query geospaziali, la gerarchia e un'ampia gamma di funzioni predefinite. Per altre informazioni, vedere Query SQL.

Quando è consigliabile modificare TableThroughput per l'API per Table?

È consigliabile modificare TableThroughput quando si verifica una delle condizioni seguenti:

  • Si esegue un'operazione di estrazione, trasformazione e caricamento (ETL) di dati o si vuole caricare una grande quantità di dati in breve tempo.
  • È necessaria maggiore velocità effettiva del contenitore o di un set di contenitori nel back-end. Ad esempio, si rileva che la velocità effettiva usata è superiore alla velocità effettiva di cui è stato effettuato il provisioning e viene applicata la limitazione. Per altre informazioni, vedere Impostare la velocità effettiva per i contenitori di Azure Cosmos DB.

È possibile aumentare o ridurre la velocità effettiva di una tabella dell'API per Table?

Sì, è possibile usare il riquadro relativo alla scalabilità del portale di Azure Cosmos DB per ridimensionare la velocità effettiva. Per altre informazioni, vedere l'articolo su come impostare la velocità effettiva.

Per le tabelle appena sottoposte a provisioning viene impostato un valore predefinito di TableThroughput?

Sì. Se non si sostituisce il valore di TableThroughput in app.config e non si usa un contenitore già creato in Azure Cosmos DB, il servizio crea una tabella con velocità effettiva di 400.

I prezzi per i clienti esistenti del servizio archiviazione tabelle di Azure sono cambiati?

Nessuno. Il prezzo per i clienti esistenti di Archiviazione tabelle di Azure non è cambiato.

Come viene calcolato il prezzo per l'API per Table?

Il prezzo dipende dal valore di TableThroughput allocato.

Come si gestisce l'eventuale limitazione della frequenza nelle tabelle dell'offerta dell'API per Table?

Se la frequenza delle richieste supera la capacità della velocità effettiva di cui è stato effettuato il provisioning per il contenitore sottostante o un set di contenitori, verrà restituito un errore e l'SDK ripeterà la chiamata applicando i criteri di ripetizione dei tentativi.

Perché è necessario scegliere una velocità effettiva oltre alla chiave di partizione e alla chiave di riga per sfruttare i vantaggi dell'offerta API per Table di Azure Cosmos DB?

Azure Cosmos DB imposta una velocità effettiva predefinita per il contenitore, se non se ne specifica una nel file app.config o tramite il portale.

Azure Cosmos DB offre garanzie di prestazioni e latenza, con limiti superiori nelle operazioni. Questa garanzia è possibile quando il motore può applicare la governance nelle operazioni del tenant. L'impostazione di TableThroughput assicura la velocità effettiva e la latenza garantite, perché la piattaforma riserva tale capacità e garantisce l'esito positivo delle operazioni.

È possibile usare la specifica della velocità effettiva modificandola in modo elastico per trarre vantaggio dalla stagionalità dell'applicazione, soddisfare le esigenze in termini di velocità effettiva e ridurre i costi.

Archiviazione tabelle di Azure è una soluzione economica se si eseguono raramente query, perché si paga solo per l'archiviazione dei dati. Con l'offerta di Azure Cosmos DB for Table sembra che vengano effettuati addebiti anche se non si esegue alcuna transazione o non si archiviano dati. Per quale motivo?

Azure Cosmos DB è progettato come un sistema basato su contratti di servizio distribuito a livello globale con garanzie di disponibilità, latenza e velocità effettiva. La velocità effettiva riservata in Azure Cosmos DB è garantita, a differenza della velocità effettiva di altri sistemi. Azure Cosmos DB offre funzionalità aggiuntive che sono state richieste dai clienti, come gli indici secondari e la distribuzione globale.

Quando si inseriscono dati nell'archiviazione tabelle di Azure, non viene mai visualizzata una notifica di raggiungimento della quota che indica che la partizione è piena. Con l'API per Table viene visualizzato questo messaggio. Questa offerta impone limitazioni e la modifica dell'applicazione esistente?

Azure Cosmos DB è un sistema basato su contratti di servizio che offre scalabilità illimitata, con garanzie di latenza, velocità effettiva, disponibilità e coerenza. Per assicurarsi le prestazioni Premium garantite, verificare che l'indice e le dimensioni dei dati siano gestibili e scalabili. Il limite di 20 GB per il numero di entità o elementi per chiave di partizione ha lo scopo di assicurare prestazioni di ricerca e di query elevate. Per garantire la scalabilità dell'applicazione anche per Archiviazione di Azure, è consigliabile non creare una partizione critica archiviando tutte le informazioni in una partizione ed eseguendo query su di essa.

La chiave di partizione e la chiave di riga sono ancora necessarie con l'API per Table?

Sì. Dato che la superficie di attacco dell'API per Table è simile a quella di Azure Table Storage SDK, la chiave di partizione offre un modo efficiente per distribuire i dati. La chiave di riga è univoca all'interno della partizione. La chiave di riga deve essere presente e non può essere Null come nell'SDK standard. La chiave di riga è lunga 255 byte, mentre la chiave di partizione ha una lunghezza di 1 KB.

Quali sono i messaggi di errore per l'API per Table?

Azure Table Storage e Azure Cosmos DB for Table usano gli stessi SDK, quindi la maggior parte degli errori sarà uguale.

Perché quando si prova a creare numerose tabelle una dopo l'altra nell'API per Table viene applicata la limitazione?

Azure Cosmos DB è un sistema basato su contratti di servizio che offre garanzie di latenza, velocità effettiva, disponibilità e coerenza. Dato che è un sistema con provisioning, riserva risorse per garantire tali requisiti. La rapida frequenza di creazione delle tabelle viene rilevata e limitata. È consigliabile esaminare la frequenza di creazione di tabelle e ridurla a meno di 5 al minuto. Tenere presente che l'API per Table è un sistema con provisioning. Il relativo pagamento ha inizio nel momento in cui ne viene effettuato il provisioning.

Come si forniscono commenti e suggerimenti sull'SDK o sui bug?

È possibile condividere commenti e suggerimenti in uno dei modi seguenti: