Cassandra
NoSQLHøjtydende distribueret NoSQL-database designet til massiv skalering uden enkelt fejlpunkt.
Beskrivelse
Apache Cassandra er en wide-column NoSQL-database oprindeligt udviklet af Facebook til at håndtere massive mængder data på tværs af mange servere. Den er designet efter CAP-teoremet til at prioritere tilgængelighed og partitionstolerance over konsistens (eventually consistent). Cassandra bruger en peer-to-peer distribueret arkitektur uden masternode, hvilket eliminerer enkelt fejlpunkter og gør den ekstremt fejltolerant. Data distribueres automatisk via consistent hashing og replikeres på tværs af flere noder og datacentre. Med lineær skalerbarhed kan man tilføje nye noder uden nedetid, og systemet bliver proportionelt hurtigere. Cassandra udmærker sig ved skrivetunge arbejdsbyrder og tidsseriedata. Den bruges af Netflix, Instagram, Apple og Reddit til at håndtere milliarder af operationer dagligt. CQL (Cassandra Query Language) ligner SQL men er optimeret til distribuerede data.
Features
- •Lineær skalerbarhed (tilføj noder for ydeevne)
- •Intet enkelt fejlpunkt
- •Multi-datacenter replikering
- •Justerbare konsistensniveauer
- •Høj skrivegennemstrømning
- •CQL-forespørgselssprog
- •Automatisk datadistribution
- •Time-to-live (TTL) per kolonne
Query Eksempel
-- Opret keyspace (database)
CREATE KEYSPACE webshop
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3,
'datacenter2': 2
};
USE webshop;
-- Opret tabel (column family)
CREATE TABLE events (
user_id UUID,
event_time TIMESTAMP,
event_type TEXT,
event_data MAP<TEXT, TEXT>,
PRIMARY KEY (user_id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
-- Indsæt data
INSERT INTO events (user_id, event_time, event_type, event_data)
VALUES (
uuid(),
toTimestamp(now()),
'page_view',
{'page': '/products', 'referrer': 'google'}
) USING TTL 2592000; -- Udløber efter 30 dage
-- Forespørgsel efter bruger (effektiv)
SELECT * FROM events
WHERE user_id = 123e4567-e89b-12d3-a456-426614174000
AND event_time > '2024-01-01'
LIMIT 100;
-- Tællerkolonner til metrikker
CREATE TABLE page_views (
page_url TEXT PRIMARY KEY,
view_count COUNTER
);
UPDATE page_views
SET view_count = view_count + 1
WHERE page_url = '/homepage';Anvendelsesområder
- •Tidsseriedata (sensoraflæsninger, logs)
- •IoT-dataindsamling i stor skala
- •Sociale medier feeds og beskeder
- •Produktkataloger og lagerbeholdning
- •Svindelregistrering med realtidsskrivninger
Fordele
- ✓Fremragende skalerbarhed (håndterer petabytes)
- ✓Høj tilgængelighed og fejltolerance
- ✓Fantastisk skriveydeevne
- ✓Geografisk distribution af data
- ✓Ingen nedetid ved skalering
Ulemper
- ✗Eventually consistent (ikke altid)
- ✗Begrænsede forespørgselsmuligheder (design til adgangsmønstre)
- ✗Høj operationel kompleksitet
- ✗Læsninger kan være langsommere end skrivninger
- ✗Hukommelses- og diskkrævende
Bedst til
- →Applikationer der kræver lineær skalerbarhed
- →Høj tilgængelighed distribuerede systemer
- →Tidsserier og hændelseslogning
- →Skrivetunge arbejdsbyrder
- →Multi-datacenter deployments
Ikke anbefalet til
- ⚠Komplekse joins og transaktioner
- ⚠Ad hoc analytiske forespørgsler
- ⚠Små datasæt (operationel overhead)
- ⚠Krav om stærk konsistens
- ⚠Teams uden distribueret systems-ekspertise