Vanliga frågor och svar om Azure Cosmos DB for Table

GÄLLER FÖR: Tabell

Jämföra Azure Cosmos DB för Table och Azure Table Storage

Var är API för tabell inte identiskt med Azure Table Storage-beteende?

Det finns vissa beteendeskillnader som användare som kommer från Azure Table Storage som vill skapa tabeller med Azure Cosmos DB for Table bör vara medvetna om:

  • Azure Cosmos DB for Table använder en modell för reserverad kapacitet för att säkerställa garanterad prestanda, men det innebär att man betalar för kapaciteten så snart tabellen har skapats, även om kapaciteten inte används. Med Azure Table Storage betalar man bara för kapacitet som används. Detta hjälper till att förklara varför API för tabell kan erbjuda ett serviceavtal på 10 ms läsning och 15 ms skrivning i den 99:e percentilen medan Azure Table Storage erbjuder ett serviceavtal på 10 sekunder. Men med API för tabelltabeller, även tomma tabeller utan begäranden, kostar det pengar för att säkerställa att kapaciteten är tillgänglig för att hantera alla begäranden till dem i det serviceavtal som erbjuds av Azure Cosmos DB.

  • Frågeresultat som returneras av API:et för tabell sorteras inte i partitionsnyckel/radnyckelordning som de är i Azure Table Storage.

  • Radnycklar kan bara vara upp till 255 byte.

  • Batchar kan bara ha upp till 2 MB.

  • CORS stöds inte för närvarande.

  • Tabellnamn i Azure Table Storage är inte skiftlägeskänsliga, men de finns i Azure Cosmos DB för Table.

  • Vissa av Azure Cosmos DB:s interna format för kodningsinformation, till exempel binära fält, är för närvarande inte så effektiva som man kanske vill. Detta kan därför orsaka oväntade begränsningar i datastorleken. För närvarande kunde man till exempel inte använda hela en meg för en tabellentitet för att lagra binära data eftersom kodningen ökar datastorleken.

  • Azure Cosmos DB reserverar entitetsegenskapsnamnen ID, rid, etagoch ResourceId de stöds för närvarande inte.

  • TableQuery TakeCount är inte begränsat till 1 000.

  • När det gäller REST-API:et stöder Azure Table Storage (men inte Azure Cosmos DB for Table) följande slutpunkter/frågealternativ:

    Vilometoder Rest Endpoint/Query-alternativ Doc-URL:er Förklaring Stöds i Table Storage Stöds i API för tabell
    GET, PUT /?Restype=service@comp=properties Ange egenskaper för tabelltjänsten och hämta egenskaper för tabelltjänsten Den här slutpunkten används för att ange CORS-regler, konfiguration av lagringsanalys och loggningsinställningar. CORS stöds för närvarande inte och analys och loggning hanteras annorlunda i Azure Cosmos DB än Azure Storage-tabeller Ja Nej
    OPTIONS /<table-resource-name> Preflight CORS-tabellbegäran Detta är en del av CORS som Azure Cosmos DB för närvarande inte stöder. Ja Nej
    GET /?Restype=service@comp=stats Hämta tabelltjänststatistik Innehåller information om hur snabbt data replikeras mellan primära och sekundärfiler. Detta behövs inte i Azure Cosmos DB eftersom replikeringen är en del av skrivningar. Ja Nej
    GET, PUT /mytable?comp=acl Hämta tabell-ACL och ange tabell-ACL Detta hämtar och anger de lagrade åtkomstprinciper som används för att hantera signaturer för delad åtkomst (SAS). Ja Nej
  • Azure Cosmos DB for Table stöder endast JSON-formatet, inte ATOM.

  • I synnerhet för .NET SDK finns det vissa klasser och metoder som Azure Cosmos DB för närvarande inte stöder.

    • CloudTableClient-klass
      • \ServiceProperties
      • \ServiceStats
    • CloudTable-klass
      • SetPermissions
      • GetPermissions

Andra vanliga frågor och svar

Behöver jag en ny SDK för att använda API:et för tabell?

Nej, befintliga lagrings-SDK:er bör fortfarande fungera. Vi rekommenderar dock att man alltid får de senaste SDK:erna för bästa stöd och i många fall överlägsen prestanda. Se listan över tillgängliga språk i Introduktion till Azure Cosmos DB för tabell.

Vilka är de anslutningssträng som jag behöver använda för att ansluta till API:et för tabell?

Anslutningssträng är:

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

Du kan hämta anslutningssträng från sidan Anslut ion String i Azure-portalen.

Hur gör jag för att åsidosätta konfigurationsinställningarna för begärandealternativen i .NET SDK för API:et för tabell?

Vissa inställningar hanteras med metoden CreateCloudTableClient och andra via avsnittet app.config i appen Inställningar i klientprogrammet. Information om konfigurationsinställningar finns i Azure Cosmos DB-funktioner.

Finns det några ändringar för kunder som använder befintliga Azure Table Storage SDK:er?

Inga. Det finns inga ändringar för befintliga eller nya kunder som använder befintliga SDK:er för Azure Table Storage.

Hur gör jag för att visa tabelldata som lagras i Azure Cosmos DB för användning med API:et för tabell?

Du kan använda Azure-portalen för att bläddra bland data. Du kan också använda API:et för tabellkod eller verktygen som nämns i nästa svar.

Vilka verktyg fungerar med API:et för tabell?

Du kan använda Azure Storage Explorer.

Verktyg med flexibiliteten att ta en anslutningssträng i det format som angavs tidigare kan stödja det nya API:et för tabell. En lista över tabellverktyg finns på sidan Azure Storage-klientverktyg .

Styrs samtidigheten för åtgärder?

Ja, optimistisk samtidighet tillhandahålls via användningen av ETag-mekanismen.

Stöds OData-frågemodellen för entiteter?

Ja, API:et för tabell stöder OData-fråga och LINQ-fråga.

Kan jag ansluta till Azure Table Storage och Azure Cosmos DB för tabell sida vid sida i samma program?

Ja, du kan ansluta genom att skapa två separata instanser av CloudTableClient, var och en pekar på sin egen URI via anslutningssträng.

Hur gör jag för att migrera ett befintligt Azure Table Storage-program till det här erbjudandet?

AzCopy stöds.

Hur utökas lagringsstorleken för den här tjänsten om jag till exempel börjar med "n" GB data och mina data växer till 1 TB över tid?

Azure Cosmos DB är utformat för att tillhandahålla obegränsad lagring med hjälp av horisontell skalning. Tjänsten kan övervaka och effektivt öka din lagring.

Hur gör jag för att övervaka API:et för tabellerbjudandet?

Du kan använda fönstret API för tabellmått för att övervaka begäranden och lagringsanvändning.

Hur gör jag för att beräkna det dataflöde jag behöver?

Du kan använda kapacitetsberäknaren för att beräkna det TableThroughput som krävs för åtgärderna. Mer information finns i Beräkna enheter för begäranden och datalagring. I allmänhet kan du visa entiteten som JSON och ange numren för dina åtgärder.

Kan jag använda API:et för Table SDK lokalt med emulatorn?

Nej, inte just nu.

Kan mitt befintliga program fungera med API:et för table?

Ja, samma API stöds.

Behöver jag migrera mina befintliga Azure Table Storage-program till SDK om jag inte vill använda API:et för tabellfunktioner?

Nej, du kan skapa och använda befintliga Azure Table Storage-tillgångar utan avbrott av något slag. Men om du inte använder API:et för tabell kan du inte dra nytta av det automatiska indexet, det extra konsekvensalternativet eller den globala distributionen.

Hur gör jag för att lägga till replikering av data i API:et för tabell i mer än en region i Azure?

Du kan använda Azure Cosmos DB-portalens globala replikeringsinställningar för att lägga till regioner som är lämpliga för ditt program. Om du vill utveckla ett globalt distribuerat program bör du också lägga till ditt program med preferredLocation-informationen inställd på den lokala regionen för att ge låg läsfördröjning.

Hur gör jag för att ändra den primära skrivregionen för kontot i API:et för tabell?

Du kan använda fönstret för den globala replikeringsportalen i Azure Cosmos DB för att lägga till en region och sedan redundansväxla till den region som krävs. Anvisningar finns i Utveckla med Azure Cosmos DB-konton i flera regioner.

Hur gör jag för att konfigurera mina önskade läsregioner för låg svarstid när jag distribuerar mina data?

Om du vill läsa från den lokala platsen använder du preferredLocation-nyckeln i filen app.config. För befintliga program utlöser API:et för tabell ett fel om LocationMode har angetts. Ta bort koden eftersom API:et för tabell hämtar den här informationen från filen app.config.

Hur ska jag tänka på konsekvensnivåer i API:et för tabell?

Azure Cosmos DB ger väl motiverade kompromisser mellan konsekvens, tillgänglighet och svarstid. Azure Cosmos DB erbjuder fem konsekvensnivåer till API för tabellutvecklare, så du kan välja rätt konsekvensmodell på tabellnivå och göra enskilda begäranden när du frågar efter data. När en klient ansluter kan den ange en konsekvensnivå. Du kan ändra nivån via argumentet consistencyLevel i CreateCloudTableClient.

API:et för tabell innehåller läsningar med låg latens med "Läs dina egna skrivningar", med konsekvensen Bounded-staleness som standard. Mer information finns i Konsekvensnivåer.

Som standard ger Azure Table Storage stark konsekvens i en region och slutlig konsekvens på de sekundära platserna.

Erbjuder Azure Cosmos DB for Table fler konsekvensnivåer än Azure Table Storage?

Ja, information om hur du drar nytta av den distribuerade karaktären hos Azure Cosmos DB finns i Konsekvensnivåer. Eftersom det finns garantier för konsekvensnivåerna kan du använda dem med tillförsikt.

Hur lång tid tar det att replikera data när global distribution är aktiverad?

Azure Cosmos DB checkar in data durably i den lokala regionen och skickar data till andra regioner omedelbart inom några millisekunder. Den här replikeringen är endast beroende av datacentrets resvägstid (RTT). Mer information om den globala distributionsfunktionen i Azure Cosmos DB finns i Azure Cosmos DB: En globalt distribuerad databastjänst i Azure.

Kan konsekvensnivån för läsbegäran ändras?

Med Azure Cosmos DB kan du ange konsekvensnivån på containernivå (i tabellen). Genom att använda .NET SDK kan du ändra nivån genom att ange värdet för TableConsistencyLevel-nyckeln i filen app.config. Möjliga värden är: Stark, Begränsad inaktuellhet, Session, Konsekvent prefix och Slutlig. Mer information finns i Tunable datakonsekvensnivåer i Azure Cosmos DB. Huvudidén är att du inte kan ange konsekvensnivån för begäranden till mer än inställningen för tabellen. Du kan till exempel inte ange konsekvensnivån för tabellen på Slutlig och begärandekonsekvensnivå på Stark.

Hur hanterar API:et för tabell redundans om en region slutar fungera?

API:et för tabell använder den globalt distribuerade plattformen i Azure Cosmos DB. För att säkerställa att ditt program kan tolerera datacenteravbrott aktiverar du minst en region till för kontot i Azure Cosmos DB-portalen Utveckla med Azure Cosmos DB-konton i flera regioner. Du kan ange prioriteten för regionen med hjälp av portalen Utveckla med Azure Cosmos DB-konton i flera regioner.

Du kan lägga till så många regioner som du vill för kontot och kontrollera var det kan redundansväxla till genom att ange en redundansprioritet. Om du vill använda databasen måste du också ange ett program där. När du gör det kommer dina kunder inte att uppleva stilleståndstid. Den senaste .NET-klient-SDK :t är automatisk kryptering, men de andra SDK:erna är det inte. Den kan alltså identifiera den region som ligger nere och automatiskt redundansväxla till den nya regionen.

Är API:et för tabell aktiverat för säkerhetskopieringar?

Ja, API:et för tabell använder plattformen i Azure Cosmos DB för säkerhetskopior. Säkerhetskopior görs automatiskt. Mer information finns i Säkerhetskopiering och återställning online med Azure Cosmos DB.

Indexar API:et för tabell alla attribut för en entitet som standard?

Ja, alla attribut för en entitet indexeras som standard. Mer information finns i Azure Cosmos DB: Indexeringsprinciper.

Betyder det att jag inte behöver skapa fler än ett index för att uppfylla frågorna?

Ja, Azure Cosmos DB for Table tillhandahåller automatisk indexering av alla attribut utan någon schemadefinition. Den här automatiseringen gör att utvecklare kan fokusera på programmet i stället för att skapa och hantera index. Mer information finns i Azure Cosmos DB: Indexeringsprinciper.

Kan jag ändra indexeringsprincipen?

Ja, du kan ändra indexeringsprincipen genom att ange indexdefinitionen. Du måste koda korrekt och undvika inställningarna.

Indexeringsprincipen kan bara anges i portalen i Datautforskaren, navigera till den specifika tabell som du vill ändra och sedan gå till skalnings- och Inställningar-indexeringsprincipen>, göra önskad ändring och sedan Spara.

Azure Cosmos DB som plattform verkar ha många funktioner, till exempel sortering, aggregat, hierarki och andra funktioner. Kommer du att lägga till de här funktionerna i API:et för tabellen?

API:et för tabell innehåller samma frågefunktioner som Azure Table Storage. Azure Cosmos DB stöder också sortering, samlingar, geospatiala frågor, hierarki och en mängd inbyggda funktioner. Mer information finns i SQL-frågor.

När ska jag ändra TableThroughput för API:et för tabell?

Du bör ändra TableThroughput när något av följande villkor gäller:

  • Du utför ett extraherings-, transformerings- och inläsningsdata (ETL) eller så vill du ladda upp många data på kort tid.
  • Du behöver mer dataflöde från containern eller från en uppsättning containrar i serverdelen. Du ser till exempel att det använda dataflödet är mer än det etablerade dataflödet och att du blir begränsad. Mer information finns i Ange dataflöde för Azure Cosmos DB-containrar.

Kan jag skala upp eller skala ned dataflödet för mitt API för tabelltabell?

Ja, du kan använda Azure Cosmos DB-portalens skalningsfönster för att skala dataflödet. Mer information finns i Ange dataflöde.

Är ett standardvärde för TableThroughput inställt för nyligen etablerade tabeller?

Ja, om du inte åsidosätter TableThroughput via app.config och inte använder en fördefinierad container i Azure Cosmos DB skapar tjänsten en tabell med dataflödet 400.

Finns det några ändringar i prissättningen för befintliga kunder i Azure Table Storage-tjänsten?

Inga. Det finns ingen ändring i priset för befintliga Azure Table Storage-kunder.

Hur beräknas priset för API:et för tabellen?

Priset beror på det allokerade TableThroughput.

Hur gör jag för att hantera eventuella hastighetsbegränsningar för tabellerna i API för tabellerbjudande?

Om begärandefrekvensen är mer än kapaciteten för det etablerade dataflödet för den underliggande containern eller en uppsättning containrar får du ett fel och SDK:t försöker anropa igen genom att tillämpa återförsöksprincipen.

Varför behöver jag välja ett dataflöde förutom PartitionKey och RowKey för att dra nytta av API:et för tabellerbjudandet i Azure Cosmos DB?

Azure Cosmos DB anger ett standarddataflöde för containern om du inte anger något i filen app.config eller via portalen.

Azure Cosmos DB ger garantier för prestanda och svarstid, med de övre gränserna för åtgärden. Den här garantin är möjlig när motorn kan framtvinga styrning av klientorganisationens åtgärder. Genom att ange TableThroughput får du garanterat dataflöde och svarstid eftersom plattformen reserverar den här kapaciteten och garanterar driftsframgång.

Genom att använda dataflödesspecifikationen kan du elastiskt ändra den för att dra nytta av programmets säsongsvariationer, uppfylla dataflödesbehoven och spara kostnader.

Azure Table Storage har varit billigt för mig, eftersom jag bara betalar för att lagra data, och jag frågar sällan. Azure Cosmos DB for Table-erbjudandet verkar debitera mig även om jag inte har utfört en enda transaktion eller lagrat något. Kan du förklara?

Azure Cosmos DB är utformat för att vara ett globalt distribuerat, SLA-baserat system med garantier för tillgänglighet, svarstid och dataflöde. När du reserverar dataflöde i Azure Cosmos DB garanteras det, till skillnad från dataflödet för andra system. Azure Cosmos DB innehåller fler funktioner som kunder har begärt, till exempel sekundära index och global distribution.

Jag får aldrig ett meddelande om att en kvot är full (som anger att en partition är full) när jag matar in data i Azure Table Storage. Med API:et för Table får jag det här meddelandet. Begränsar det här erbjudandet mig och tvingar mig att ändra mitt befintliga program?

Azure Cosmos DB är ett SLA-baserat system som ger obegränsad skalning, med garantier för svarstid, dataflöde, tillgänglighet och konsekvens. Se till att datastorleken och indexet är hanterbara och skalbara för att säkerställa garanterad premiumprestanda. Gränsen på 20 GB för antalet entiteter eller objekt per partitionsnyckel är att säkerställa att vi ger bra uppslags- och frågeprestanda. För att säkerställa att ditt program skalar bra, även för Azure Storage, rekommenderar vi att du inte skapar en frekvent partition genom att lagra all information i en partition och köra frågor mot den.

Så PartitionKey och RowKey krävs fortfarande med API:et för Table?

Ja. Eftersom ytan i API:et för tabell liknar den i Azure Table Storage SDK ger partitionsnyckeln ett effektivt sätt att distribuera data. Radnyckeln är unik inom partitionen. Radnyckeln måste finnas och kan inte vara null som i standard-SDK:t. Längden på RowKey är 255 byte och längden på PartitionKey är 1 KB.

Vilka är felmeddelandena för API:et för tabell?

Azure Table Storage och Azure Cosmos DB for Table använder samma SDK:er så de flesta felen är desamma.

Varför begränsas jag när jag försöker skapa många tabeller efter varandra i API:et för tabell?

Azure Cosmos DB är ett SLA-baserat system som ger garantier för svarstid, dataflöde, tillgänglighet och konsekvens. Eftersom det är ett etablerat system reserverar det resurser för att garantera dessa krav. Den snabba genereringshastigheten för tabeller identifieras och begränsas. Vi rekommenderar att du tittar på genereringshastigheten för tabeller och sänker den till mindre än 5 per minut. Kom ihåg att API:et för Table är ett etablerat system. Så fort du etablerar det börjar du betala för det.

Hur gör jag för att ge feedback om SDK eller buggar?

Du kan dela din feedback på något av följande sätt: