Databaser i .NET Aspire: SQL vs NoSQL
Indledning
I denne artikel vil jeg undersøge forskellen mellem SQL og NoSQL for at skabe en bedre forståelse hvornår det er en god idé at bruge det ene og omvendt, samt om der kan findes en use case hvor det kan give mening at implementere dem begge i samme system?
Relationelle vs NoSQL Databaser
I dette afsnit vil jeg sammenligne relationelle og NoSQL databaser
Relationelle Databaser (SQL)
Relationelle databaser opbevarer data i tabeller med rækker og kolonner. De er bedst når:
- Man har struktureret data med faste relationer
- Man behøver stærk dataintegritet såsom med pengeoverførsler
- Man skal lave komplekse forespørgsler
NoSQL Databaser
NoSQL databaser tilbyder fleksible datamønstre uden fast skemastruktur. De er bedst når:
- Man har ustruktureret data såsom sociale medier
- Man har brug for høj skalerbarhed
- Man har brug for hurtig hastighed
Hvad er NoSQL?
NoSQL er typisk en betegnelse for alle ikke-relationelle databaser. Der er fire hovedtyper af NoSQL databaser som bliver brugt: Dokument baserede databaser, key-value databaser, wide-column stores.
Dokument baseret databaser
En dokument baseret database opbevare data i dokumenter ligesom JSON objekter. Hver dokument indeholder fields og værdier.
En dokument baseret database giver en meget mere fleksibel datamodel, meget mere egnet til et ustruktureret datasæt. Flere af verdens største online forhandlere har benyttet NoSQL databaser for at kunne følge med i det hurtigt voksende behov indsamling, opbevaring og håndtering af data.
Herunder er et eksempel på hvordan et dokument kan se ud.
{
"_id": "100",
"name": "Mathias",
"email": "Mathias@holmgaard.com",
"age": "29",
"hobbies": ["Linux", "Podcasts", "Running"]
}
Key-value databaser
key-value databaser er en mere simpel type database hvor hvert objekt nøgler og værdier. Hver nøgle er unik og forbundet med en enkelt værdi. De bruges primært til sessions håndtering og giver en høj læse/skrive hastighed. Redis benytter eksempelvis denne type database som vist nedenfor.
{
Key: user:12345
Value: {"name": "foo bar", "email": "foo@bar.com", "designation": "software developer"}
}
Wide-column stores
Denne type database ligner meget en traditionel relationel database som SQL. Den benytter ligeledes kolonner og rækker, men de er fleksible således at forskellige rækker kan have forskellige sæt af kolonner. Databasen benytter kolonne kompressions teknikker som kan reducere plads optaget på databasen og øge hastigheden på den måde.
name | id | dob | city | |
---|---|---|---|---|
Foo bar | 12345 | foo@bar.com | Some city | |
Carn Yale | 34521 | bar@foo.com | 12-05-1972 |
Praktisk Implementation i .NET Aspire
Nedenfor vil jeg beskrive implementeringen af NoSQL i .NET Aspire.
NoSQL Database Setup (med MongoDB)
- Tilføj NuGet pakke:
dotnet add package MongoDB.Driver
- Opret model klasse:
public class Product
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
- Konfigurer i Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IMongoClient>(sp =>
new MongoClient(builder.Configuration.GetConnectionString("MongoDb")));
builder.Services.AddScoped(sp =>
{
var client = sp.GetRequiredService<IMongoClient>();
var database = client.GetDatabase("your-database-name");
return database.GetCollection<Product>("products");
});
Opsummering
Valget mellem SQL og NoSQL afhænger af applikationens specifikke behov:
- Vælg SQL når man har brug for ACID-compliance og har komplekse forespørgsler
- Vælg NoSQL når man har brug for høj skalerbarhed og fleksibel datamodellering
Begge typer kan implementeres effektivt i .NET Aspire, og de kan også bruges sammen i samme applikation hvis det giver mening for den pågældende use-case.
Reflektion
Maersk Air Cargo har mange IT systemer i forvejen og det system var har lavet projekt omkring på dette semester ville være en tilføjelse til den portefølje.
Jeg kan godt se en fordel i at benytte NoSQL til projektet hvis vi skulle binde alle systemer sammen med en fælles database struktur hvor vi både inddrager SQL lignende strukture til de services som skal have høj ACID compliance og forretningskritiske transaktioner som lønkørsel og lignende, samt at benytte NoSQL til en chat og medarbejder platform for hele Maersk koncernen. Men til vores scope så kan en simpel SQL database sagtens løse opgaven.
Kilder
https://www.mongodb.com/resources/basics/databases/nosql-explained (opens in a new tab)