Send til redaktion@dotnyt.dk hvis du har feedback, gode idéer, konstruktiv kritik eller svinere. Alt har interesse!
Denne gang skal det handle om Cosmos DB og om hvordan man skal organisere sine data i en dokumentdatabase.
Der er mange myter om dokumentdatabaser og jeg har især hørt dem fra personer som kender til relationelle databaser, såsom Microsofts SQL Server.
De fleste udviklere kender til relationelle databaser, normalisering og fremmednøgler og så videre – så hvordan er Cosmos DB anderledes?
For at snakke om hvordan Cosmos DB er anderledes er det nemmest først at tale om hvordan det er det samme. Det er nemlig slet ikke så stor forskel som mange tror.
Cosmos DB kalder det containers og dokumenter, men det er i virkeligheden bare tabeller og rækker. Forskellen er, at fordi det er en dokument-database, er det ikke defineret direkte i ”tabellen” hvilke kolonner der er. Men i bund og grund er det meget det samme som en tabel hvor alle kolonnerne er nullable.
Når man virkelig kommer ind til kernen af det så er der kun 3 virkelig vigtige forskelle mellem Cosmos DB og SQL Server.
Den ene er selvfølgelig at der er ikke relationer i Cosmos DB. Man kan godt indføre fremmednøgler i sine data, men databasen hjælper dig ikke med at slå op på tværs af flere forskellige datatyper.
En af de mest udbredte myter er at så skal man samle flere datatyper i ét stort dokument. Men det er en misforståelse. Det er en optimering man kan gøre brug af, men det er ikke udgangspunktet for hvordan data skal struktureres. Som udgangspunkt er det faktisk bedst at tænke sådan at data skal struktureres næsten ligesom i en relationel database.
Den anden forskel er at i stedet for at man har en databaseserver, så betaler for Request Units per sekund og de er typisk reserveret per time – men det er en længere historie hvordan det helt præcist fungerer så det gemmer jeg til et andet afsnit.
Den tredje forskel er partitionering som er absolut afgørende for at opnå god struktur og god performance. De finere detaljer i hvordan man skal partitionere sine data gemmer jeg også til en anden god gang.
Så ja, der er et par ting man skal være opmærksom på og det kræver lidt viden og erfaring at gøre det rigtigt – men i bund og grund er Cosmos DB ikke så forskellig fra en relationel database. Hvis du allerede ved hvordan man designer data i en relationel database så er du allerede 90% af vejen til at designe datastruktur til Cosmos DB.