Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
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 partitioner för tabellen över 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 kör det här kommandot, omvandlar Azure Cosmos DB for PostgreSQL tabeller i sådana scheman osynligt till en enda samlokaliserad shardtabell som smidigt kan flyttas som en enhet mellan klustrets noder.
Anteckning
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 distribuerade campaigns
av company_id
, innehåller fragment kampanjer, där kampanjer för olika företag tilldelas till olika fragment.
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 | Där den körs |
---|---|
bara en shardnyckel | på arbetsnoden som innehåller dess shard |
flera datafördelningsnycklar | parallelliserad över flera noder |
Valet av shardnyckel avgör prestanda och skalbarhet för dina program.
- Ojämn datadistribution per shard-nycklar (även kallat datasnedvridning) är inte optimalt 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 hundratal till tusental.
- Det kan ta lång tid att koppla ihop två stora tabeller med olika shardnycklar. Välj en gemensam shardnyckel över 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.
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_id
kan 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.