@mytechtoday/augment-extensions 0.2.0 → 0.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/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
- package/augment-extensions/workflows/beads-integration/README.md +143 -0
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
- package/augment-extensions/workflows/beads-integration/module.json +75 -0
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/writing-standards/screenplay/README.md +300 -0
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +168 -10
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts +19 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +478 -63
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/types/gui.d.ts +62 -0
- package/cli/dist/types/gui.d.ts.map +1 -0
- package/cli/dist/types/gui.js +30 -0
- package/cli/dist/types/gui.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/gui-helpers.d.ts +23 -0
- package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
- package/cli/dist/utils/gui-helpers.js +159 -0
- package/cli/dist/utils/gui-helpers.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +232 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +900 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +559 -105
- package/package.json +17 -6
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
# NoSQL Graph Databases
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document covers graph databases (Neo4j, ArangoDB, Amazon Neptune), including node and relationship modeling, Cypher/AQL query languages, traversal optimization, graph algorithms, indexing, schema constraints, and use cases for social networks, recommendation engines, and knowledge graphs.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Graph Database Fundamentals
|
|
10
|
+
|
|
11
|
+
### What is a Graph Database?
|
|
12
|
+
|
|
13
|
+
**Definition**: Database that stores data as nodes (entities) and relationships (edges) between nodes
|
|
14
|
+
|
|
15
|
+
**Characteristics:**
|
|
16
|
+
- Nodes represent entities (users, products, locations)
|
|
17
|
+
- Relationships connect nodes with direction and properties
|
|
18
|
+
- Properties stored on both nodes and relationships
|
|
19
|
+
- Optimized for traversing relationships
|
|
20
|
+
- Flexible schema
|
|
21
|
+
- Rich query language for graph operations
|
|
22
|
+
|
|
23
|
+
**Core Concepts:**
|
|
24
|
+
```
|
|
25
|
+
(Node)-[RELATIONSHIP]->(Node)
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
(User:Person {name: "Alice"})-[:FOLLOWS]->(User:Person {name: "Bob"})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Popular Graph Databases
|
|
32
|
+
|
|
33
|
+
**Neo4j:**
|
|
34
|
+
- Most popular graph database
|
|
35
|
+
- Cypher query language
|
|
36
|
+
- ACID transactions
|
|
37
|
+
- Native graph storage and processing
|
|
38
|
+
- Rich ecosystem and tooling
|
|
39
|
+
- Community and Enterprise editions
|
|
40
|
+
|
|
41
|
+
**ArangoDB:**
|
|
42
|
+
- Multi-model database (document, graph, key-value)
|
|
43
|
+
- AQL query language
|
|
44
|
+
- Distributed architecture
|
|
45
|
+
- Horizontal scalability
|
|
46
|
+
- ACID transactions
|
|
47
|
+
- Open source
|
|
48
|
+
|
|
49
|
+
**Amazon Neptune:**
|
|
50
|
+
- Fully managed graph database
|
|
51
|
+
- Supports Gremlin and SPARQL
|
|
52
|
+
- High availability and durability
|
|
53
|
+
- Automatic backups
|
|
54
|
+
- Read replicas
|
|
55
|
+
- AWS integration
|
|
56
|
+
|
|
57
|
+
**JanusGraph:**
|
|
58
|
+
- Open source distributed graph database
|
|
59
|
+
- Supports Gremlin
|
|
60
|
+
- Pluggable storage backends (Cassandra, HBase, BerkeleyDB)
|
|
61
|
+
- Pluggable indexing (Elasticsearch, Solr)
|
|
62
|
+
- Horizontal scalability
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Node and Relationship Modeling
|
|
67
|
+
|
|
68
|
+
### Nodes
|
|
69
|
+
|
|
70
|
+
**Definition**: Entities in the graph (vertices)
|
|
71
|
+
|
|
72
|
+
**Components:**
|
|
73
|
+
- **Labels**: Categories/types (e.g., Person, Product, Location)
|
|
74
|
+
- **Properties**: Key-value pairs (e.g., name, age, email)
|
|
75
|
+
- **ID**: Unique identifier (auto-generated or custom)
|
|
76
|
+
|
|
77
|
+
**Example (Cypher - Neo4j):**
|
|
78
|
+
```cypher
|
|
79
|
+
// Create node with label and properties
|
|
80
|
+
CREATE (u:User {
|
|
81
|
+
id: "user123",
|
|
82
|
+
name: "Alice Johnson",
|
|
83
|
+
email: "alice@example.com",
|
|
84
|
+
age: 28,
|
|
85
|
+
created_at: datetime()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
// Multiple labels
|
|
89
|
+
CREATE (p:Person:Employee {
|
|
90
|
+
name: "Bob Smith",
|
|
91
|
+
department: "Engineering"
|
|
92
|
+
})
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Example (AQL - ArangoDB):**
|
|
96
|
+
```aql
|
|
97
|
+
// Insert document into collection (becomes node)
|
|
98
|
+
INSERT {
|
|
99
|
+
_key: "user123",
|
|
100
|
+
name: "Alice Johnson",
|
|
101
|
+
email: "alice@example.com",
|
|
102
|
+
age: 28,
|
|
103
|
+
created_at: DATE_NOW()
|
|
104
|
+
} INTO users
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Relationships
|
|
108
|
+
|
|
109
|
+
**Definition**: Connections between nodes (edges)
|
|
110
|
+
|
|
111
|
+
**Components:**
|
|
112
|
+
- **Type**: Relationship category (e.g., FOLLOWS, LIKES, PURCHASED)
|
|
113
|
+
- **Direction**: From source node to target node
|
|
114
|
+
- **Properties**: Key-value pairs (e.g., since, weight, count)
|
|
115
|
+
|
|
116
|
+
**Example (Cypher):**
|
|
117
|
+
```cypher
|
|
118
|
+
// Create relationship between existing nodes
|
|
119
|
+
MATCH (a:User {name: "Alice"}), (b:User {name: "Bob"})
|
|
120
|
+
CREATE (a)-[:FOLLOWS {since: date(), weight: 1.0}]->(b)
|
|
121
|
+
|
|
122
|
+
// Create nodes and relationship in one statement
|
|
123
|
+
CREATE (a:User {name: "Alice"})-[:FOLLOWS {since: date()}]->(b:User {name: "Bob"})
|
|
124
|
+
|
|
125
|
+
// Bidirectional relationships (create two)
|
|
126
|
+
MATCH (a:User {name: "Alice"}), (b:User {name: "Bob"})
|
|
127
|
+
CREATE (a)-[:FRIENDS_WITH {since: date()}]->(b),
|
|
128
|
+
(b)-[:FRIENDS_WITH {since: date()}]->(a)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Example (AQL):**
|
|
132
|
+
```aql
|
|
133
|
+
// Insert edge document
|
|
134
|
+
INSERT {
|
|
135
|
+
_from: "users/alice",
|
|
136
|
+
_to: "users/bob",
|
|
137
|
+
type: "follows",
|
|
138
|
+
since: DATE_NOW(),
|
|
139
|
+
weight: 1.0
|
|
140
|
+
} INTO follows
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Modeling Patterns
|
|
144
|
+
|
|
145
|
+
#### Pattern 1: Direct Relationships
|
|
146
|
+
|
|
147
|
+
**Use for**: Simple connections between entities
|
|
148
|
+
|
|
149
|
+
```cypher
|
|
150
|
+
// Social network
|
|
151
|
+
(User)-[:FOLLOWS]->(User)
|
|
152
|
+
(User)-[:LIKES]->(Post)
|
|
153
|
+
(User)-[:COMMENTED_ON]->(Post)
|
|
154
|
+
|
|
155
|
+
// E-commerce
|
|
156
|
+
(User)-[:PURCHASED]->(Product)
|
|
157
|
+
(Product)-[:BELONGS_TO]->(Category)
|
|
158
|
+
(User)-[:REVIEWED]->(Product)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### Pattern 2: Intermediate Nodes
|
|
162
|
+
|
|
163
|
+
**Use for**: Complex relationships with rich metadata
|
|
164
|
+
|
|
165
|
+
```cypher
|
|
166
|
+
// ❌ BAD: Too many properties on relationship
|
|
167
|
+
(User)-[:PURCHASED {
|
|
168
|
+
order_id: "order123",
|
|
169
|
+
quantity: 2,
|
|
170
|
+
price: 29.99,
|
|
171
|
+
shipping_address: "123 Main St",
|
|
172
|
+
payment_method: "credit_card",
|
|
173
|
+
status: "shipped"
|
|
174
|
+
}]->(Product)
|
|
175
|
+
|
|
176
|
+
// ✅ GOOD: Use intermediate node
|
|
177
|
+
(User)-[:PLACED]->(Order {
|
|
178
|
+
id: "order123",
|
|
179
|
+
total: 59.98,
|
|
180
|
+
status: "shipped",
|
|
181
|
+
shipping_address: "123 Main St"
|
|
182
|
+
})-[:CONTAINS {quantity: 2, price: 29.99}]->(Product)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### Pattern 3: Hyperedges (Multi-way Relationships)
|
|
186
|
+
|
|
187
|
+
**Use for**: Relationships involving more than two nodes
|
|
188
|
+
|
|
189
|
+
```cypher
|
|
190
|
+
// Meeting with multiple participants
|
|
191
|
+
(User1)-[:ATTENDED]->(Meeting)<-[:ATTENDED]-(User2)
|
|
192
|
+
(User1)-[:ATTENDED]->(Meeting)<-[:ATTENDED]-(User3)
|
|
193
|
+
(Meeting)-[:HELD_AT]->(Location)
|
|
194
|
+
(Meeting)-[:SCHEDULED_BY]->(User1)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Cypher Query Language (Neo4j)
|
|
200
|
+
|
|
201
|
+
### Basic Queries
|
|
202
|
+
|
|
203
|
+
**Create:**
|
|
204
|
+
```cypher
|
|
205
|
+
// Create single node
|
|
206
|
+
CREATE (u:User {name: "Alice", email: "alice@example.com"})
|
|
207
|
+
|
|
208
|
+
// Create multiple nodes
|
|
209
|
+
CREATE (u1:User {name: "Alice"}),
|
|
210
|
+
(u2:User {name: "Bob"}),
|
|
211
|
+
(u1)-[:FOLLOWS]->(u2)
|
|
212
|
+
|
|
213
|
+
// Create and return
|
|
214
|
+
CREATE (u:User {name: "Charlie"})
|
|
215
|
+
RETURN u
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Read (Match):**
|
|
219
|
+
```cypher
|
|
220
|
+
// Find all users
|
|
221
|
+
MATCH (u:User)
|
|
222
|
+
RETURN u
|
|
223
|
+
|
|
224
|
+
// Find user by property
|
|
225
|
+
MATCH (u:User {name: "Alice"})
|
|
226
|
+
RETURN u
|
|
227
|
+
|
|
228
|
+
// Find with WHERE clause
|
|
229
|
+
MATCH (u:User)
|
|
230
|
+
WHERE u.age > 25
|
|
231
|
+
RETURN u.name, u.age
|
|
232
|
+
|
|
233
|
+
// Find relationships
|
|
234
|
+
MATCH (a:User)-[:FOLLOWS]->(b:User)
|
|
235
|
+
RETURN a.name AS follower, b.name AS following
|
|
236
|
+
|
|
237
|
+
// Find with relationship properties
|
|
238
|
+
MATCH (a:User)-[r:FOLLOWS]->(b:User)
|
|
239
|
+
WHERE r.since > date('2024-01-01')
|
|
240
|
+
RETURN a.name, b.name, r.since
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Update:**
|
|
244
|
+
```cypher
|
|
245
|
+
// Update properties
|
|
246
|
+
MATCH (u:User {name: "Alice"})
|
|
247
|
+
SET u.age = 29, u.updated_at = datetime()
|
|
248
|
+
|
|
249
|
+
// Add label
|
|
250
|
+
MATCH (u:User {name: "Alice"})
|
|
251
|
+
SET u:Premium
|
|
252
|
+
|
|
253
|
+
// Remove property
|
|
254
|
+
MATCH (u:User {name: "Alice"})
|
|
255
|
+
REMOVE u.age
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Delete:**
|
|
259
|
+
```cypher
|
|
260
|
+
// Delete node (must delete relationships first)
|
|
261
|
+
MATCH (u:User {name: "Alice"})
|
|
262
|
+
DETACH DELETE u // Deletes node and all relationships
|
|
263
|
+
|
|
264
|
+
// Delete relationship only
|
|
265
|
+
MATCH (a:User)-[r:FOLLOWS]->(b:User)
|
|
266
|
+
WHERE a.name = "Alice" AND b.name = "Bob"
|
|
267
|
+
DELETE r
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Graph Traversal
|
|
271
|
+
|
|
272
|
+
**Pattern matching:**
|
|
273
|
+
```cypher
|
|
274
|
+
// Friends of friends
|
|
275
|
+
MATCH (me:User {name: "Alice"})-[:FOLLOWS]->(friend)-[:FOLLOWS]->(fof)
|
|
276
|
+
RETURN DISTINCT fof.name
|
|
277
|
+
|
|
278
|
+
// Variable length paths (1 to 3 hops)
|
|
279
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS*1..3]->(b:User)
|
|
280
|
+
RETURN b.name, length(path) AS hops
|
|
281
|
+
|
|
282
|
+
// Shortest path
|
|
283
|
+
MATCH path = shortestPath(
|
|
284
|
+
(a:User {name: "Alice"})-[:FOLLOWS*]-(b:User {name: "Charlie"})
|
|
285
|
+
)
|
|
286
|
+
RETURN path, length(path) AS distance
|
|
287
|
+
|
|
288
|
+
// All paths
|
|
289
|
+
MATCH path = (a:User {name: "Alice"})-[:FOLLOWS*]-(b:User {name: "Charlie"})
|
|
290
|
+
RETURN path
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Aggregation:**
|
|
294
|
+
```cypher
|
|
295
|
+
// Count followers
|
|
296
|
+
MATCH (u:User)<-[:FOLLOWS]-(follower)
|
|
297
|
+
RETURN u.name, count(follower) AS follower_count
|
|
298
|
+
ORDER BY follower_count DESC
|
|
299
|
+
|
|
300
|
+
// Average age of followers
|
|
301
|
+
MATCH (u:User {name: "Alice"})<-[:FOLLOWS]-(follower)
|
|
302
|
+
RETURN avg(follower.age) AS avg_follower_age
|
|
303
|
+
|
|
304
|
+
// Group by
|
|
305
|
+
MATCH (u:User)-[:LIVES_IN]->(city:City)
|
|
306
|
+
RETURN city.name, count(u) AS user_count
|
|
307
|
+
ORDER BY user_count DESC
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Advanced Patterns
|
|
311
|
+
|
|
312
|
+
**Recommendations:**
|
|
313
|
+
```cypher
|
|
314
|
+
// Recommend users to follow (friends of friends not already following)
|
|
315
|
+
MATCH (me:User {name: "Alice"})-[:FOLLOWS]->(friend)-[:FOLLOWS]->(recommendation)
|
|
316
|
+
WHERE NOT (me)-[:FOLLOWS]->(recommendation) AND recommendation <> me
|
|
317
|
+
RETURN recommendation.name, count(*) AS mutual_friends
|
|
318
|
+
ORDER BY mutual_friends DESC
|
|
319
|
+
LIMIT 10
|
|
320
|
+
|
|
321
|
+
// Recommend products (based on similar users' purchases)
|
|
322
|
+
MATCH (me:User {name: "Alice"})-[:PURCHASED]->(p:Product)<-[:PURCHASED]-(other:User)
|
|
323
|
+
MATCH (other)-[:PURCHASED]->(recommendation:Product)
|
|
324
|
+
WHERE NOT (me)-[:PURCHASED]->(recommendation)
|
|
325
|
+
RETURN recommendation.name, count(*) AS score
|
|
326
|
+
ORDER BY score DESC
|
|
327
|
+
LIMIT 10
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Mutual connections:**
|
|
331
|
+
```cypher
|
|
332
|
+
// Find mutual friends
|
|
333
|
+
MATCH (me:User {name: "Alice"})-[:FOLLOWS]->(mutual)<-[:FOLLOWS]-(other:User {name: "Bob"})
|
|
334
|
+
RETURN mutual.name
|
|
335
|
+
|
|
336
|
+
// Count mutual friends
|
|
337
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS]->(mutual)<-[:FOLLOWS]-(b:User {name: "Bob"})
|
|
338
|
+
RETURN count(mutual) AS mutual_count
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Influence/Centrality:**
|
|
342
|
+
```cypher
|
|
343
|
+
// Find most influential users (most followers)
|
|
344
|
+
MATCH (u:User)<-[:FOLLOWS]-(follower)
|
|
345
|
+
RETURN u.name, count(follower) AS influence
|
|
346
|
+
ORDER BY influence DESC
|
|
347
|
+
LIMIT 10
|
|
348
|
+
|
|
349
|
+
// PageRank-style influence (followers of influential users)
|
|
350
|
+
MATCH (u:User)<-[:FOLLOWS]-(follower)<-[:FOLLOWS]-(fof)
|
|
351
|
+
RETURN u.name, count(DISTINCT fof) AS second_degree_influence
|
|
352
|
+
ORDER BY second_degree_influence DESC
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## AQL Query Language (ArangoDB)
|
|
358
|
+
|
|
359
|
+
### Basic Queries
|
|
360
|
+
|
|
361
|
+
**Create:**
|
|
362
|
+
```aql
|
|
363
|
+
// Insert document (node)
|
|
364
|
+
INSERT {
|
|
365
|
+
name: "Alice",
|
|
366
|
+
email: "alice@example.com",
|
|
367
|
+
age: 28
|
|
368
|
+
} INTO users
|
|
369
|
+
|
|
370
|
+
// Insert edge (relationship)
|
|
371
|
+
INSERT {
|
|
372
|
+
_from: "users/alice",
|
|
373
|
+
_to: "users/bob",
|
|
374
|
+
type: "follows",
|
|
375
|
+
since: DATE_NOW()
|
|
376
|
+
} INTO follows
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**Read:**
|
|
380
|
+
```aql
|
|
381
|
+
// Find all users
|
|
382
|
+
FOR u IN users
|
|
383
|
+
RETURN u
|
|
384
|
+
|
|
385
|
+
// Find by property
|
|
386
|
+
FOR u IN users
|
|
387
|
+
FILTER u.name == "Alice"
|
|
388
|
+
RETURN u
|
|
389
|
+
|
|
390
|
+
// Find with relationships
|
|
391
|
+
FOR u IN users
|
|
392
|
+
FOR v, e IN 1..1 OUTBOUND u follows
|
|
393
|
+
RETURN {user: u.name, follows: v.name}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
**Traversal:**
|
|
397
|
+
```aql
|
|
398
|
+
// Friends of friends (2 hops)
|
|
399
|
+
FOR u IN users
|
|
400
|
+
FILTER u.name == "Alice"
|
|
401
|
+
FOR v IN 2..2 OUTBOUND u follows
|
|
402
|
+
RETURN DISTINCT v.name
|
|
403
|
+
|
|
404
|
+
// Shortest path
|
|
405
|
+
FOR path IN OUTBOUND SHORTEST_PATH
|
|
406
|
+
"users/alice" TO "users/charlie"
|
|
407
|
+
follows
|
|
408
|
+
RETURN path
|
|
409
|
+
|
|
410
|
+
// All paths with depth limit
|
|
411
|
+
FOR v, e, p IN 1..3 OUTBOUND "users/alice" follows
|
|
412
|
+
RETURN {vertex: v.name, depth: LENGTH(p.edges)}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Indexing and Performance
|
|
418
|
+
|
|
419
|
+
### Indexes
|
|
420
|
+
|
|
421
|
+
**Neo4j:**
|
|
422
|
+
```cypher
|
|
423
|
+
// Create index on property
|
|
424
|
+
CREATE INDEX user_email FOR (u:User) ON (u.email)
|
|
425
|
+
|
|
426
|
+
// Create composite index
|
|
427
|
+
CREATE INDEX user_name_age FOR (u:User) ON (u.name, u.age)
|
|
428
|
+
|
|
429
|
+
// Create unique constraint (creates index automatically)
|
|
430
|
+
CREATE CONSTRAINT user_email_unique FOR (u:User) REQUIRE u.email IS UNIQUE
|
|
431
|
+
|
|
432
|
+
// Full-text index
|
|
433
|
+
CREATE FULLTEXT INDEX user_search FOR (u:User) ON EACH [u.name, u.bio]
|
|
434
|
+
|
|
435
|
+
// List indexes
|
|
436
|
+
SHOW INDEXES
|
|
437
|
+
|
|
438
|
+
// Drop index
|
|
439
|
+
DROP INDEX user_email
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**ArangoDB:**
|
|
443
|
+
```aql
|
|
444
|
+
// Create hash index
|
|
445
|
+
db.users.ensureIndex({ type: "hash", fields: ["email"], unique: true })
|
|
446
|
+
|
|
447
|
+
// Create skiplist index (for range queries)
|
|
448
|
+
db.users.ensureIndex({ type: "skiplist", fields: ["age"] })
|
|
449
|
+
|
|
450
|
+
// Create fulltext index
|
|
451
|
+
db.users.ensureIndex({ type: "fulltext", fields: ["name", "bio"] })
|
|
452
|
+
|
|
453
|
+
// Create geo index
|
|
454
|
+
db.locations.ensureIndex({ type: "geo", fields: ["coordinates"] })
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Query Optimization
|
|
458
|
+
|
|
459
|
+
**Use indexes:**
|
|
460
|
+
```cypher
|
|
461
|
+
// ❌ BAD: No index, full scan
|
|
462
|
+
MATCH (u:User)
|
|
463
|
+
WHERE u.email = "alice@example.com"
|
|
464
|
+
RETURN u
|
|
465
|
+
|
|
466
|
+
// ✅ GOOD: Create index first
|
|
467
|
+
CREATE INDEX user_email FOR (u:User) ON (u.email)
|
|
468
|
+
|
|
469
|
+
MATCH (u:User)
|
|
470
|
+
WHERE u.email = "alice@example.com"
|
|
471
|
+
RETURN u
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**Limit traversal depth:**
|
|
475
|
+
```cypher
|
|
476
|
+
// ❌ BAD: Unbounded traversal (can be very slow)
|
|
477
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS*]->(b:User)
|
|
478
|
+
RETURN b
|
|
479
|
+
|
|
480
|
+
// ✅ GOOD: Limit depth
|
|
481
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS*1..3]->(b:User)
|
|
482
|
+
RETURN b
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
**Use LIMIT:**
|
|
486
|
+
```cypher
|
|
487
|
+
// ❌ BAD: Returns all results
|
|
488
|
+
MATCH (u:User)
|
|
489
|
+
RETURN u
|
|
490
|
+
ORDER BY u.created_at DESC
|
|
491
|
+
|
|
492
|
+
// ✅ GOOD: Limit results
|
|
493
|
+
MATCH (u:User)
|
|
494
|
+
RETURN u
|
|
495
|
+
ORDER BY u.created_at DESC
|
|
496
|
+
LIMIT 100
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Profile queries:**
|
|
500
|
+
```cypher
|
|
501
|
+
// Analyze query performance
|
|
502
|
+
PROFILE
|
|
503
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS]->(b:User)
|
|
504
|
+
RETURN b
|
|
505
|
+
|
|
506
|
+
// Explain query plan
|
|
507
|
+
EXPLAIN
|
|
508
|
+
MATCH (a:User {name: "Alice"})-[:FOLLOWS]->(b:User)
|
|
509
|
+
RETURN b
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Graph Algorithms
|
|
515
|
+
|
|
516
|
+
### Centrality Algorithms
|
|
517
|
+
|
|
518
|
+
**Degree Centrality** (number of connections):
|
|
519
|
+
```cypher
|
|
520
|
+
// In Neo4j Graph Data Science library
|
|
521
|
+
CALL gds.degree.stream('myGraph')
|
|
522
|
+
YIELD nodeId, score
|
|
523
|
+
RETURN gds.util.asNode(nodeId).name AS user, score AS connections
|
|
524
|
+
ORDER BY score DESC
|
|
525
|
+
LIMIT 10
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
**PageRank** (importance based on connections):
|
|
529
|
+
```cypher
|
|
530
|
+
CALL gds.pageRank.stream('myGraph')
|
|
531
|
+
YIELD nodeId, score
|
|
532
|
+
RETURN gds.util.asNode(nodeId).name AS user, score AS pagerank
|
|
533
|
+
ORDER BY score DESC
|
|
534
|
+
LIMIT 10
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
**Betweenness Centrality** (bridge nodes):
|
|
538
|
+
```cypher
|
|
539
|
+
CALL gds.betweenness.stream('myGraph')
|
|
540
|
+
YIELD nodeId, score
|
|
541
|
+
RETURN gds.util.asNode(nodeId).name AS user, score AS betweenness
|
|
542
|
+
ORDER BY score DESC
|
|
543
|
+
LIMIT 10
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
### Community Detection
|
|
547
|
+
|
|
548
|
+
**Louvain** (find communities):
|
|
549
|
+
```cypher
|
|
550
|
+
CALL gds.louvain.stream('myGraph')
|
|
551
|
+
YIELD nodeId, communityId
|
|
552
|
+
RETURN communityId, collect(gds.util.asNode(nodeId).name) AS members
|
|
553
|
+
ORDER BY size(members) DESC
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
**Label Propagation**:
|
|
557
|
+
```cypher
|
|
558
|
+
CALL gds.labelPropagation.stream('myGraph')
|
|
559
|
+
YIELD nodeId, communityId
|
|
560
|
+
RETURN communityId, count(*) AS size
|
|
561
|
+
ORDER BY size DESC
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
### Pathfinding
|
|
565
|
+
|
|
566
|
+
**Shortest Path**:
|
|
567
|
+
```cypher
|
|
568
|
+
MATCH path = shortestPath(
|
|
569
|
+
(a:User {name: "Alice"})-[:FOLLOWS*]-(b:User {name: "Charlie"})
|
|
570
|
+
)
|
|
571
|
+
RETURN path, length(path) AS distance
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
**All Shortest Paths**:
|
|
575
|
+
```cypher
|
|
576
|
+
MATCH path = allShortestPaths(
|
|
577
|
+
(a:User {name: "Alice"})-[:FOLLOWS*]-(b:User {name: "Charlie"})
|
|
578
|
+
)
|
|
579
|
+
RETURN path
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
**Dijkstra (weighted shortest path)**:
|
|
583
|
+
```cypher
|
|
584
|
+
CALL gds.shortestPath.dijkstra.stream('myGraph', {
|
|
585
|
+
sourceNode: id(a),
|
|
586
|
+
targetNode: id(b),
|
|
587
|
+
relationshipWeightProperty: 'weight'
|
|
588
|
+
})
|
|
589
|
+
YIELD path, totalCost
|
|
590
|
+
RETURN path, totalCost
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## Schema Constraints
|
|
596
|
+
|
|
597
|
+
### Neo4j Constraints
|
|
598
|
+
|
|
599
|
+
**Unique constraints:**
|
|
600
|
+
```cypher
|
|
601
|
+
// Ensure email is unique
|
|
602
|
+
CREATE CONSTRAINT user_email_unique FOR (u:User) REQUIRE u.email IS UNIQUE
|
|
603
|
+
|
|
604
|
+
// Composite unique constraint
|
|
605
|
+
CREATE CONSTRAINT user_username_unique FOR (u:User) REQUIRE (u.username, u.domain) IS UNIQUE
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
**Existence constraints (Enterprise only):**
|
|
609
|
+
```cypher
|
|
610
|
+
// Require property exists
|
|
611
|
+
CREATE CONSTRAINT user_email_exists FOR (u:User) REQUIRE u.email IS NOT NULL
|
|
612
|
+
|
|
613
|
+
// Require relationship property exists
|
|
614
|
+
CREATE CONSTRAINT follows_since_exists FOR ()-[r:FOLLOWS]-() REQUIRE r.since IS NOT NULL
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
**Node key constraints:**
|
|
618
|
+
```cypher
|
|
619
|
+
// Combination of unique and existence
|
|
620
|
+
CREATE CONSTRAINT user_key FOR (u:User) REQUIRE (u.id) IS NODE KEY
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
### ArangoDB Validation
|
|
624
|
+
|
|
625
|
+
**Schema validation:**
|
|
626
|
+
```javascript
|
|
627
|
+
// Define schema for collection
|
|
628
|
+
db._create("users", {
|
|
629
|
+
schema: {
|
|
630
|
+
rule: {
|
|
631
|
+
type: "object",
|
|
632
|
+
properties: {
|
|
633
|
+
name: { type: "string" },
|
|
634
|
+
email: { type: "string", format: "email" },
|
|
635
|
+
age: { type: "integer", minimum: 0 }
|
|
636
|
+
},
|
|
637
|
+
required: ["name", "email"]
|
|
638
|
+
},
|
|
639
|
+
level: "moderate" // none, new, moderate, strict
|
|
640
|
+
}
|
|
641
|
+
})
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
---
|
|
645
|
+
|
|
646
|
+
## Use Cases
|
|
647
|
+
|
|
648
|
+
### Social Networks
|
|
649
|
+
|
|
650
|
+
**Entities:**
|
|
651
|
+
- Users (nodes)
|
|
652
|
+
- Posts (nodes)
|
|
653
|
+
- Comments (nodes)
|
|
654
|
+
|
|
655
|
+
**Relationships:**
|
|
656
|
+
- FOLLOWS (User → User)
|
|
657
|
+
- LIKES (User → Post)
|
|
658
|
+
- COMMENTED_ON (User → Post)
|
|
659
|
+
- REPLIED_TO (Comment → Comment)
|
|
660
|
+
|
|
661
|
+
**Queries:**
|
|
662
|
+
- Find friends of friends
|
|
663
|
+
- Recommend users to follow
|
|
664
|
+
- Find mutual connections
|
|
665
|
+
- Calculate influence/reach
|
|
666
|
+
|
|
667
|
+
### Recommendation Engines
|
|
668
|
+
|
|
669
|
+
**Collaborative filtering:**
|
|
670
|
+
```cypher
|
|
671
|
+
// Recommend products based on similar users
|
|
672
|
+
MATCH (me:User {id: $userId})-[:PURCHASED]->(p:Product)<-[:PURCHASED]-(similar:User)
|
|
673
|
+
MATCH (similar)-[:PURCHASED]->(recommendation:Product)
|
|
674
|
+
WHERE NOT (me)-[:PURCHASED]->(recommendation)
|
|
675
|
+
RETURN recommendation.name, count(*) AS score
|
|
676
|
+
ORDER BY score DESC
|
|
677
|
+
LIMIT 10
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
**Content-based filtering:**
|
|
681
|
+
```cypher
|
|
682
|
+
// Recommend similar products
|
|
683
|
+
MATCH (me:User {id: $userId})-[:PURCHASED]->(p:Product)-[:IN_CATEGORY]->(c:Category)
|
|
684
|
+
MATCH (recommendation:Product)-[:IN_CATEGORY]->(c)
|
|
685
|
+
WHERE NOT (me)-[:PURCHASED]->(recommendation)
|
|
686
|
+
RETURN recommendation.name, count(c) AS category_overlap
|
|
687
|
+
ORDER BY category_overlap DESC
|
|
688
|
+
LIMIT 10
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
### Knowledge Graphs
|
|
692
|
+
|
|
693
|
+
**Entities:**
|
|
694
|
+
- Concepts (nodes)
|
|
695
|
+
- Documents (nodes)
|
|
696
|
+
- Authors (nodes)
|
|
697
|
+
|
|
698
|
+
**Relationships:**
|
|
699
|
+
- RELATED_TO (Concept → Concept)
|
|
700
|
+
- MENTIONS (Document → Concept)
|
|
701
|
+
- AUTHORED_BY (Document → Author)
|
|
702
|
+
- CITES (Document → Document)
|
|
703
|
+
|
|
704
|
+
**Queries:**
|
|
705
|
+
- Find related concepts
|
|
706
|
+
- Discover connections between topics
|
|
707
|
+
- Trace citation networks
|
|
708
|
+
- Expert finding
|
|
709
|
+
|
|
710
|
+
### Fraud Detection
|
|
711
|
+
|
|
712
|
+
**Pattern detection:**
|
|
713
|
+
```cypher
|
|
714
|
+
// Find suspicious transaction patterns
|
|
715
|
+
MATCH (a:Account)-[:TRANSFERRED]->(b:Account)-[:TRANSFERRED]->(c:Account)
|
|
716
|
+
WHERE a.id = $accountId AND c.id = $accountId
|
|
717
|
+
RETURN a, b, c // Circular transfer pattern
|
|
718
|
+
|
|
719
|
+
// Find accounts with shared attributes
|
|
720
|
+
MATCH (a1:Account)-[:HAS_PHONE]->(p:Phone)<-[:HAS_PHONE]-(a2:Account)
|
|
721
|
+
WHERE a1 <> a2
|
|
722
|
+
RETURN a1, a2, p // Multiple accounts with same phone
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
---
|
|
726
|
+
|
|
727
|
+
## Best Practices
|
|
728
|
+
|
|
729
|
+
### DO
|
|
730
|
+
|
|
731
|
+
✅ **Model relationships explicitly** (don't hide in properties)
|
|
732
|
+
✅ **Use meaningful relationship types** (FOLLOWS, LIKES, not RELATED_TO)
|
|
733
|
+
✅ **Create indexes on frequently queried properties**
|
|
734
|
+
✅ **Limit traversal depth** to avoid performance issues
|
|
735
|
+
✅ **Use LIMIT** to restrict result sets
|
|
736
|
+
✅ **Profile queries** to identify bottlenecks
|
|
737
|
+
✅ **Use graph algorithms** for complex analysis
|
|
738
|
+
✅ **Implement constraints** for data integrity
|
|
739
|
+
✅ **Denormalize when needed** (store computed values)
|
|
740
|
+
|
|
741
|
+
### DON'T
|
|
742
|
+
|
|
743
|
+
❌ **Don't use graphs for simple key-value lookups** (use key-value store instead)
|
|
744
|
+
❌ **Don't create unbounded relationships** (e.g., unlimited followers)
|
|
745
|
+
❌ **Don't store large binary data in nodes** (use external storage)
|
|
746
|
+
❌ **Don't use graphs for aggregations** (use OLAP database instead)
|
|
747
|
+
❌ **Don't create too many relationship types** (keep it simple)
|
|
748
|
+
❌ **Don't ignore indexes** (critical for performance)
|
|
749
|
+
❌ **Don't traverse without depth limits** (can cause infinite loops)
|
|
750
|
+
|
|
751
|
+
---
|
|
752
|
+
|
|
753
|
+
## Summary
|
|
754
|
+
|
|
755
|
+
**Graph databases excel at:**
|
|
756
|
+
- Relationship-heavy data
|
|
757
|
+
- Complex traversals
|
|
758
|
+
- Pattern matching
|
|
759
|
+
- Recommendation engines
|
|
760
|
+
- Social networks
|
|
761
|
+
- Fraud detection
|
|
762
|
+
- Knowledge graphs
|
|
763
|
+
|
|
764
|
+
**Key concepts:**
|
|
765
|
+
- **Nodes**: Entities with labels and properties
|
|
766
|
+
- **Relationships**: Directed connections with types and properties
|
|
767
|
+
- **Cypher/AQL**: Declarative query languages
|
|
768
|
+
- **Traversal**: Following relationships across nodes
|
|
769
|
+
- **Algorithms**: Centrality, community detection, pathfinding
|
|
770
|
+
|
|
771
|
+
**Performance tips:**
|
|
772
|
+
- Create indexes on queried properties
|
|
773
|
+
- Limit traversal depth
|
|
774
|
+
- Use LIMIT for large result sets
|
|
775
|
+
- Profile queries to identify bottlenecks
|
|
776
|
+
- Use graph algorithms for complex analysis
|
|
777
|
+
|
|
778
|
+
|