Cosmos DB Overview fra Update Conference
Cosmos DB sammendrag fra Update Conference 2021
Cosmos DB er en NoSql implementasjon av Microsoft. Man kjører det vanligvis i Azure, men man kan også kjøre en CosmosDB emulator på sin egen maskin eller i et datacenter. Det finnes bl.a. et docker bilde.
Det finnes to typer partisjoneringer: Physical partitions, logical partitions.
Physical er den faktisk databaseservere, logical er kontainere som er inndelt innad i en "fysisk" server.
Strukturen er ca. slik
flowchart TD; Leader[(Leader)] Follower1[(Follower)] Follower2[(Follower)] Follower3[(Follower)] Leader-->Follower1 Leader-->Follower2 Leader-->Follower3
Cosmos tilbyr også en rekke forskjellige protokoller for å snakke med databasen: Cassandra, Mongo, SQL, Gremlin og Table. SQL er den som er maintainet av Microsoft og er derfor den som får den siste funksjonaliteten først.
Cosmos DB tilbyr 3 moduser
Gateway Mode
graph LR; Client1(Klient) Client2(Klient) Database1[(DB)] Database2[(DB)] Database3[(DB)] Gateway((Gateway)) Client1--Mongo API over HTTPS-->Gateway Client2--SQL API over HTTPS-->Gateway Gateway--TCP-->Database1 Gateway--TCP-->Database2 Gateway--TCP-->Database3
Denne legger selve database koplingen bak en brannmur og manager hvilke partisjoner man vil snakke med osv. Enklest å bruke.
Direct Mode
graph LR; Client1(Klient) Client2(Klient) Database1[(DB)] Database2[(DB)] Database3[(DB)] Client1--TCP-->Database1 Client1--TCP-->Database2 Client2--TCP-->Database2 Client2--TCP-->Database3 Client1--TCP-->Database3
Om man ønske mer kontroll og enda raskere kommunikasjon (et mindre hopp å gjøre).
Direct Gateway
Kom nylig, for noen uker siden. Ser likt ut som gateway mode men er dyrere og skal visstnok gi noen ekstra feature som f.eks. muligheten til å cache resultater i gatewayen.
Partition Key er det som bestemmer hvilken container hvert objekt skal i. Hver kontainer er en "bucket" med en hash, så jo flere ting man har i hver kontainer, jo lengre tid vil det ta å finne dem, da man da må loope gjennom alle objektene som er i kontaineren.