Grundläggande begrepp för skalning i Azure Cosmos DB for PostgreSQL

GÄLLER FÖR: Azure Cosmos DB for PostgreSQL (drivs av Citus-databastillägget till PostgreSQL)

Innan vi undersöker stegen för att skapa en ny app är det bra att se en snabb översikt över de termer och begrepp som ingår.

Arkitekturöversikt

Med Azure Cosmos DB for PostgreSQL kan du distribuera tabeller och/eller scheman över flera datorer i ett kluster och transparent fråga dem på samma sätt som du frågar vanlig PostgreSQL:

Diagram of the coordinator node sharding a table onto worker nodes.

I Azure Cosmos DB for PostgreSQL-arkitekturen finns det flera typer av noder:

  • Koordinatornoden lagrar distribuerade tabellmetadata och ansvarar för distribuerad planering.
  • Däremot lagrar arbetsnoderna faktiska data, metadata och gör beräkningen.
  • Både koordinatorn och arbetarna är vanliga PostgreSQL-databaser med citus tillägget inläst.

Om du vill distribuera en normal PostgreSQL-tabell, som campaigns i diagrammet ovan, kör du ett kommando med namnet create_distributed_table(). När du kör det här kommandot skapar Azure Cosmos DB for PostgreSQL transparent shards för tabellen mellan arbetsnoder. I diagrammet representeras shards som blå rutor.

Om du vill distribuera ett normalt PostgreSQL-schema kör citus_schema_distribute() du kommandot . När du har kört det här kommandot omvandlar Azure Cosmos DB for PostgreSQL tabeller i sådana scheman till en enda samlokaliserad shardtabell som kan flyttas som en enhet mellan noder i klustret.

Kommentar

I ett kluster utan arbetsnoder finns fragment av distribuerade tabeller på koordinatornoden.

Shards är enkla (men särskilt namngivna) PostgreSQL-tabeller som innehåller segment av dina data. I vårt exempel, eftersom vi distribueras campaigns av company_id, innehåller shards kampanjer, där kampanjer för olika företag tilldelas till olika shards.

Distributionskolumn (kallas även shardnyckel)

create_distributed_table() är den magiska funktion som Azure Cosmos DB for PostgreSQL tillhandahåller för att distribuera tabeller och använda resurser på flera datorer.

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

Det andra argumentet ovan väljer en kolumn från tabellen som en distributionskolumn. Det kan vara vilken kolumn som helst med en inbyggd PostgreSQL-typ (med heltal och text som är vanligast). Värdet för distributionskolumnen avgör vilka rader som hamnar i vilka shards, vilket är anledningen till att distributionskolumnen även kallas shardnyckeln.

Azure Cosmos DB for PostgreSQL bestämmer hur frågor ska köras baserat på deras användning av shardnyckeln:

Frågan omfattar Var den körs
bara en shardnyckel på arbetsnoden som innehåller dess shard
flera shardnycklar parallelliserade över flera noder

Valet av shardnyckel avgör prestanda och skalbarhet för dina program.

  • Ojämn datadistribution per shardnycklar (även kallat datasnedvridning) är inte optimal för prestanda. Välj till exempel inte en kolumn som ett enda värde representerar 50 % av data för.
  • Shardnycklar med låg kardinalitet kan påverka skalbarheten. Du kan bara använda så många shards som det finns distinkta nyckelvärden. Välj en nyckel med kardinalitet i hundratusentals.
  • Det kan ta lång tid att koppla ihop två stora tabeller med olika shardnycklar. Välj en gemensam shardnyckel i stora tabeller. Läs mer i samlokalisering.

Samlokalisering

Ett annat begrepp som är nära relaterat till shardnyckeln är samlokalisering. Tabeller som är fragmenterade med samma distributionskolumnvärden samallokeras – fragmenten i samlokaliserade tabeller lagras tillsammans på samma arbetare.

Nedan visas två tabeller som är fragmenterade med samma nyckel, site_id. De är samlokaliserade.

Diagram of tables http_request and http_request_1min colocated by site_id.

Azure Cosmos DB for PostgreSQL säkerställer att rader med ett matchande site_id värde i båda tabellerna lagras på samma arbetsnod. Du kan se att för båda tabellerna lagras rader med site_id=1 på arbets 1. På samma sätt för andra webbplats-ID:er.

Samlokalisering hjälper till att optimera JOIN i dessa tabeller. Om du ansluter till de två tabellerna i site_idkan Azure Cosmos DB for PostgreSQL utföra kopplingen lokalt på arbetsnoder utan att blanda data mellan noder.

Tabeller i ett distribuerat schema är alltid samlokaliserade med varandra.

Nästa steg