MongoDB Academy · Lektion

MongoDB vs Cassandra: Skrivninger i planetarisk skala

De sammenligner MongoDB's konsistensmodel for replikasæt med Cassandra's justerbare eventual consistency og lederløse replikering til skriveintensive IoT-arbejdsbelastninger.

Lektion 2 af 413 trin

MongoDB vs Cassandra: Skrivninger i planetarisk skala er en gratis MongoDB Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i MongoDB Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. MongoDB Academy-kurset indeholder 4 lektioner i alt.

To tilgange til distribuerede data

MongoDB og Apache Cassandra håndterer begge distribuerede data i stor skala, men med grundlæggende forskellige arkitekturer. MongoDB bruger en leder-følger-model (primær-sekundær), hvor skrivninger går til én enkelt primær node pr. replika-sæt. Cassandra bruger en lederløs model (peer-to-peer), hvor enhver node kan acceptere enhver skrivning. Denne arkitekturforskel bestemmer alle forskelle i ydeevne, konsistens og drift mellem de to systemer.

Cassandras lederløse arkitektur

I Cassandra er alle noder ligeværdige peers i en ringtopologi. En skrivning kan sendes til enhver node (den koordinerende node), som videresender den til de N replikanoder, der er ansvarlige for rækkens partitionsnøgle. Antallet af noder, der skal bekræfte skrivningen, konfigureres med konsistensniveauet (f.eks. ONE, QUORUM, ALL). Denne arkitektur eliminerer flaskehalsen med en enkelt primær node og muliggør ægte multi-master-skrivninger i flere regioner — alle datacentre kan acceptere skrivninger samtidigt.

Skrivegennemløb: Cassandras fordel

Cassandra er optimeret til ekstremt højt skrivegennemløb. Skrivninger føjes til en commit-log og en hurtig struktur i hukommelsen (Memtable), før de skrives samlet til disken (SSTables). Denne tilgang, hvor der kun tilføjes data, betyder, at skrivninger aldrig kolliderer på disken, og at gennemløbet skalerer lineært med antallet af noder. IoT-platforme, der optager millioner af målinger pr. sekund, systemer til hændelseslogning og tidsseriedata med skrivehastigheder, der overbelaster en enkelt primær MongoDB-node, er oplagte anvendelser af Cassandra.

Justerbar konsistens i Cassandra

Cassandras konsistensniveau kan justeres pr. forespørgsel. ONE betyder, at én replika bekræfter (hurtigst, svagest konsistens). QUORUM betyder, at et flertal af replikaerne bekræfter (afvejer latenstid og konsistens). ALL betyder, at alle replikaer bekræfter (langsommest, stærkest konsistens). Den vigtigste formel er: Hvis læsekonsistens + skrivekonsistens > replikeringsfaktor, får du stærk konsistens. Denne fleksibilitet gør det muligt at håndtere forskellige arbejdsbelastninger forskelligt i den samme klynge.

-- Cassandra CQL: tunable consistency per query
CONSISTENCY QUORUM;

INSERT INTO iot_events (device_id, event_time, temperature)
VALUES ('sensor-42', toTimestamp(now()), 23.5);

-- For lower latency (weaker consistency)
CONSISTENCY ONE;

SELECT * FROM iot_events WHERE device_id = 'sensor-42'
  AND event_time >= '2024-06-01 00:00:00'
  LIMIT 100;

Forespørgselsmodel: Skema først i Cassandra

Cassandras datamodel er grundlæggende forespørgselsdrevet. Du designer tabeller, så de besvarer bestemte forespørgsler effektivt — der findes ingen ad hoc-forespørgselsmotor som MongoDBs. Tabeller skal partitioneres efter en partitionsnøgle (som bestemmer, hvilken node der gemmer rækken), og rækkerne i en partition sorteres efter en klyngenøgle. Sekundære indekser findes, men de er langt mindre avancerede end MongoDBs. Komplekse forespørgsler (join, aggregater og filtre på flere felter), som MongoDB håndterer med aggregationspipellinen, er ikke mulige i standard-CQL.

-- Cassandra CQL: table designed around a specific query
CREATE TABLE sensor_readings_by_device (
  device_id TEXT,
  event_time TIMESTAMP,
  temperature DOUBLE,
  humidity DOUBLE,
  PRIMARY KEY (device_id, event_time)  -- partition by device, cluster by time
) WITH CLUSTERING ORDER BY (event_time DESC);

-- This query is fast (uses partition and clustering key)
SELECT * FROM sensor_readings_by_device
  WHERE device_id = 'sensor-42'
  AND event_time >= '2024-06-01'
  LIMIT 100;

MongoDBs fordel ved forespørgsler

MongoDBs aggregationspipeline og omfattende forespørgselsoperatorer gør det muligt at udføre ad hoc-forespørgsler på alle felter. Skal du finde alle brugere i Istanbul, som har købt et bestemt produkt inden for de seneste 30 dage? En MongoDB-forespørgsel med det rigtige sammensatte indeks besvarer dette direkte. I Cassandra skulle du bruge en foruddesignet tabel til netop denne forespørgsel, denormalisere data til flere tabeller eller bruge Spark til analytiske forespørgsler. MongoDB er langt mere fleksibel, når forespørgselskrav udvikler sig.

// MongoDB: ad-hoc multi-field query — easy
db.orders.find({
  'customer.city': 'Istanbul',
  'items.sku': 'WGT-001',
  createdAt: { $gte: new Date(Date.now() - 30 * 86400000) }
}).sort({ createdAt: -1 })

// Cassandra: would need a pre-designed table for this exact query
// or resort to ALLOW FILTERING (very slow full-table scan)

Aktiv-aktiv i flere regioner: Cassandras afgørende fordel

Cassandras lederløse replikering på tværs af flere datacentre muliggør aktiv-aktive-installationer: alle regioner accepterer skrivninger samtidigt. En bruger i New York skriver til datacentret i USA, og den samme brugers data replikeres asynkront til Europa og Asien. MongoDB understøtter flere regioner via læsepræferencer for replika-sæt og globale klynger (Atlas), men skrivninger skal stadig dirigeres til én primær region. Til applikationer, der kræver skrivninger uden latenstid fra alle regioner, har Cassandra en arkitektonisk fordel.

Forskelle på konsistensmodeller

MongoDB med w: majority giver stærk konsistens — når en skrivning er bekræftet, returnerer alle efterfølgende læsninger den nye værdi. Cassandras standardkonfiguration er eventuel konsistens — en skrivning, der er bekræftet med ONE, er måske ikke straks synlig ved læsninger fra andre replikaer. Applikationer skal kunne håndtere dette eller konfigurere QUORUM-læsninger og -skrivninger for at opnå stærk konsistens på bekostning af højere latenstid. Dette påvirker applikationens kompleksitet betydeligt.

Driftsmæssig kompleksitet

Begge systemer kræver driftsekspertise, men inden for forskellige områder. MongoDBs replika-sæt-arkitektur er velkendt, og Atlas automatiserer næsten al drift. Cassandras ringtopologi kræver omhyggelig kapacitetsplanlægning, tokenhåndtering, overvågning af komprimering og håndtering af tombstones. Sletninger i Cassandra opretter tombstones, som kan hobe sig op og forringe læseydelsen over tid. MongoDBs sletningsmodel er enklere driftsmæssigt. For små og mellemstore teams er MongoDBs driftsmæssige overhead generelt lavere.

IoT og tidsserier: Cassandra sammenlignet med MongoDB

Begge databaser bruges til IoT- og tidsseriedata, men med forskellige tilgange. Cassandras tidsseriepartitionering (partitionér efter enhed, klyngeinddel efter tid) giver ekstremt højt skrivegennemløb og effektive scanninger af tidsintervaller pr. enhed. MongoDBs indbyggede tidsseriesamlinger (tilføjet i 5.0) mindsker meget af forskellen med automatisk bucket-opdeling og kolonnebaseret lagring. Ved skrivehastigheder på millioner pr. sekund på tværs af tusindvis af enheder har Cassandra stadig fordelen. Ved arbejdsbelastninger under denne skala, hvor der er større behov for avancerede forespørgsler, er MongoDB-tidsserier ofte mere praktiske.

Beslutningsramme: MongoDB sammenlignet med Cassandra

Brug Cassandra, når: skrivegennemløbet er på millioner pr. sekund; der kræves aktiv-aktive-skrivninger i flere regioner; adgangsmønstret er meget forudsigeligt (én tabel pr. forespørgsel); og TTL'er for dataopbevaring er simple. Brug MongoDB, når: forespørgselsmønstrene ofte ændrer sig; der er behov for komplekse aggregater og join; fleksible dokumenter er vigtige; teamet er lille eller mellemstort; eller du har brug for fulde ACID-transaktioner på tværs af dokumenter.

Hurtig test

Test din forståelse af begreberne MongoDB og NoSQL-databaser fra denne lektion.

Opsummering af lektionen

I denne lektion har du lært: Cassandras lederløse arkitektur muliggør enormt skrivegennemløb og ægte aktiv-aktive-skrivninger i flere regioner, som MongoDBs primær-sekundær-model ikke kan matche, Cassandras forespørgselsmodel tager udgangspunkt i skema og tabel, mens MongoDB understøtter avancerede ad hoc-forespørgsler, og at valget mellem dem afhænger af kravene til skrivevolumen, behovet for fleksible forespørgsler og teamets driftsmæssige kapacitet. Næste gang sammenligner vi MongoDB med DynamoDB.

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “MongoDB vs Cassandra: Skrivninger i planetarisk skala” gratis?

Ja — hele teksten til “MongoDB vs Cassandra: Skrivninger i planetarisk skala” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af MongoDB Academy-kurset, skal du opgradere til CoddyKit PRO. MongoDB Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “MongoDB vs Cassandra: Skrivninger i planetarisk skala”?

De sammenligner MongoDB's konsistensmodel for replikasæt med Cassandra's justerbare eventual consistency og lederløse replikering til skriveintensive IoT-arbejdsbelastninger. Du øver dig i MongoDB Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på MongoDB Academy?

Der kræves ingen tidligere erfaring. MongoDB Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “MongoDB vs Cassandra: Skrivninger i planetarisk skala”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne MongoDB Academy-lektion?

Ja. Alle MongoDB Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. MongoDB vs Redis: Dokumenter vs nøgleværdicache
  2. MongoDB vs Cassandra: Skrivninger i planetarisk skala
  3. MongoDB vs DynamoDB: Afvejninger i cloud-native løsninger
  4. Hvornår bør De bruge en grafdatabase som Neo4j
← Tilbage til MongoDB Academy