nosql-expert
Skalierbare NoSQL-Datenbanken entwerfen
Dieser Skill bietet Experten-Anleitung für den Entwurf verteilter NoSQL-Datenbanken (Cassandra, DynamoDB). Er hilft Entwicklern, das Query-First-Modeling, Single-Table-Design zu verstehen und häufige Fallstricke wie Hot Partitions zu vermeiden.
Die Skill-ZIP herunterladen
In Claude hochladen
Gehe zu Einstellungen → Fähigkeiten → Skills → Skill hochladen
Einschalten und loslegen
Teste es
Verwendung von "nosql-expert". Hilf mir, einen Cassandra-Primärschlüssel für das Speichern von Benutzerbestellungen zu entwerfen, wobei ich nach user_id abfragen und nach order_date absteigend sortieren muss.
Erwartetes Ergebnis:
Für dieses Zugriffsmuster verwende einen zusammengesetzten Primärschlüssel:
**Partition Key:** user_id (hohe Kardinalität – jeder Benutzer ist eine Partition)
**Clustering Column:** order_date DESC (sortiert Bestellungen nach Datum innerhalb jeder Partition)
```sql
CREATE TABLE orders_by_user (
user_id uuid,
order_id uuid,
order_date timestamp,
total decimal,
status text,
PRIMARY KEY (user_id, order_date)
) WITH CLUSTERING ORDER BY (order_date DESC);
```
Dieses Design stellt sicher, dass alle Bestellungen eines Benutzers in einer Partition gespeichert sind (effizient) und automatisch nach Datum sortiert sind.
Verwendung von "nosql-expert". Was sind die Hauptunterschiede zwischen SQL- und NoSQL-Datenmodellierung?
Erwartetes Ergebnis:
**SQL vs. verteiltes NoSQL-Denkmodell:**
| Aspekt | SQL (relational) | NoSQL (Cassandra/DynamoDB) |
|-------|------------------|---------------------------|
| Modellierung | Entitäten + Beziehungen modellieren | **Zuerst Abfragen modellieren** |
| Joins | zur Lesezeit (teuer) | Zur Schreibzeit vorberechnet |
| Speicher | Duplizierung minimieren | Für Lesegeschwindigkeit duplizieren |
| Konsistenz | ACID (stark) | BASE (eventuell) |
| Skalierung | Vertikal | Horizontal |
**Goldene Regel:** Bei SQL Daten für *beliebige* Abfragen entwerfen. Bei NoSQL Daten für *spezifische* Abfragen effizient entwerfen.
Verwendung von "nosql-expert". Erkläre Single-Table-Design in DynamoDB
Erwartetes Ergebnis:
**DynamoDB-Single-Table-Design:**
Speichere mehrere Entitätstypen in einer Tabelle mithilfe von zusammengesetzten Schlüsseln:
| PK | SK | Daten |
|----|-----|------|
| USER#123 | PROFILE | {name: 'Ian', email: '...'} |
| USER#123 | ORDER#998 | {total: 50.00, status: 'shipped'} |
| USER#123 | ORDER#999 | {total: 12.00, status: 'pending'} |
**Abfrage:** PK='USER#123' ruft Benutzer + alle Bestellungen in EINER Anfrage ab.
**Vorteile:**
- Reduzierte Anwendungskomplexität
- Optimierte Kapazitätseinheits-Nutzung
- Ein einziger Netzwerk-Roundtrip für verwandte Daten
Sicherheitsaudit
SicherThis skill is purely educational documentation about NoSQL database design patterns. The static analyzer detected patterns (external_commands, weak_crypto, system_reconnaissance) that are FALSE POSITIVES - they are documentation examples of database table names, query syntax, and design concepts. No actual code execution, network calls, or file operations exist.
Probleme mit niedrigem Risiko (3)
Qualitätsbewertung
Was du bauen kannst
Neues Cassandra-Schema entwerfen
Cassandra-Primärschlüsselstruktur für eine Anwendung entwerfen, die effizient nach Benutzer-ID und Zeitraum abfragen muss.
DynamoDB-Single-Table-Design optimieren
DynamoDB-Tabelle refactorieren, um mehrere Entitätstypen (Benutzer, Bestellungen, Produkte) in einer Tabelle mithilfe von Composite Keys zu speichern.
Hot-Partition-Probleme beheben
Hot-Partition-Probleme in einer DynamoDB-Tabelle mit hohem Datenverkehr identifizieren und lösen, indem die Partition-Key-Kardinalität verbessert wird.
Probiere diese Prompts
Hilf mir, einen Cassandra-Primärschlüssel für eine Tabelle zu entwerfen, die Benutzerereignisse speichert. Ich muss nach user_id abfragen und innerhalb eines Zeitraums nach event_type filtern. Wie sollte mein Partition Key und meine Clustering Columns aussehen?
Ich habe drei Entitätstypen: Users, Orders und Products. Entwirf eine einzelne DynamoDB-Tabelle mithilfe von Composite Keys, bei der ich das Benutzerprofil und alle Bestellungen in einer einzigen Anfrage abrufen kann.
Meine DynamoDB-Tabelle erlebt Drosselung auf einer Partition. Der Partition Key ist 'status' (Werte: 'active', 'pending', 'completed'). Was ist falsch und wie behebe ich es?
Ich habe ein relationales Schema mit Author- und Book-Tabellen, die über author_id verknüpft sind. Wie sollte ich das in Cassandra oder DynamoDB ohne Joins modellieren?
Bewährte Verfahren
- Entwerfe Partition Keys immer mit hoher Kardinalität, um Hot Partitions zu vermeiden
- Berechne Joins zur Schreibzeit mithilfe von Denormalisierung vor, anstatt mehrere Tabellen abzufragen
- Verwende zusammengesetzte Partition Keys (z.B. USER#123#2024-01), um zu verhindern, dass Partitionen 10GB überschreiten
Vermeiden
- Verwendung von Partition Keys mit niedriger Kardinalität wie status='active' oder gender='m' (erzeugt Hot Partitions)
- Verwendung von 'Scatter-Gather'-Abfragen, die alle Partitionen scannen, anstatt spezifische Keys zu zielen
- Anwendung von SQL-Modellierungsmustern (separate Tabellen mit Fremdschlüsseln) auf NoSQL-Datenbanken