Help us improve
Share bugs, ideas, or general feedback.
From godmode
Guides NoSQL database selection and schema design for MongoDB, DynamoDB, Cassandra, Neo4j, and time-series DBs like InfluxDB/TimescaleDB based on access patterns and scale.
npx claudepluginhub arbazkhan971/godmodeHow this skill is triggered — by the user, by Claude, or both
Slash command
/godmode:nosqlThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- `/godmode:nosql`, "mongodb schema", "dynamodb design"
Designs NoSQL data models for MongoDB, DynamoDB, Redis, and Cassandra using access patterns, embedding/referencing decisions, and denormalization trade-offs.
Expert guidance on distributed NoSQL databases (Cassandra, DynamoDB), emphasizing query-first modeling, single-table design, partition key strategy, and avoiding hot partitions.
Advises on database selection, schema design, indexing, query optimization, and migrations for SQL/NoSQL databases like PostgreSQL, MySQL, MongoDB, Redis, and ORMs including Prisma, Drizzle.
Share bugs, ideas, or general feedback.
/godmode:nosql, "mongodb schema", "dynamodb design"Data model: Document|Key-Value|Wide-Column|Graph|TimeSeries
Access patterns: <list read/write patterns + frequency>
Scale: <expected documents, queries/sec>
Consistency: eventual|strong|tunable
# Check for NoSQL drivers
cat package.json 2>/dev/null | grep -iE "mongo|dynamo|neo4j"
pip list 2>/dev/null | grep -iE "pymongo|boto3|cassandra"
IF hierarchical/nested data + flexible schema: MongoDB
IF key-based access, extreme scale: DynamoDB
IF time-series writes, wide rows: Cassandra
IF relationship traversal: Neo4j
IF metrics/IoT at scale: InfluxDB/TimescaleDB
DEFAULT: Start with PostgreSQL, move to NoSQL when
a specific technical requirement demands it.
IF access patterns unknown: do NOT choose NoSQL yet. IF < 1M records and relational: PostgreSQL is better.
Embed when: read together, 1:1 or 1:few, bounded size
Reference when: independent, large, shared across docs
IF subdocument > 16MB: must reference (Mongo limit)
IF array grows unbounded: use bucketing pattern
// Compound index (covers multiple query patterns)
db.orders.createIndex({ customer_id: 1, created_at: -1 })
// Partial index (smaller, faster)
db.orders.createIndex(
{ status: 1 }, { partialFilterExpression: { active: true } }
)
Design for access patterns FIRST, entity model second.
PK: high cardinality, even distribution
SK: enables range queries within partition
GSI: different PK+SK for alternate access patterns
IF partition > 10GB: add write sharding. IF PK cardinality < 100 on high-volume: use composite. IF hot partition > 30% traffic: redistribute.
One table per query (no JOINs).
Target: < 100MB per partition, < 100K rows.
Use time-bucketed keys for time-series data.
Nodes = entities (nouns), Relationships = verbs
IF "find connections" or "shortest path": graph DB
runs 100-1000x faster than SQL JOINs.
IF already using PostgreSQL: TimescaleDB extension
IF high-cardinality pure metrics: InfluxDB
Tags = indexed metadata (strings), Fields = values
Append .godmode/nosql-results.tsv:
timestamp database action collection index_count status
KEEP if: tests pass AND quality improved AND no regression.
DISCARD if: tests fail OR performance regressed.
STOP when FIRST of:
- All access patterns covered without scans
- Partition sizes within limits
- User requests stop
On failure: git reset --hard HEAD~1. Never pause.
| Failure | Action |
|---|---|
| Query degrades with growth | Check explain(), add indexes |
| Data inconsistency | Check write concern, use majority |
| Connection exhaustion | Increase pool, check leaks |