← Tilbage til databaser

DynamoDB

NoSQL

Amazons fuldt administrerede serverløse NoSQL-database med enkeltcifret millisekunders ydeevne ved enhver skala.

Beskrivelse

Amazon DynamoDB er en nøgle-værdi- og dokumentdatabase designet til at levere konsistent ydeevne uanset størrelsen af datasættet. Som en fuldt administreret serverløs tjeneste håndterer DynamoDB automatisk provisionering, patching, backups og skalering. Den bruger SSD-lagring og distribuerer data på tværs af flere Availability Zones for høj holdbarhed og tilgængelighed. DynamoDB udmærker sig ved brugsscenarier der kræver forudsigelig ydeevne ved millioner af forespørgsler per sekund. Med funktioner som Global Tables (multi-region replikering), DynamoDB Streams (change data capture) og Point-in-Time Recovery er den enterprise-klar. Prismodellen er pay-per-request eller provisioneret kapacitet. DynamoDB bruges af store virksomheder som Amazon.com, Samsung, Lyft og Duolingo til missionskritiske arbejdsbyrder. Integration med AWS Lambda og andre AWS-tjenester gør den til en naturlig del af serverløse arkitekturer.

Features

  • Fuldt administreret serverløs
  • Enkeltcifret millisekunders latenstid
  • Automatisk skalering
  • Global Tables for multi-region
  • DynamoDB Streams for CDC
  • Point-in-Time Recovery
  • Kryptering i hvile
  • DAX (in-memory cache)

Query Eksempel

// AWS SDK for JavaScript (v3)
import { 
  DynamoDBClient, 
  PutItemCommand,
  GetItemCommand,
  QueryCommand 
} from '@aws-sdk/client-dynamodb';
import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';

const client = new DynamoDBClient({ region: 'eu-west-1' });

// Put item
await client.send(new PutItemCommand({
  TableName: 'Users',
  Item: marshall({
    userId: 'user-123',
    name: 'Maria Nielsen',
    email: 'maria@email.dk',
    age: 28,
    city: 'København'
  })
}));

// Get item by primary key
const result = await client.send(new GetItemCommand({
  TableName: 'Users',
  Key: marshall({ userId: 'user-123' })
}));
const user = unmarshall(result.Item);

// Query with sort key
await client.send(new QueryCommand({
  TableName: 'Orders',
  KeyConditionExpression: 'userId = :userId AND orderDate > :date',
  ExpressionAttributeValues: marshall({
    ':userId': 'user-123',
    ':date': '2024-01-01'
  })
}));

// Global Secondary Index query
await client.send(new QueryCommand({
  TableName: 'Users',
  IndexName: 'CityIndex',
  KeyConditionExpression: 'city = :city',
  ExpressionAttributeValues: marshall({
    ':city': 'København'
  })
}));

Anvendelsesområder

  • Serverløse web- og mobilbackends
  • Gaming-leaderboards og brugerdata
  • IoT-datalagring i stor skala
  • Sessionsstyring
  • Indkøbskurve og e-handel

Fordele

  • Nul serveradministration
  • Forudsigelig ydeevne ved enhver skala
  • Fremragende AWS-økosystemintegration
  • Pay-per-request prismulighed
  • Høj tilgængelighed indbygget

Ulemper

  • Leverandørbinding (kun AWS)
  • Begrænsede forespørgselskapabiliteter
  • Kan blive dyrt ved høj gennemstrømning
  • Stejlere indlæringskurve end MongoDB
  • Indeksbegrænsninger og designbegrænsninger

Bedst til

  • Serverløse arkitekturer
  • Arbejdsbyrder med forudsigelige adgangsmønstre
  • Højtrafik web/mobilapps
  • AWS-native applikationer
  • Gaming og realtidsapplikationer

Ikke anbefalet til

  • Komplekse relationelle forespørgsler
  • Ad hoc-analyser
  • Applikationer uden AWS
  • Når omkostningsoptimering er kritisk
  • Traditionelle OLAP-arbejdsbyrder

Relaterede databaser

Azure Cosmos DBGoogle Cloud DatastoreMongoDBCassandra