Cassandra
NoSQLHøjtydende distribueret NoSQL database designet til massive skalering uden single point of failure.
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 theorem til at prioritere Availability og Partition Tolerance over Consistency (eventually consistent). Cassandra bruger en peer-to-peer distribueret arkitektur uden master node, hvilket eliminerer single points of failure og gør den ekstremt fault-tolerant. Data distribueres automatisk via consistent hashing og replikeres på tværs af multiple nodes og datacentre. Med linear scalability kan man tilføje nye nodes uden downtime, og systemet bliver proportionelt hurtigere. Cassandra excellerer ved write-heavy workloads og time-series data, og 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 distribueret data.
Features
- •Linear scalability (add nodes for performance)
- •No single point of failure
- •Multi-datacenter replication
- •Tunable consistency levels
- •High write throughput
- •CQL query language
- •Automatic data distribution
- •Time-to-live (TTL) per column
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; -- Expire after 30 days
-- Query efter user (efficient)
SELECT * FROM events
WHERE user_id = 123e4567-e89b-12d3-a456-426614174000
AND event_time > '2024-01-01'
LIMIT 100;
-- Counter columns til metrics
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
- •Time-series data (sensor readings, logs)
- •IoT data collection på stor skala
- •Social media feeds og messaging
- •Product catalogs og inventory
- •Fraud detection med real-time writes
Fordele
- ✓Excellent scalability (handles petabytes)
- ✓Høj availability og fault tolerance
- ✓Fantastisk write performance
- ✓Geografisk distribution af data
- ✓Ingen downtime ved scaling
Ulemper
- ✗Eventually consistent (ikke altid)
- ✗Begrænset query capabilities (design for access patterns)
- ✗Høj operational kompleksitet
- ✗Læser kan være langsommere end writes
- ✗Memory og disk intensive
Bedst til
- →Applikationer der kræver linear scalability
- →High availability distributed systems
- →Time-series og event logging
- →Write-heavy workloads
- →Multi-datacenter deployments
Ikke anbefalet til
- ⚠Komplekse joins og transactions
- ⚠Ad-hoc analytical queries
- ⚠Små datasets (operational overhead)
- ⚠Strong consistency requirements
- ⚠Teams uden distributed systems expertise