agentic-sdlc 1.0.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ide-integration/INTEGRATION-SUMMARY.md +309 -0
- package/.agent/ide-integration/KIRO-IDE.md +381 -0
- package/.agent/ide-integration/README.md +256 -209
- package/.agent/knowledge-base/AUTO-LEARNING-GUIDE.md +327 -0
- package/.agent/knowledge-base/HOW-IT-WORKS.md +365 -0
- package/.agent/knowledge-base/INDEX.md +43 -0
- package/.agent/knowledge-base/README.md +47 -7
- package/.agent/knowledge-base/architecture/KB-2026-01-01-003-neo4j-graph-database-skills.md +1146 -0
- package/.agent/knowledge-base/architecture/README.md +98 -0
- package/.agent/knowledge-base/bugs/KB-2026-01-02-yaml-special-character-escaping.md +56 -0
- package/.agent/knowledge-base/bugs/medium/KB-2026-01-01-001-example-auto-learned.md +198 -0
- package/.agent/knowledge-base/features/KB-2026-01-01-001-landing-page-design-trends-2026.md +646 -0
- package/.agent/knowledge-base/features/KB-2026-01-01-004-uiux-design-skills-2026.md +945 -0
- package/.agent/knowledge-base/features/KB-2026-01-01-005-modern-ai-landing-page-ui.md +310 -0
- package/.agent/knowledge-base/features/KB-2026-01-01-006-award-winning-landing-page-patterns.md +324 -0
- package/.agent/knowledge-base/features/KB-2026-01-02-001-cleanup-workflow.md +242 -0
- package/.agent/knowledge-base/features/KB-2026-01-02-002-landing-page-monorepo-architecture.md +148 -0
- package/.agent/knowledge-base/features/KB-2026-01-02-003-premium-glassmorphism-patterns.md +58 -0
- package/.agent/knowledge-base/features/KB-2026-01-04-ai-agent-enforcement.md +46 -0
- package/.agent/knowledge-base/features/README.md +83 -0
- package/.agent/knowledge-base/features/figma-landing-page-workflow.md +311 -0
- package/.agent/knowledge-base/features/figma-mcp-sa-guide.md +673 -0
- package/.agent/knowledge-base/features/figma-mcp-uiux-guide.md +459 -0
- package/.agent/knowledge-base/performance/KB-2026-01-02-lazy-loading-optimization.md +80 -0
- package/.agent/knowledge-base/platform-specific/KB-2026-01-02-windows-console-encoding.md +56 -0
- package/.agent/knowledge-base/role-guides/DEV-KB-Guide.md +527 -0
- package/.agent/knowledge-base/role-guides/DEVOPS-KB-Guide.md +491 -0
- package/.agent/knowledge-base/role-guides/PM-KB-Guide.md +299 -0
- package/.agent/knowledge-base/role-guides/SECA-KB-Guide.md +555 -0
- package/.agent/knowledge-base/role-guides/TESTER-KB-Guide.md +519 -0
- package/.agent/knowledge-base/security/KB-2026-01-02-input-validation-sanitization.md +74 -0
- package/.agent/rules/AUTO-LEARNING.md +418 -0
- package/.agent/rules/ai-enforcement.md +11 -0
- package/.agent/rules/artifacts.md +77 -58
- package/.agent/rules/git-workflow.md +25 -65
- package/.agent/rules/global.md +18 -13
- package/.agent/skills/role-ba.md +76 -0
- package/.agent/skills/role-brain.md +470 -0
- package/.agent/skills/role-dev.md +338 -0
- package/.agent/skills/role-devops.md +122 -0
- package/.agent/skills/role-orchestrator.md +223 -0
- package/.agent/skills/role-pm.md +258 -0
- package/.agent/skills/role-po.md +237 -0
- package/.agent/skills/role-qa.md +81 -0
- package/.agent/skills/role-reporter.md +117 -0
- package/.agent/skills/role-sa.md +277 -0
- package/.agent/skills/role-seca.md +294 -0
- package/.agent/skills/role-stakeholder.md +105 -0
- package/.agent/skills/role-tester.md +294 -0
- package/.agent/skills/role-uiux.md +264 -0
- package/.agent/templates/CHANGELOG-Template.md +83 -0
- package/.agent/templates/Knowledge-Entry-Template.md +3 -0
- package/.agent/workflows/brain.md +84 -53
- package/.agent/workflows/compound.md +51 -0
- package/.agent/workflows/cycle.md +61 -0
- package/.agent/workflows/emergency.md +114 -0
- package/.agent/workflows/explore.md +147 -0
- package/.agent/workflows/housekeeping.md +105 -0
- package/.agent/workflows/metrics.md +179 -0
- package/.agent/workflows/orchestrator.md +68 -0
- package/.agent/workflows/preflight.md +35 -0
- package/.agent/workflows/release.md +153 -0
- package/.agent/workflows/route.md +160 -0
- package/.agent/workflows/sprint.md +125 -0
- package/.agent/workflows/validate.md +146 -0
- package/CHANGELOG.md +349 -6
- package/README.md +171 -86
- package/bin/CROSS-PLATFORM-CLI.md +526 -0
- package/bin/README.md +525 -0
- package/bin/cli.js +65 -90
- package/bin/kb +34 -0
- package/bin/kb.bat +28 -0
- package/bin/kb_cli.py +226 -0
- package/bin/lib/README.md +411 -0
- package/bin/lib/__init__.py +7 -0
- package/bin/lib/__pycache__/kb_add.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_common.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_compound.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_index.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_list.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_search.cpython-313.pyc +0 -0
- package/bin/lib/__pycache__/kb_stats.cpython-313.pyc +0 -0
- package/bin/lib/kb_add.py +203 -0
- package/bin/lib/kb_common.py +224 -0
- package/bin/lib/kb_compound.py +250 -0
- package/bin/lib/kb_index.py +193 -0
- package/bin/lib/kb_list.py +144 -0
- package/bin/lib/kb_search.py +121 -0
- package/bin/lib/kb_stats.py +153 -0
- package/docs/AGENT-MANAGEMENT-GUIDE.md +298 -0
- package/docs/ARCHITECTURE-OVERVIEW.md +350 -0
- package/docs/BRAIN-ARCHITECTURE.md +396 -0
- package/docs/COMPOUND-ENGINEERING-SETUP.md +326 -0
- package/docs/KNOWLEDGE-BASE-GUIDE.md +330 -0
- package/docs/KNOWLEDGE-BASE-SIMPLE.md +248 -0
- package/docs/MONOREPO-ARCHITECTURE.md +492 -0
- package/docs/PROJECT-DOCUMENTATION-INDEX.md +540 -0
- package/docs/SDLC-Diagram.md +235 -0
- package/docs/analysis/Workflow-Optimization-Diagram.md +524 -0
- package/docs/analysis/Workflows-Deep-Analysis-2026-01-03.md +604 -0
- package/docs/architecture/{brain.md → BRAIN.md} +1 -1
- package/docs/global/Master-Documentation.md +307 -0
- package/docs/global/reports/Final-Approval-Report.md +257 -0
- package/docs/guides/AUTO-LEARNING-COMPLETE-GUIDE.md +519 -0
- package/docs/guides/AUTO-LEARNING-SYSTEM.md +322 -0
- package/docs/guides/LEARNING-FLOW.md +0 -0
- package/docs/guides/MCP-QUICK-REFERENCE.md +104 -0
- package/docs/guides/MCP-SETUP.md +139 -0
- package/docs/guides/QUICK-START.md +4 -0
- package/docs/guides/ROLE-COMMUNICATION-SYSTEM.md +71 -0
- package/docs/reports/Metrics-Dashboard-2026-01-02.md +66 -0
- package/docs/reports/Metrics-Dashboard-2026-01-04.md +68 -0
- package/docs/reports/UIUX-Design-Skills-Research-Report-2026.md +91 -0
- package/docs/reports/Validation-Report-2026-01-04.md +23 -0
- package/docs/research-reports/research-20260103-101315.json +95 -0
- package/docs/research-reports/research-20260103-101315.md +78 -0
- package/docs/research-reports/research-20260103-183837.json +95 -0
- package/docs/research-reports/research-20260103-183837.md +78 -0
- package/docs/research-reports/research-20260103-190346.json +100 -0
- package/docs/research-reports/research-20260103-190346.md +83 -0
- package/docs/setup/{github-management.md → GITHUB-MANAGEMENT.md} +1 -1
- package/docs/setup/RESEARCH-AGENT-SETUP.md +575 -0
- package/docs/sprints/{sprint-github-issues.md → SPRINT-GITHUB-ISSUES.md} +1 -1
- package/docs/sprints/{sprint-leann-integration.md → SPRINT-LEANN-INTEGRATION.md} +1 -1
- package/docs/sprints/sprint-1/designs/Backend-Design-Spec-Sprint-1-v1.md +1206 -0
- package/docs/sprints/sprint-1/designs/System-Design-Spec-Sprint-1-v1.md +439 -0
- package/docs/sprints/sprint-1/designs/System-Design-Spec-v1.0.md +425 -0
- package/docs/sprints/sprint-1/designs/UIUX-Design-Spec-Sprint-1-v1.md +55 -0
- package/docs/sprints/sprint-1/designs/UIUX-Design-Spec-v1.0.md +644 -0
- package/docs/sprints/sprint-1/logs/DevOps-Plan-and-Log-Sprint-1-v1.md +253 -0
- package/docs/sprints/sprint-1/logs/Development-Log-Phase1.md +433 -0
- package/docs/sprints/sprint-1/logs/Development-Log-Sprint-1-v1.md +181 -0
- package/docs/sprints/sprint-1/logs/Development-Log-Sprint-1.md +548 -0
- package/docs/sprints/sprint-1/logs/Orchestration-Log-Sprint-1.md +46 -0
- package/docs/sprints/sprint-1/logs/Phase1-Summary.md +84 -0
- package/docs/sprints/sprint-1/plans/Product-Backlog-Sprint-1-v1.md +40 -0
- package/docs/sprints/sprint-1/plans/Product-Backlog-v1.0.md +613 -0
- package/docs/sprints/sprint-1/plans/Project-Plan-Sprint-1-v1.0.md +210 -0
- package/docs/sprints/sprint-1/plans/Project-Plan-Sprint-1-v1.md +377 -0
- package/docs/sprints/sprint-1/reports/Design-Verification-Report-v1.0.md +220 -0
- package/docs/sprints/sprint-1/reports/Phase-Report-Sprint-1-v1.md +238 -0
- package/docs/sprints/sprint-1/reports/Security-Review-Report-v1.0.md +285 -0
- package/docs/sprints/sprint-1/reports/Sprint-Report-Sprint-1.md +74 -0
- package/docs/sprints/sprint-1/reports/Test-Report-v1.0.md +346 -0
- package/docs/sprints/sprint-1/reviews/Design-Verification-Report.md +508 -0
- package/docs/sprints/sprint-1/reviews/Security-Review-Report.md +589 -0
- package/docs/sprints/sprint-1/sprint-current/logs/WORKFLOW-CLEANUP-FINAL.md +121 -0
- package/docs/sprints/sprint-1/sprint-current/logs/WORKFLOW-OPTIMIZATION-COMPLETE.md +224 -0
- package/docs/sprints/sprint-1/sprint-current/logs/Workflow-Optimization-Progress.md +310 -0
- package/docs/sprints/sprint-1/sprint-current/logs/Workflow-Optimization-Session-Summary.md +420 -0
- package/docs/sprints/sprint-1/sprint-current/plans/Workflow-Optimization-Implementation-Plan.md +1124 -0
- package/docs/sprints/sprint-2/SPRINT-SUMMARY.md +150 -0
- package/docs/sprints/sprint-2/designs/UIUX-Design-Spec-Sprint-2-v1.md +352 -0
- package/docs/sprints/sprint-2/logs/Development-Log-Sprint-2-v1.md +293 -0
- package/docs/sprints/sprint-2/plans/Product-Backlog-Sprint-2-v1.md +62 -0
- package/docs/sprints/sprint-2/plans/Project-Plan-Sprint-2-v1.md +228 -0
- package/docs/sprints/sprint-2/reports/Phase-Report-Sprint-2-v1.md +303 -0
- package/docs/sprints/sprint-3/designs/UIUX-Design-Spec-Sprint-3-v1.md +160 -0
- package/docs/sprints/sprint-3/logs/Development-Log-Sprint-3-v1.md +249 -0
- package/docs/sprints/sprint-3/logs/Testing-Report-Sprint-3-v1.md +244 -0
- package/docs/sprints/sprint-3/plans/Product-Backlog-Sprint-3-v1.md +95 -0
- package/docs/sprints/sprint-3/reports/Final-Approval-Report-Sprint-3-v1.md +299 -0
- package/docs/sprints/sprint-3/reports/Sprint-Summary-Sprint-3-v1.md +276 -0
- package/docs/sprints/sprint-3/reviews/Design-Verification-Report-Sprint-3-v1.md +122 -0
- package/docs/sprints/sprint-3/reviews/Security-Review-Report-Sprint-3-v1.md +67 -0
- package/docs/sprints/sprint-5/designs/Backend-Design-Spec-Sprint-5-v1.md +1734 -0
- package/docs/sprints/sprint-5/designs/Design-Verification-Report.md +101 -0
- package/docs/sprints/sprint-5/designs/Security-Review-Report.md +84 -0
- package/docs/sprints/sprint-6/.brain-state.json +29 -0
- package/package.json +92 -16
- package/.agent/ide-integration/aider-commands.md +0 -40
- package/.agent/ide-integration/cline-config.json +0 -108
- package/.agent/ide-integration/cursor-rules.md +0 -63
- package/.agent/ide-integration/github-copilot-instructions.md +0 -75
- package/.agent/ide-integration/vscode-commands.json +0 -190
- package/.agent/ide-integration/windsurf-cascade.md +0 -125
- package/.agent/knowledge-base/index.md +0 -202
- package/.agent/legacy/roles/designer.md +0 -311
- package/.agent/legacy/roles/dev.md +0 -177
- package/.agent/legacy/roles/devops.md +0 -146
- package/.agent/legacy/roles/orchestrator.md +0 -339
- package/.agent/legacy/roles/pm.md +0 -120
- package/.agent/legacy/roles/po.md +0 -89
- package/.agent/legacy/roles/qa.md +0 -108
- package/.agent/legacy/roles/reporter.md +0 -70
- package/.agent/legacy/roles/sa.md +0 -118
- package/.agent/legacy/roles/seca.md +0 -112
- package/.agent/legacy/roles/stakeholder.md +0 -111
- package/.agent/legacy/roles/tester.md +0 -129
- package/.agent/rules/global.md.bak +0 -154
- package/.agent/usage.md +0 -653
- package/.agent/workflows/auto.md +0 -35
- package/.agent/workflows/dev.md +0 -30
- package/.agent/workflows/devops.md +0 -28
- package/.agent/workflows/kb-search.md +0 -22
- package/.agent/workflows/pm.md +0 -42
- package/.agent/workflows/po.md +0 -21
- package/.agent/workflows/qa.md +0 -31
- package/.agent/workflows/reporter.md +0 -21
- package/.agent/workflows/sa.md +0 -51
- package/.agent/workflows/seca.md +0 -21
- package/.agent/workflows/stakeholder.md +0 -26
- package/.agent/workflows/tester.md +0 -21
- package/.agent/workflows/uiux.md +0 -38
- package/.cursorrules +0 -49
- package/.env.template +0 -10
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -47
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -33
- package/.github/ISSUE_TEMPLATE/security_alert.yml +0 -28
- package/.github/ISSUE_TEMPLATE/task_implementation.yml +0 -37
- package/.github/copilot-instructions.md +0 -60
- package/bin/commands/create.js +0 -96
- package/bin/commands/help.js +0 -69
- package/bin/commands/ide.js +0 -116
- package/bin/commands/init-kb.js +0 -74
- package/bin/commands/install.js +0 -68
- package/bin/commands/list.js +0 -35
- package/bin/graph_brain.py +0 -86
- package/bin/sync_github.py +0 -75
- package/bin/utils/args-parser.js +0 -33
- package/bin/utils/colors.js +0 -21
- package/bin/verify_neo4j.py +0 -25
- /package/.agent/rules/{knowledge-base.md → KNOWLEDGE-BASE.md} +0 -0
- /package/docs/architecture/{neo4j-learning-queries.md → NEO4J-LEARNING-QUERIES.md} +0 -0
- /package/docs/reports/{comparison-leann-neo4j.md → COMPARISON-LEANN-NEO4J.md} +0 -0
- /package/docs/sprints/{sprint-neo4j-brain.md → SPRINT-NEO4J-BRAIN.md} +0 -0
|
@@ -0,0 +1,1146 @@
|
|
|
1
|
+
# Neo4j Graph Database Skills & Best Practices
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-01-01
|
|
4
|
+
**Sprint:** N/A (Research & Documentation)
|
|
5
|
+
**Category:** Architecture / Database
|
|
6
|
+
**Related Issues:** N/A
|
|
7
|
+
**Prepared By:** @SA
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Executive Summary
|
|
12
|
+
|
|
13
|
+
This knowledge base entry provides comprehensive guidance on Neo4j graph database skills, with a focus on **Neo4j AuraDB (Cloud)** deployment. It covers Cypher query language, performance optimization, data modeling best practices, and cloud-specific configurations.
|
|
14
|
+
|
|
15
|
+
**Key Topics Covered:**
|
|
16
|
+
- Neo4j AuraDB Cloud setup and connection
|
|
17
|
+
- Cypher query language essentials
|
|
18
|
+
- Performance optimization and indexing
|
|
19
|
+
- Data modeling patterns
|
|
20
|
+
- Cloud-specific best practices
|
|
21
|
+
- Security and access control
|
|
22
|
+
- Integration with applications
|
|
23
|
+
|
|
24
|
+
**Target Audience:** Developers, architects, and data engineers working with Neo4j Cloud (AuraDB)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Neo4j AuraDB Cloud Overview
|
|
29
|
+
|
|
30
|
+
### 1.1 What is Neo4j AuraDB?
|
|
31
|
+
|
|
32
|
+
Neo4j AuraDB is the fully managed cloud service for Neo4j graph database. It provides:
|
|
33
|
+
- **Fully Managed:** No infrastructure management required
|
|
34
|
+
- **Auto-Scaling:** Automatically scales based on workload
|
|
35
|
+
- **Global Deployment:** Deploy in multiple regions worldwide
|
|
36
|
+
- **High Availability:** Built-in redundancy and failover
|
|
37
|
+
- **Automatic Backups:** Daily automated backups
|
|
38
|
+
- **Security:** Enterprise-grade security by default
|
|
39
|
+
- **Pay-as-you-go:** Flexible pricing based on usage
|
|
40
|
+
|
|
41
|
+
### 1.2 AuraDB Tiers
|
|
42
|
+
|
|
43
|
+
**AuraDB Free:**
|
|
44
|
+
- Perfect for learning and development
|
|
45
|
+
- Limited to 200k nodes + relationships
|
|
46
|
+
- 1 database instance
|
|
47
|
+
- Community support
|
|
48
|
+
|
|
49
|
+
**AuraDB Professional:**
|
|
50
|
+
- Production workloads
|
|
51
|
+
- Scalable compute and storage
|
|
52
|
+
- 24/7 support
|
|
53
|
+
- Advanced monitoring
|
|
54
|
+
- Custom backup schedules
|
|
55
|
+
|
|
56
|
+
**AuraDB Enterprise:**
|
|
57
|
+
- Mission-critical applications
|
|
58
|
+
- Multi-region deployment
|
|
59
|
+
- Advanced security features
|
|
60
|
+
- Dedicated support
|
|
61
|
+
- SLA guarantees
|
|
62
|
+
|
|
63
|
+
### 1.3 Connecting to Neo4j AuraDB
|
|
64
|
+
|
|
65
|
+
**Connection Details:**
|
|
66
|
+
```
|
|
67
|
+
URI: neo4j+s://xxxxx.databases.neo4j.io
|
|
68
|
+
Port: 7687 (Bolt protocol with TLS)
|
|
69
|
+
Username: neo4j
|
|
70
|
+
Password: [your-generated-password]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Connection String Format:**
|
|
74
|
+
```
|
|
75
|
+
neo4j+s://[instance-id].databases.neo4j.io
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Important Notes:**
|
|
79
|
+
- ✅ Always use `neo4j+s://` (secure Bolt protocol)
|
|
80
|
+
- ✅ Save your password immediately (shown only once)
|
|
81
|
+
- ✅ Use connection URI from AuraDB console
|
|
82
|
+
- ❌ Don't use `bolt://` (not secure)
|
|
83
|
+
- ❌ Don't use `localhost` (cloud-based)
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 2. Getting Started with Neo4j AuraDB
|
|
88
|
+
|
|
89
|
+
### 2.1 Creating Your First AuraDB Instance
|
|
90
|
+
|
|
91
|
+
**Steps:**
|
|
92
|
+
1. Sign up at https://neo4j.com/cloud/aura/
|
|
93
|
+
2. Click "Create Database"
|
|
94
|
+
3. Choose tier (Free for learning)
|
|
95
|
+
4. Select region (closest to your users)
|
|
96
|
+
5. Save connection credentials
|
|
97
|
+
6. Wait for provisioning (1-2 minutes)
|
|
98
|
+
|
|
99
|
+
### 2.2 Accessing AuraDB
|
|
100
|
+
|
|
101
|
+
**Option 1: Neo4j Browser (Web UI)**
|
|
102
|
+
- Click "Open" in AuraDB console
|
|
103
|
+
- Use web-based query interface
|
|
104
|
+
- Visual graph exploration
|
|
105
|
+
- Query history and favorites
|
|
106
|
+
|
|
107
|
+
**Option 2: Neo4j Desktop**
|
|
108
|
+
- Add remote connection
|
|
109
|
+
- Enter AuraDB connection details
|
|
110
|
+
- Use desktop tools and plugins
|
|
111
|
+
|
|
112
|
+
**Option 3: Application Drivers**
|
|
113
|
+
- Python, JavaScript, Java, .NET, Go
|
|
114
|
+
- Connect programmatically
|
|
115
|
+
- Production applications
|
|
116
|
+
|
|
117
|
+
### 2.3 First Query in AuraDB
|
|
118
|
+
|
|
119
|
+
```cypher
|
|
120
|
+
-- Test connection
|
|
121
|
+
RETURN "Hello Neo4j AuraDB!" AS message;
|
|
122
|
+
|
|
123
|
+
-- Check database info
|
|
124
|
+
CALL dbms.components() YIELD name, versions, edition;
|
|
125
|
+
|
|
126
|
+
-- View database statistics
|
|
127
|
+
CALL apoc.meta.stats() YIELD nodeCount, relCount, labelCount;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 3. Cypher Query Language Essentials
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 4. Performance Optimization Strategies
|
|
137
|
+
|
|
138
|
+
### 4.1 Indexing Best Practices
|
|
139
|
+
|
|
140
|
+
**Index Types:**
|
|
141
|
+
- **Unique Indexes:** Ensure property uniqueness across the graph
|
|
142
|
+
- **Non-Unique Indexes:** Allow multiple nodes with same property value
|
|
143
|
+
- **Composite Indexes:** Combine multiple properties for complex queries
|
|
144
|
+
- **Full-Text Indexes:** Enable advanced text search capabilities
|
|
145
|
+
- **Spatial Indexes:** Optimize geospatial queries
|
|
146
|
+
|
|
147
|
+
**When to Create Indexes:**
|
|
148
|
+
- Properties frequently used in WHERE clauses
|
|
149
|
+
- Properties used in MATCH patterns
|
|
150
|
+
- Properties used for lookups and searches
|
|
151
|
+
- Unique identifiers (email, user ID, etc.)
|
|
152
|
+
|
|
153
|
+
**Index Creation Examples:**
|
|
154
|
+
```cypher
|
|
155
|
+
-- Create simple index
|
|
156
|
+
CREATE INDEX FOR (n:Person) ON (n.name);
|
|
157
|
+
|
|
158
|
+
-- Create unique constraint (automatically creates index)
|
|
159
|
+
CREATE CONSTRAINT FOR (n:Person) REQUIRE n.email IS UNIQUE;
|
|
160
|
+
|
|
161
|
+
-- Create composite index
|
|
162
|
+
CREATE INDEX FOR (n:Person) ON (n.firstName, n.lastName);
|
|
163
|
+
|
|
164
|
+
-- Create full-text index
|
|
165
|
+
CALL db.index.fulltext.createNodeIndex(
|
|
166
|
+
"personFullText",
|
|
167
|
+
["Person"],
|
|
168
|
+
["name", "bio", "description"]
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
-- List all indexes
|
|
172
|
+
CALL db.indexes();
|
|
173
|
+
|
|
174
|
+
-- Drop index
|
|
175
|
+
DROP INDEX FOR (n:Person) ON (n.name);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Indexing Guidelines:**
|
|
179
|
+
- ✅ Index properties used in frequent queries
|
|
180
|
+
- ✅ Use composite indexes for multi-property queries
|
|
181
|
+
- ✅ Monitor index usage and performance
|
|
182
|
+
- ❌ Don't over-index (impacts write performance)
|
|
183
|
+
- ❌ Avoid indexing rarely-queried properties
|
|
184
|
+
- ⚠️ Balance read vs write performance
|
|
185
|
+
|
|
186
|
+
**Performance Impact:**
|
|
187
|
+
- Indexed queries: 10-1000x faster
|
|
188
|
+
- Write operations: Slightly slower with more indexes
|
|
189
|
+
- Storage: Indexes consume additional disk space
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
### 4.2 Query Optimization Techniques
|
|
194
|
+
|
|
195
|
+
**Use EXPLAIN and PROFILE:**
|
|
196
|
+
```cypher
|
|
197
|
+
-- View execution plan without running
|
|
198
|
+
EXPLAIN
|
|
199
|
+
MATCH (n:Person {name: "Alice"})
|
|
200
|
+
RETURN n;
|
|
201
|
+
|
|
202
|
+
-- Run query and see detailed metrics
|
|
203
|
+
PROFILE
|
|
204
|
+
MATCH (n:Person {name: "Alice"})
|
|
205
|
+
RETURN n;
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Optimization Strategies:**
|
|
209
|
+
|
|
210
|
+
1. **Specify Node Labels:**
|
|
211
|
+
```cypher
|
|
212
|
+
-- ❌ Slow: Scans all nodes
|
|
213
|
+
MATCH (n {name: "Alice"}) RETURN n;
|
|
214
|
+
|
|
215
|
+
-- ✅ Fast: Uses label index
|
|
216
|
+
MATCH (n:Person {name: "Alice"}) RETURN n;
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
2. **Limit Result Sets:**
|
|
220
|
+
```cypher
|
|
221
|
+
-- Always use LIMIT for large datasets
|
|
222
|
+
MATCH (n:Person)
|
|
223
|
+
RETURN n
|
|
224
|
+
ORDER BY n.created DESC
|
|
225
|
+
LIMIT 100;
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
3. **Use Parameters:**
|
|
229
|
+
```cypher
|
|
230
|
+
-- ✅ Allows query plan caching
|
|
231
|
+
MATCH (n:Person {name: $name})
|
|
232
|
+
RETURN n;
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
4. **Avoid Cartesian Products:**
|
|
236
|
+
```cypher
|
|
237
|
+
-- ❌ Creates cartesian product
|
|
238
|
+
MATCH (a:Person), (b:Company)
|
|
239
|
+
RETURN a, b;
|
|
240
|
+
|
|
241
|
+
-- ✅ Use relationships
|
|
242
|
+
MATCH (a:Person)-[:WORKS_AT]->(b:Company)
|
|
243
|
+
RETURN a, b;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
5. **Optimize Path Queries:**
|
|
247
|
+
```cypher
|
|
248
|
+
-- ❌ Unbounded (dangerous on large graphs)
|
|
249
|
+
MATCH p=(a)-[*]->(b) RETURN p;
|
|
250
|
+
|
|
251
|
+
-- ✅ Bounded depth
|
|
252
|
+
MATCH p=(a)-[*1..3]->(b) RETURN p;
|
|
253
|
+
|
|
254
|
+
-- ✅ Use shortestPath for efficiency
|
|
255
|
+
MATCH p=shortestPath((a)-[*]-(b)) RETURN p;
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Query Performance Checklist:**
|
|
259
|
+
- [ ] Node labels specified in MATCH clauses
|
|
260
|
+
- [ ] Indexes created on frequently queried properties
|
|
261
|
+
- [ ] LIMIT used on large result sets
|
|
262
|
+
- [ ] Parameters used instead of literals
|
|
263
|
+
- [ ] Path queries have depth limits
|
|
264
|
+
- [ ] Cartesian products avoided
|
|
265
|
+
- [ ] Query profiled and optimized
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
### 4.3 Memory and Configuration Tuning
|
|
270
|
+
|
|
271
|
+
**Key Configuration Parameters:**
|
|
272
|
+
|
|
273
|
+
```properties
|
|
274
|
+
# Memory Settings (neo4j.conf)
|
|
275
|
+
dbms.memory.heap.initial_size=2G
|
|
276
|
+
dbms.memory.heap.max_size=4G
|
|
277
|
+
dbms.memory.pagecache.size=4G
|
|
278
|
+
|
|
279
|
+
# Query Timeout
|
|
280
|
+
dbms.transaction.timeout=60s
|
|
281
|
+
|
|
282
|
+
# Connection Pool
|
|
283
|
+
dbms.connector.bolt.thread_pool_min_size=5
|
|
284
|
+
dbms.connector.bolt.thread_pool_max_size=400
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Memory Allocation Guidelines:**
|
|
288
|
+
- **Heap Memory:** 1-4GB for most applications
|
|
289
|
+
- **Page Cache:** As much as possible (stores graph data)
|
|
290
|
+
- **OS Memory:** Leave 1-2GB for operating system
|
|
291
|
+
|
|
292
|
+
**Rule of Thumb:**
|
|
293
|
+
- Page Cache ≈ Size of graph data on disk
|
|
294
|
+
- Heap ≈ 1-4GB (rarely needs more)
|
|
295
|
+
- Total RAM = Heap + Page Cache + OS (1-2GB)
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## 5. Advanced Neo4j Techniques
|
|
300
|
+
|
|
301
|
+
### 5.1 Full-Text Search
|
|
302
|
+
|
|
303
|
+
**Creating Full-Text Indexes:**
|
|
304
|
+
```cypher
|
|
305
|
+
-- Create full-text index on multiple properties
|
|
306
|
+
CALL db.index.fulltext.createNodeIndex(
|
|
307
|
+
"articleSearch",
|
|
308
|
+
["Article", "BlogPost"],
|
|
309
|
+
["title", "content", "summary"]
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
-- Query full-text index
|
|
313
|
+
CALL db.index.fulltext.queryNodes(
|
|
314
|
+
"articleSearch",
|
|
315
|
+
"graph database"
|
|
316
|
+
) YIELD node, score
|
|
317
|
+
RETURN node.title, score
|
|
318
|
+
ORDER BY score DESC
|
|
319
|
+
LIMIT 10;
|
|
320
|
+
|
|
321
|
+
-- Advanced search with operators
|
|
322
|
+
CALL db.index.fulltext.queryNodes(
|
|
323
|
+
"articleSearch",
|
|
324
|
+
"graph AND (database OR neo4j)"
|
|
325
|
+
) YIELD node, score
|
|
326
|
+
RETURN node;
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Full-Text Search Features:**
|
|
330
|
+
- Fuzzy matching
|
|
331
|
+
- Boolean operators (AND, OR, NOT)
|
|
332
|
+
- Phrase queries
|
|
333
|
+
- Wildcard searches
|
|
334
|
+
- Relevance scoring
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
### 5.2 Spatial Indexing and Geospatial Queries
|
|
339
|
+
|
|
340
|
+
**Creating Spatial Data:**
|
|
341
|
+
```cypher
|
|
342
|
+
-- Create nodes with point properties
|
|
343
|
+
CREATE (store:Store {
|
|
344
|
+
name: "Downtown Store",
|
|
345
|
+
location: point({latitude: 40.7128, longitude: -74.0060})
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
-- Create spatial index
|
|
349
|
+
CREATE INDEX FOR (n:Store) ON (n.location);
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Geospatial Queries:**
|
|
353
|
+
```cypher
|
|
354
|
+
-- Find stores within radius (meters)
|
|
355
|
+
MATCH (s:Store)
|
|
356
|
+
WHERE distance(
|
|
357
|
+
s.location,
|
|
358
|
+
point({latitude: 40.7128, longitude: -74.0060})
|
|
359
|
+
) < 5000
|
|
360
|
+
RETURN s.name,
|
|
361
|
+
distance(s.location, point({latitude: 40.7128, longitude: -74.0060})) AS distanceMeters
|
|
362
|
+
ORDER BY distanceMeters;
|
|
363
|
+
|
|
364
|
+
-- Find nearest stores
|
|
365
|
+
MATCH (s:Store)
|
|
366
|
+
WITH s, distance(
|
|
367
|
+
s.location,
|
|
368
|
+
point({latitude: 40.7128, longitude: -74.0060})
|
|
369
|
+
) AS dist
|
|
370
|
+
ORDER BY dist
|
|
371
|
+
LIMIT 5
|
|
372
|
+
RETURN s.name, dist;
|
|
373
|
+
|
|
374
|
+
-- Bounding box query
|
|
375
|
+
MATCH (s:Store)
|
|
376
|
+
WHERE s.location.latitude > 40.0
|
|
377
|
+
AND s.location.latitude < 41.0
|
|
378
|
+
AND s.location.longitude > -75.0
|
|
379
|
+
AND s.location.longitude < -73.0
|
|
380
|
+
RETURN s;
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
### 5.3 Graph Algorithms
|
|
386
|
+
|
|
387
|
+
**Common Graph Algorithms:**
|
|
388
|
+
|
|
389
|
+
1. **Shortest Path:**
|
|
390
|
+
```cypher
|
|
391
|
+
MATCH p=shortestPath(
|
|
392
|
+
(a:Person {name: "Alice"})-[:KNOWS*]-(b:Person {name: "Bob"})
|
|
393
|
+
)
|
|
394
|
+
RETURN p, length(p) AS pathLength;
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
2. **All Shortest Paths:**
|
|
398
|
+
```cypher
|
|
399
|
+
MATCH p=allShortestPaths(
|
|
400
|
+
(a:Person {name: "Alice"})-[:KNOWS*]-(b:Person {name: "Bob"})
|
|
401
|
+
)
|
|
402
|
+
RETURN p;
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
3. **PageRank (requires Graph Data Science library):**
|
|
406
|
+
```cypher
|
|
407
|
+
CALL gds.pageRank.stream('myGraph')
|
|
408
|
+
YIELD nodeId, score
|
|
409
|
+
RETURN gds.util.asNode(nodeId).name AS name, score
|
|
410
|
+
ORDER BY score DESC
|
|
411
|
+
LIMIT 10;
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
4. **Community Detection:**
|
|
415
|
+
```cypher
|
|
416
|
+
CALL gds.louvain.stream('myGraph')
|
|
417
|
+
YIELD nodeId, communityId
|
|
418
|
+
RETURN communityId, collect(gds.util.asNode(nodeId).name) AS members;
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 6. Data Modeling Best Practices
|
|
424
|
+
|
|
425
|
+
### 6.1 Graph Modeling Principles
|
|
426
|
+
|
|
427
|
+
**Key Principles:**
|
|
428
|
+
1. **Model relationships explicitly** - Don't hide relationships in properties
|
|
429
|
+
2. **Use meaningful relationship types** - Be specific (WORKS_AT vs RELATED_TO)
|
|
430
|
+
3. **Denormalize when beneficial** - Duplicate data for query performance
|
|
431
|
+
4. **Model for queries** - Design based on how you'll query the data
|
|
432
|
+
5. **Use labels for categorization** - Multiple labels are fine
|
|
433
|
+
|
|
434
|
+
**Good vs Bad Modeling:**
|
|
435
|
+
|
|
436
|
+
❌ **Bad: Relationships as Properties**
|
|
437
|
+
```cypher
|
|
438
|
+
CREATE (p:Person {
|
|
439
|
+
name: "Alice",
|
|
440
|
+
friendIds: ["123", "456", "789"]
|
|
441
|
+
});
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
✅ **Good: Explicit Relationships**
|
|
445
|
+
```cypher
|
|
446
|
+
CREATE (alice:Person {name: "Alice"})
|
|
447
|
+
CREATE (bob:Person {name: "Bob"})
|
|
448
|
+
CREATE (alice)-[:FRIENDS_WITH {since: 2020}]->(bob);
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
### 6.2 Common Graph Patterns
|
|
454
|
+
|
|
455
|
+
**1. Hierarchical Structures:**
|
|
456
|
+
```cypher
|
|
457
|
+
-- Organization hierarchy
|
|
458
|
+
CREATE (ceo:Person:Executive {name: "CEO"})
|
|
459
|
+
CREATE (vp1:Person:Executive {name: "VP Sales"})
|
|
460
|
+
CREATE (vp2:Person:Executive {name: "VP Engineering"})
|
|
461
|
+
CREATE (mgr1:Person:Manager {name: "Sales Manager"})
|
|
462
|
+
CREATE (emp1:Person:Employee {name: "Sales Rep"})
|
|
463
|
+
|
|
464
|
+
CREATE (ceo)-[:MANAGES]->(vp1)
|
|
465
|
+
CREATE (ceo)-[:MANAGES]->(vp2)
|
|
466
|
+
CREATE (vp1)-[:MANAGES]->(mgr1)
|
|
467
|
+
CREATE (mgr1)-[:MANAGES]->(emp1);
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
**2. Time-Based Relationships:**
|
|
471
|
+
```cypher
|
|
472
|
+
-- Track relationship history
|
|
473
|
+
CREATE (alice:Person {name: "Alice"})
|
|
474
|
+
CREATE (company1:Company {name: "Acme Corp"})
|
|
475
|
+
CREATE (company2:Company {name: "Tech Inc"})
|
|
476
|
+
|
|
477
|
+
CREATE (alice)-[:WORKED_AT {
|
|
478
|
+
from: date("2018-01-01"),
|
|
479
|
+
to: date("2020-12-31"),
|
|
480
|
+
position: "Developer"
|
|
481
|
+
}]->(company1)
|
|
482
|
+
|
|
483
|
+
CREATE (alice)-[:WORKS_AT {
|
|
484
|
+
from: date("2021-01-01"),
|
|
485
|
+
position: "Senior Developer"
|
|
486
|
+
}]->(company2);
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
**3. Recommendation Patterns:**
|
|
490
|
+
```cypher
|
|
491
|
+
-- Collaborative filtering
|
|
492
|
+
MATCH (user:User {id: $userId})-[:PURCHASED]->(product:Product)
|
|
493
|
+
<-[:PURCHASED]-(other:User)-[:PURCHASED]->(recommendation:Product)
|
|
494
|
+
WHERE NOT (user)-[:PURCHASED]->(recommendation)
|
|
495
|
+
RETURN recommendation.name, COUNT(*) AS score
|
|
496
|
+
ORDER BY score DESC
|
|
497
|
+
LIMIT 10;
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
**4. Access Control Patterns:**
|
|
501
|
+
```cypher
|
|
502
|
+
-- Role-based access
|
|
503
|
+
CREATE (user:User {name: "Alice"})
|
|
504
|
+
CREATE (role:Role {name: "Admin"})
|
|
505
|
+
CREATE (resource:Resource {name: "Database"})
|
|
506
|
+
CREATE (permission:Permission {name: "READ"})
|
|
507
|
+
|
|
508
|
+
CREATE (user)-[:HAS_ROLE]->(role)
|
|
509
|
+
CREATE (role)-[:HAS_PERMISSION]->(permission)
|
|
510
|
+
CREATE (permission)-[:ON_RESOURCE]->(resource);
|
|
511
|
+
|
|
512
|
+
-- Check access
|
|
513
|
+
MATCH (user:User {name: "Alice"})-[:HAS_ROLE]->(:Role)
|
|
514
|
+
-[:HAS_PERMISSION]->(p:Permission {name: "READ"})
|
|
515
|
+
-[:ON_RESOURCE]->(r:Resource {name: "Database"})
|
|
516
|
+
RETURN COUNT(p) > 0 AS hasAccess;
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## 7. Common Use Cases
|
|
522
|
+
|
|
523
|
+
### 7.1 Social Networks
|
|
524
|
+
- Friend recommendations
|
|
525
|
+
- Mutual connections
|
|
526
|
+
- Influence analysis
|
|
527
|
+
- Community detection
|
|
528
|
+
- Content recommendations
|
|
529
|
+
|
|
530
|
+
### 7.2 Fraud Detection
|
|
531
|
+
- Pattern recognition
|
|
532
|
+
- Anomaly detection
|
|
533
|
+
- Network analysis
|
|
534
|
+
- Transaction tracking
|
|
535
|
+
- Risk scoring
|
|
536
|
+
|
|
537
|
+
### 7.3 Knowledge Graphs
|
|
538
|
+
- Entity relationships
|
|
539
|
+
- Semantic search
|
|
540
|
+
- Question answering
|
|
541
|
+
- Data integration
|
|
542
|
+
- Ontology management
|
|
543
|
+
|
|
544
|
+
### 7.4 Recommendation Engines
|
|
545
|
+
- Collaborative filtering
|
|
546
|
+
- Content-based recommendations
|
|
547
|
+
- Hybrid approaches
|
|
548
|
+
- Real-time personalization
|
|
549
|
+
|
|
550
|
+
### 7.5 Network and IT Operations
|
|
551
|
+
- Dependency mapping
|
|
552
|
+
- Impact analysis
|
|
553
|
+
- Root cause analysis
|
|
554
|
+
- Capacity planning
|
|
555
|
+
- Service topology
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
## 8. Integration and Drivers
|
|
560
|
+
|
|
561
|
+
### 8.1 Official Drivers for AuraDB
|
|
562
|
+
|
|
563
|
+
**Python (neo4j driver):**
|
|
564
|
+
```python
|
|
565
|
+
from neo4j import GraphDatabase
|
|
566
|
+
|
|
567
|
+
class AuraDBConnection:
|
|
568
|
+
def __init__(self, uri, user, password):
|
|
569
|
+
# Use neo4j+s:// for AuraDB secure connection
|
|
570
|
+
self.driver = GraphDatabase.driver(
|
|
571
|
+
uri,
|
|
572
|
+
auth=(user, password),
|
|
573
|
+
encrypted=True # Required for AuraDB
|
|
574
|
+
)
|
|
575
|
+
|
|
576
|
+
def close(self):
|
|
577
|
+
self.driver.close()
|
|
578
|
+
|
|
579
|
+
def query(self, cypher, parameters=None):
|
|
580
|
+
with self.driver.session() as session:
|
|
581
|
+
result = session.run(cypher, parameters)
|
|
582
|
+
return [record.data() for record in result]
|
|
583
|
+
|
|
584
|
+
# Usage with AuraDB
|
|
585
|
+
conn = AuraDBConnection(
|
|
586
|
+
"neo4j+s://xxxxx.databases.neo4j.io",
|
|
587
|
+
"neo4j",
|
|
588
|
+
"your-password"
|
|
589
|
+
)
|
|
590
|
+
results = conn.query("MATCH (n:Person) RETURN n.name LIMIT 10")
|
|
591
|
+
conn.close()
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
**JavaScript (neo4j-driver):**
|
|
595
|
+
```javascript
|
|
596
|
+
const neo4j = require('neo4j-driver');
|
|
597
|
+
|
|
598
|
+
// AuraDB connection with secure protocol
|
|
599
|
+
const driver = neo4j.driver(
|
|
600
|
+
'neo4j+s://xxxxx.databases.neo4j.io',
|
|
601
|
+
neo4j.auth.basic('neo4j', 'your-password'),
|
|
602
|
+
{
|
|
603
|
+
encrypted: 'ENCRYPTION_ON',
|
|
604
|
+
trust: 'TRUST_SYSTEM_CA_SIGNED_CERTIFICATES'
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
|
|
608
|
+
const session = driver.session({ database: 'neo4j' });
|
|
609
|
+
|
|
610
|
+
async function runQuery() {
|
|
611
|
+
try {
|
|
612
|
+
const result = await session.run(
|
|
613
|
+
'MATCH (n:Person) RETURN n.name LIMIT 10'
|
|
614
|
+
);
|
|
615
|
+
|
|
616
|
+
result.records.forEach(record => {
|
|
617
|
+
console.log(record.get('n.name'));
|
|
618
|
+
});
|
|
619
|
+
} finally {
|
|
620
|
+
await session.close();
|
|
621
|
+
await driver.close();
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
runQuery();
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
**Node.js with Environment Variables:**
|
|
629
|
+
```javascript
|
|
630
|
+
// .env file
|
|
631
|
+
NEO4J_URI=neo4j+s://xxxxx.databases.neo4j.io
|
|
632
|
+
NEO4J_USER=neo4j
|
|
633
|
+
NEO4J_PASSWORD=your-password
|
|
634
|
+
|
|
635
|
+
// app.js
|
|
636
|
+
require('dotenv').config();
|
|
637
|
+
const neo4j = require('neo4j-driver');
|
|
638
|
+
|
|
639
|
+
const driver = neo4j.driver(
|
|
640
|
+
process.env.NEO4J_URI,
|
|
641
|
+
neo4j.auth.basic(
|
|
642
|
+
process.env.NEO4J_USER,
|
|
643
|
+
process.env.NEO4J_PASSWORD
|
|
644
|
+
)
|
|
645
|
+
);
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
**Java:**
|
|
649
|
+
```java
|
|
650
|
+
import org.neo4j.driver.*;
|
|
651
|
+
|
|
652
|
+
public class AuraDBExample {
|
|
653
|
+
public static void main(String[] args) {
|
|
654
|
+
// AuraDB connection
|
|
655
|
+
Driver driver = GraphDatabase.driver(
|
|
656
|
+
"neo4j+s://xxxxx.databases.neo4j.io",
|
|
657
|
+
AuthTokens.basic("neo4j", "your-password"),
|
|
658
|
+
Config.builder()
|
|
659
|
+
.withEncryption()
|
|
660
|
+
.build()
|
|
661
|
+
);
|
|
662
|
+
|
|
663
|
+
try (Session session = driver.session()) {
|
|
664
|
+
Result result = session.run(
|
|
665
|
+
"MATCH (n:Person) RETURN n.name LIMIT 10"
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
while (result.hasNext()) {
|
|
669
|
+
Record record = result.next();
|
|
670
|
+
System.out.println(record.get("n.name").asString());
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
driver.close();
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
**Connection Best Practices for AuraDB:**
|
|
680
|
+
- ✅ Always use `neo4j+s://` protocol
|
|
681
|
+
- ✅ Enable encryption in driver config
|
|
682
|
+
- ✅ Store credentials in environment variables
|
|
683
|
+
- ✅ Use connection pooling (built-in)
|
|
684
|
+
- ✅ Implement retry logic for transient errors
|
|
685
|
+
- ✅ Close sessions and drivers properly
|
|
686
|
+
- ❌ Don't hardcode credentials
|
|
687
|
+
- ❌ Don't disable encryption
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
## 9. Neo4j AuraDB Cloud Operations
|
|
692
|
+
|
|
693
|
+
### 9.1 AuraDB-Specific Features
|
|
694
|
+
|
|
695
|
+
**Automatic Backups:**
|
|
696
|
+
- Daily automated backups
|
|
697
|
+
- 7-day retention (Professional)
|
|
698
|
+
- 30-day retention (Enterprise)
|
|
699
|
+
- Point-in-time recovery
|
|
700
|
+
- No manual backup needed
|
|
701
|
+
|
|
702
|
+
**Monitoring and Metrics:**
|
|
703
|
+
```cypher
|
|
704
|
+
-- Check database size
|
|
705
|
+
CALL apoc.meta.stats()
|
|
706
|
+
YIELD nodeCount, relCount, labelCount, propertyKeyCount
|
|
707
|
+
RETURN nodeCount, relCount, labelCount, propertyKeyCount;
|
|
708
|
+
|
|
709
|
+
-- Monitor query performance
|
|
710
|
+
CALL dbms.listQueries()
|
|
711
|
+
YIELD queryId, query, elapsedTimeMillis, status
|
|
712
|
+
WHERE elapsedTimeMillis > 1000
|
|
713
|
+
RETURN queryId, query, elapsedTimeMillis
|
|
714
|
+
ORDER BY elapsedTimeMillis DESC;
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
**Scaling in AuraDB:**
|
|
718
|
+
- **Vertical Scaling:** Upgrade instance size in console
|
|
719
|
+
- **Storage:** Automatically expands as needed
|
|
720
|
+
- **Compute:** Scale CPU/memory independently
|
|
721
|
+
- **No Downtime:** Most scaling operations are online
|
|
722
|
+
|
|
723
|
+
**AuraDB Console Features:**
|
|
724
|
+
- Real-time metrics dashboard
|
|
725
|
+
- Query performance monitoring
|
|
726
|
+
- Connection management
|
|
727
|
+
- Backup and restore
|
|
728
|
+
- User management
|
|
729
|
+
- Billing and usage
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
733
|
+
### 9.2 AuraDB Security Best Practices
|
|
734
|
+
|
|
735
|
+
**Authentication:**
|
|
736
|
+
```cypher
|
|
737
|
+
-- Change default password immediately
|
|
738
|
+
ALTER CURRENT USER SET PASSWORD FROM 'old-password' TO 'new-strong-password';
|
|
739
|
+
|
|
740
|
+
-- Create additional users (Professional/Enterprise)
|
|
741
|
+
CREATE USER analyst SET PASSWORD 'secure-password' CHANGE NOT REQUIRED;
|
|
742
|
+
GRANT ROLE reader TO analyst;
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
**Network Security:**
|
|
746
|
+
- All connections encrypted by default (TLS 1.2+)
|
|
747
|
+
- IP allowlisting available (Enterprise)
|
|
748
|
+
- VPC peering supported (Enterprise)
|
|
749
|
+
- No public internet exposure option
|
|
750
|
+
|
|
751
|
+
**Access Control:**
|
|
752
|
+
```cypher
|
|
753
|
+
-- Role-based access control
|
|
754
|
+
CREATE ROLE dataScientist;
|
|
755
|
+
GRANT MATCH {*} ON GRAPH neo4j TO dataScientist;
|
|
756
|
+
GRANT READ {*} ON GRAPH neo4j TO dataScientist;
|
|
757
|
+
|
|
758
|
+
-- Grant role to user
|
|
759
|
+
GRANT ROLE dataScientist TO analyst;
|
|
760
|
+
|
|
761
|
+
-- Revoke access
|
|
762
|
+
REVOKE ROLE dataScientist FROM analyst;
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
**Security Checklist for AuraDB:**
|
|
766
|
+
- [ ] Changed default password
|
|
767
|
+
- [ ] Using strong, unique passwords
|
|
768
|
+
- [ ] Credentials stored in secrets manager
|
|
769
|
+
- [ ] Least privilege access implemented
|
|
770
|
+
- [ ] Regular access audits
|
|
771
|
+
- [ ] Monitor connection logs
|
|
772
|
+
- [ ] Enable IP allowlisting (if available)
|
|
773
|
+
- [ ] Use environment variables for credentials
|
|
774
|
+
|
|
775
|
+
---
|
|
776
|
+
|
|
777
|
+
### 9.3 Cost Optimization for AuraDB
|
|
778
|
+
|
|
779
|
+
**Strategies to Reduce Costs:**
|
|
780
|
+
|
|
781
|
+
1. **Right-Size Your Instance:**
|
|
782
|
+
- Start with smaller instance
|
|
783
|
+
- Monitor usage metrics
|
|
784
|
+
- Scale up only when needed
|
|
785
|
+
|
|
786
|
+
2. **Optimize Queries:**
|
|
787
|
+
- Use indexes effectively
|
|
788
|
+
- Limit result sets
|
|
789
|
+
- Avoid expensive operations
|
|
790
|
+
- Profile and optimize slow queries
|
|
791
|
+
|
|
792
|
+
3. **Data Management:**
|
|
793
|
+
- Archive old data
|
|
794
|
+
- Remove unused nodes/relationships
|
|
795
|
+
- Implement data retention policies
|
|
796
|
+
|
|
797
|
+
4. **Development vs Production:**
|
|
798
|
+
- Use AuraDB Free for development
|
|
799
|
+
- Separate dev/staging/prod instances
|
|
800
|
+
- Pause non-production instances when not in use
|
|
801
|
+
|
|
802
|
+
**Monitoring Costs:**
|
|
803
|
+
```cypher
|
|
804
|
+
-- Check database size (impacts storage costs)
|
|
805
|
+
CALL apoc.meta.stats() YIELD nodeCount, relCount
|
|
806
|
+
RETURN nodeCount, relCount,
|
|
807
|
+
(nodeCount + relCount) AS totalObjects;
|
|
808
|
+
|
|
809
|
+
-- Identify large nodes (potential optimization)
|
|
810
|
+
MATCH (n)
|
|
811
|
+
WITH n, size(keys(n)) AS propCount
|
|
812
|
+
WHERE propCount > 20
|
|
813
|
+
RETURN labels(n), propCount, count(*) AS nodeCount
|
|
814
|
+
ORDER BY propCount DESC
|
|
815
|
+
LIMIT 10;
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
---
|
|
819
|
+
|
|
820
|
+
## 10. AuraDB vs Self-Hosted Neo4j
|
|
821
|
+
|
|
822
|
+
### Comparison Table
|
|
823
|
+
|
|
824
|
+
| Feature | AuraDB Cloud | Self-Hosted |
|
|
825
|
+
|---------|--------------|-------------|
|
|
826
|
+
| **Setup Time** | Minutes | Hours/Days |
|
|
827
|
+
| **Management** | Fully managed | Manual |
|
|
828
|
+
| **Scaling** | Automatic | Manual |
|
|
829
|
+
| **Backups** | Automatic | Manual setup |
|
|
830
|
+
| **Security** | Built-in | Configure yourself |
|
|
831
|
+
| **Updates** | Automatic | Manual |
|
|
832
|
+
| **High Availability** | Built-in | Configure clustering |
|
|
833
|
+
| **Cost** | Pay-as-you-go | Infrastructure + ops |
|
|
834
|
+
| **Best For** | Most use cases | Specific requirements |
|
|
835
|
+
|
|
836
|
+
**When to Use AuraDB:**
|
|
837
|
+
- ✅ Fast time to market
|
|
838
|
+
- ✅ Focus on application, not infrastructure
|
|
839
|
+
- ✅ Variable workloads
|
|
840
|
+
- ✅ Global deployment needed
|
|
841
|
+
- ✅ Limited DevOps resources
|
|
842
|
+
|
|
843
|
+
**When to Self-Host:**
|
|
844
|
+
- ✅ Strict data residency requirements
|
|
845
|
+
- ✅ Existing infrastructure investment
|
|
846
|
+
- ✅ Very specific performance needs
|
|
847
|
+
- ✅ Cost optimization at massive scale
|
|
848
|
+
- ✅ Air-gapped environments
|
|
849
|
+
|
|
850
|
+
---
|
|
851
|
+
|
|
852
|
+
## 10. Security Best Practices
|
|
853
|
+
|
|
854
|
+
### 10.1 Authentication and Authorization
|
|
855
|
+
|
|
856
|
+
**User Management:**
|
|
857
|
+
```cypher
|
|
858
|
+
-- Create user
|
|
859
|
+
CREATE USER alice SET PASSWORD 'securePassword' CHANGE REQUIRED;
|
|
860
|
+
|
|
861
|
+
-- Grant roles
|
|
862
|
+
GRANT ROLE reader TO alice;
|
|
863
|
+
|
|
864
|
+
-- Custom role with specific permissions
|
|
865
|
+
CREATE ROLE dataAnalyst;
|
|
866
|
+
GRANT MATCH {*} ON GRAPH neo4j TO dataAnalyst;
|
|
867
|
+
GRANT READ {*} ON GRAPH neo4j TO dataAnalyst;
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
**Security Checklist:**
|
|
871
|
+
- [ ] Change default password immediately
|
|
872
|
+
- [ ] Use strong passwords
|
|
873
|
+
- [ ] Implement role-based access control
|
|
874
|
+
- [ ] Enable SSL/TLS for connections
|
|
875
|
+
- [ ] Restrict network access
|
|
876
|
+
- [ ] Regular security audits
|
|
877
|
+
- [ ] Monitor access logs
|
|
878
|
+
- [ ] Keep Neo4j updated
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
|
+
## 11. Common Pitfalls and Solutions
|
|
883
|
+
|
|
884
|
+
### 11.1 Performance Issues
|
|
885
|
+
|
|
886
|
+
**Problem:** Slow queries
|
|
887
|
+
**Solutions:**
|
|
888
|
+
- Add indexes on frequently queried properties
|
|
889
|
+
- Use PROFILE to identify bottlenecks
|
|
890
|
+
- Limit path query depth
|
|
891
|
+
- Specify node labels in MATCH clauses
|
|
892
|
+
- Avoid cartesian products
|
|
893
|
+
|
|
894
|
+
**Problem:** Out of memory errors
|
|
895
|
+
**Solutions:**
|
|
896
|
+
- Increase page cache size
|
|
897
|
+
- Use LIMIT on large result sets
|
|
898
|
+
- Process data in batches
|
|
899
|
+
- Optimize query patterns
|
|
900
|
+
- Add more RAM
|
|
901
|
+
|
|
902
|
+
---
|
|
903
|
+
|
|
904
|
+
### 11.2 Data Modeling Issues
|
|
905
|
+
|
|
906
|
+
**Problem:** Relationships as properties
|
|
907
|
+
**Solution:** Model relationships explicitly
|
|
908
|
+
|
|
909
|
+
**Problem:** Over-connected nodes (super nodes)
|
|
910
|
+
**Solution:**
|
|
911
|
+
- Use intermediate nodes
|
|
912
|
+
- Implement time-based partitioning
|
|
913
|
+
- Consider alternative modeling
|
|
914
|
+
|
|
915
|
+
**Problem:** Unclear relationship types
|
|
916
|
+
**Solution:** Use specific, meaningful relationship names
|
|
917
|
+
|
|
918
|
+
---
|
|
919
|
+
|
|
920
|
+
## 12. Learning Resources
|
|
921
|
+
|
|
922
|
+
### 12.1 Official Resources
|
|
923
|
+
- **Neo4j Documentation:** https://neo4j.com/docs/
|
|
924
|
+
- **GraphAcademy:** Free online courses and certifications
|
|
925
|
+
- **Neo4j Community Forum:** Active community support
|
|
926
|
+
- **Neo4j Blog:** Latest updates and best practices
|
|
927
|
+
|
|
928
|
+
### 12.2 Practice Exercises
|
|
929
|
+
|
|
930
|
+
**Beginner:**
|
|
931
|
+
1. Create a simple social network
|
|
932
|
+
2. Model a product catalog
|
|
933
|
+
3. Build a movie recommendation system
|
|
934
|
+
|
|
935
|
+
**Intermediate:**
|
|
936
|
+
4. Implement access control system
|
|
937
|
+
5. Create fraud detection patterns
|
|
938
|
+
6. Build knowledge graph
|
|
939
|
+
|
|
940
|
+
**Advanced:**
|
|
941
|
+
7. Optimize large-scale queries
|
|
942
|
+
8. Implement custom graph algorithms
|
|
943
|
+
9. Design multi-tenant architecture
|
|
944
|
+
|
|
945
|
+
---
|
|
946
|
+
|
|
947
|
+
## 13. Quick Reference Cheat Sheet
|
|
948
|
+
|
|
949
|
+
### Essential Cypher Commands
|
|
950
|
+
|
|
951
|
+
```cypher
|
|
952
|
+
-- CREATE
|
|
953
|
+
CREATE (n:Label {property: "value"})
|
|
954
|
+
CREATE (a)-[:RELATIONSHIP]->(b)
|
|
955
|
+
|
|
956
|
+
-- MATCH
|
|
957
|
+
MATCH (n:Label) RETURN n
|
|
958
|
+
MATCH (a)-[r:REL]->(b) RETURN a, r, b
|
|
959
|
+
|
|
960
|
+
-- WHERE
|
|
961
|
+
MATCH (n:Person) WHERE n.age > 30 RETURN n
|
|
962
|
+
|
|
963
|
+
-- SET
|
|
964
|
+
MATCH (n:Person {name: "Alice"}) SET n.age = 31
|
|
965
|
+
|
|
966
|
+
-- DELETE
|
|
967
|
+
MATCH (n:Person {name: "Alice"}) DELETE n
|
|
968
|
+
MATCH (n:Person {name: "Alice"}) DETACH DELETE n
|
|
969
|
+
|
|
970
|
+
-- MERGE (create if not exists)
|
|
971
|
+
MERGE (n:Person {email: "alice@example.com"})
|
|
972
|
+
ON CREATE SET n.created = timestamp()
|
|
973
|
+
ON MATCH SET n.lastSeen = timestamp()
|
|
974
|
+
|
|
975
|
+
-- AGGREGATION
|
|
976
|
+
MATCH (n:Person) RETURN COUNT(n)
|
|
977
|
+
MATCH (n:Person) RETURN AVG(n.age)
|
|
978
|
+
MATCH (n:Person) RETURN COLLECT(n.name)
|
|
979
|
+
|
|
980
|
+
-- ORDERING & LIMITING
|
|
981
|
+
MATCH (n:Person) RETURN n ORDER BY n.age DESC LIMIT 10
|
|
982
|
+
|
|
983
|
+
-- PATH QUERIES
|
|
984
|
+
MATCH p=(a)-[*1..3]->(b) RETURN p
|
|
985
|
+
MATCH p=shortestPath((a)-[*]-(b)) RETURN p
|
|
986
|
+
```
|
|
987
|
+
|
|
988
|
+
---
|
|
989
|
+
|
|
990
|
+
## 14. Key Takeaways
|
|
991
|
+
|
|
992
|
+
### For Developers
|
|
993
|
+
1. **Think in Graphs:** Model relationships explicitly
|
|
994
|
+
2. **Index Strategically:** Index frequently queried properties
|
|
995
|
+
3. **Profile Queries:** Use EXPLAIN and PROFILE for optimization
|
|
996
|
+
4. **Limit Depth:** Always bound path queries
|
|
997
|
+
5. **Use Parameters:** Enable query plan caching
|
|
998
|
+
|
|
999
|
+
### For Architects
|
|
1000
|
+
1. **Model for Queries:** Design based on access patterns
|
|
1001
|
+
2. **Plan for Scale:** Consider indexing and partitioning early
|
|
1002
|
+
3. **Security First:** Implement RBAC from the start
|
|
1003
|
+
4. **Monitor Performance:** Track query performance metrics
|
|
1004
|
+
5. **Backup Strategy:** Implement automated backups
|
|
1005
|
+
|
|
1006
|
+
### For Data Scientists
|
|
1007
|
+
1. **Leverage Algorithms:** Use Graph Data Science library
|
|
1008
|
+
2. **Explore Patterns:** Graph queries reveal hidden insights
|
|
1009
|
+
3. **Visualize Results:** Use Neo4j Browser for exploration
|
|
1010
|
+
4. **Iterate Quickly:** Graph model is flexible
|
|
1011
|
+
5. **Combine Approaches:** Mix graph with traditional analytics
|
|
1012
|
+
|
|
1013
|
+
---
|
|
1014
|
+
|
|
1015
|
+
## 15. Next Steps
|
|
1016
|
+
|
|
1017
|
+
### Immediate Actions
|
|
1018
|
+
1. Install Neo4j Desktop or create Aura account
|
|
1019
|
+
2. Complete GraphAcademy beginner course
|
|
1020
|
+
3. Practice with sample datasets
|
|
1021
|
+
4. Build a small project
|
|
1022
|
+
5. Join Neo4j community forum
|
|
1023
|
+
|
|
1024
|
+
### Short-Term Goals (1-3 Months)
|
|
1025
|
+
1. Master Cypher query language
|
|
1026
|
+
2. Understand indexing strategies
|
|
1027
|
+
3. Learn data modeling patterns
|
|
1028
|
+
4. Explore Graph Data Science library
|
|
1029
|
+
5. Build production-ready application
|
|
1030
|
+
|
|
1031
|
+
### Long-Term Goals (3-12 Months)
|
|
1032
|
+
1. Achieve Neo4j certification
|
|
1033
|
+
2. Contribute to community
|
|
1034
|
+
3. Optimize large-scale deployments
|
|
1035
|
+
4. Implement advanced algorithms
|
|
1036
|
+
5. Mentor others in graph databases
|
|
1037
|
+
|
|
1038
|
+
---
|
|
1039
|
+
|
|
1040
|
+
## Related Knowledge Base Entries
|
|
1041
|
+
- See: `.agent/knowledge-base/architecture/` for architecture patterns
|
|
1042
|
+
- See: `tools/neo4j/README.md` for Neo4j tools documentation
|
|
1043
|
+
- See: `docs/architecture/NEO4J-LEARNING-QUERIES.md` for query examples
|
|
1044
|
+
- See: `docs/architecture/BRAIN.md` for brain architecture integration
|
|
1045
|
+
- See: `docs/sprints/SPRINT-NEO4J-BRAIN.md` for Neo4j brain sprint details
|
|
1046
|
+
|
|
1047
|
+
## Integration with Agentic SDLC
|
|
1048
|
+
|
|
1049
|
+
### Auto-Sync Knowledge Base to Neo4j
|
|
1050
|
+
|
|
1051
|
+
**Location:** `tools/neo4j/sync_skills_to_neo4j.py`
|
|
1052
|
+
|
|
1053
|
+
Automatically sync knowledge base entries to Neo4j Cloud:
|
|
1054
|
+
|
|
1055
|
+
```bash
|
|
1056
|
+
# Sync all KB entries
|
|
1057
|
+
python tools/neo4j/sync_skills_to_neo4j.py
|
|
1058
|
+
|
|
1059
|
+
# Dry run (preview without syncing)
|
|
1060
|
+
python tools/neo4j/sync_skills_to_neo4j.py --dry-run
|
|
1061
|
+
|
|
1062
|
+
# Show statistics only
|
|
1063
|
+
python tools/neo4j/sync_skills_to_neo4j.py --stats-only
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
### Query Skills from Neo4j
|
|
1067
|
+
|
|
1068
|
+
**Location:** `tools/neo4j/query_skills_neo4j.py`
|
|
1069
|
+
|
|
1070
|
+
Query and explore the skills knowledge graph:
|
|
1071
|
+
|
|
1072
|
+
```bash
|
|
1073
|
+
# List all skills
|
|
1074
|
+
python tools/neo4j/query_skills_neo4j.py --all-skills
|
|
1075
|
+
|
|
1076
|
+
# Skills for specific technology
|
|
1077
|
+
python tools/neo4j/query_skills_neo4j.py --tech "Neo4j"
|
|
1078
|
+
|
|
1079
|
+
# Related skills
|
|
1080
|
+
python tools/neo4j/query_skills_neo4j.py --skill "Graph Databases"
|
|
1081
|
+
|
|
1082
|
+
# Learning path for category
|
|
1083
|
+
python tools/neo4j/query_skills_neo4j.py --learning-path "Architecture"
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
### Automated Workflow
|
|
1087
|
+
|
|
1088
|
+
**Hook Configuration:** `.kiro/hooks/auto-research-hook.json`
|
|
1089
|
+
|
|
1090
|
+
Set up automatic Neo4j sync when KB entries are created:
|
|
1091
|
+
|
|
1092
|
+
```json
|
|
1093
|
+
{
|
|
1094
|
+
"name": "kb-auto-sync-neo4j",
|
|
1095
|
+
"trigger": "on_file_save",
|
|
1096
|
+
"condition": "file_path contains '.agent/knowledge-base/KB-'",
|
|
1097
|
+
"action": {
|
|
1098
|
+
"type": "command",
|
|
1099
|
+
"command": "python tools/neo4j/sync_skills_to_neo4j.py"
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
```
|
|
1103
|
+
|
|
1104
|
+
### Research Agent Integration
|
|
1105
|
+
|
|
1106
|
+
**Location:** `tools/research/research_agent.py`
|
|
1107
|
+
|
|
1108
|
+
The research agent can query Neo4j for related knowledge:
|
|
1109
|
+
|
|
1110
|
+
```bash
|
|
1111
|
+
# Research with Neo4j integration
|
|
1112
|
+
python tools/research/research_agent.py --task "Neo4j optimization" --type architecture
|
|
1113
|
+
```
|
|
1114
|
+
|
|
1115
|
+
The agent will:
|
|
1116
|
+
1. Search file-based knowledge base
|
|
1117
|
+
2. Query Neo4j knowledge graph (if configured)
|
|
1118
|
+
3. Find related technologies and skills
|
|
1119
|
+
4. Generate comprehensive research report
|
|
1120
|
+
|
|
1121
|
+
**Configuration:** Add Neo4j credentials to `.env`:
|
|
1122
|
+
|
|
1123
|
+
```bash
|
|
1124
|
+
NEO4J_URI=neo4j+s://xxxxx.databases.neo4j.io
|
|
1125
|
+
NEO4J_USERNAME=neo4j
|
|
1126
|
+
NEO4J_PASSWORD=your-password
|
|
1127
|
+
NEO4J_DATABASE=neo4j
|
|
1128
|
+
```
|
|
1129
|
+
|
|
1130
|
+
---
|
|
1131
|
+
|
|
1132
|
+
## References and Sources
|
|
1133
|
+
|
|
1134
|
+
**Research Sources:**
|
|
1135
|
+
- [Neo4j Official Documentation](https://neo4j.com/docs/)
|
|
1136
|
+
- [House of Graphs - Neo4j Indexing](https://houseofgraphs.com/blog/neo4j-indexing/)
|
|
1137
|
+
- [Shep Bryan's Cypher Cheatsheet](https://www.shepbryan.com/blog/neo4j-cypher-cheatsheet)
|
|
1138
|
+
- Neo4j GraphAcademy courses
|
|
1139
|
+
- Neo4j community best practices
|
|
1140
|
+
|
|
1141
|
+
**Content was rephrased for compliance with licensing restrictions**
|
|
1142
|
+
|
|
1143
|
+
---
|
|
1144
|
+
|
|
1145
|
+
#neo4j #graph-database #cypher #architecture #knowledge-base #database #performance-optimization
|
|
1146
|
+
|