@wazir-dev/cli 1.0.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/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
# Database Query Optimization -- Performance Expertise Module
|
|
2
|
+
|
|
3
|
+
> Database queries are the #1 source of backend latency in most applications. A single unindexed query can turn a 10ms API call into a 10-second timeout. Understanding query execution plans, indexing strategies, and ORM pitfalls is essential for any backend developer.
|
|
4
|
+
|
|
5
|
+
> **Impact:** Critical
|
|
6
|
+
> **Applies to:** Backend
|
|
7
|
+
> **Key metrics:** Query execution time (p50/p95/p99), Rows scanned vs rows returned ratio, Index hit rate, Connection pool utilization
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Why Query Optimization Matters
|
|
12
|
+
|
|
13
|
+
Research from the International Journal of Computing and Engineering (2025) found that **inefficient SQL queries account for 63% of database performance issues**, with just **7% of queries consuming over 70% of database resources**. A single unoptimized correlated subquery cost one company $45,000/month in unnecessary infrastructure; a 15-minute rewrite improved response times by 95%.
|
|
14
|
+
|
|
15
|
+
| Scenario | Before | After | Improvement |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| Missing index on WHERE clause | 28s | 32ms | 875x |
|
|
18
|
+
| SELECT * replaced with specific columns | 1.7s | 870ms | 2x |
|
|
19
|
+
| WordPress query optimization | 58,000ms | 20ms | 2,900x |
|
|
20
|
+
| Full table scan to index seek | 10s | 50ms | 200x |
|
|
21
|
+
| Connection pool right-sizing | ~100ms | ~2ms | 50x |
|
|
22
|
+
|
|
23
|
+
**The rows-scanned ratio** is the most important diagnostic metric. A ratio below 10:1 is acceptable. Between 10:1 and 100:1 warrants investigation. Above 100:1 is critical -- the query is doing orders of magnitude more work than necessary.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Reading Query Execution Plans
|
|
28
|
+
|
|
29
|
+
### 2.1 PostgreSQL: EXPLAIN ANALYZE
|
|
30
|
+
|
|
31
|
+
```sql
|
|
32
|
+
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
|
|
33
|
+
SELECT * FROM orders WHERE status = 'pending';
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Seq Scan on orders (cost=0.00..1542.00 rows=5000 width=124)
|
|
38
|
+
(actual time=0.015..12.340 rows=4832 loops=1)
|
|
39
|
+
Filter: (status = 'pending')
|
|
40
|
+
Rows Removed by Filter: 95168
|
|
41
|
+
Buffers: shared hit=542
|
|
42
|
+
Planning Time: 0.085 ms
|
|
43
|
+
Execution Time: 12.892 ms
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
| Field | Meaning |
|
|
47
|
+
|---|---|
|
|
48
|
+
| `cost=0.00..1542.00` | Startup..total cost in planner units (1.0 = one sequential page read) |
|
|
49
|
+
| `rows=5000` vs `rows=4832` | Estimated vs actual rows -- large discrepancy means stale stats |
|
|
50
|
+
| `Rows Removed by Filter: 95168` | Rows read but discarded -- red flag when large |
|
|
51
|
+
| `Buffers: shared hit=542` | Pages read from buffer cache |
|
|
52
|
+
|
|
53
|
+
**Red flags:** Seq Scan on large tables, large Rows Removed by Filter, estimated vs actual row count mismatch (run `ANALYZE tablename;`), Nested Loop with large outer set, Sort with external merge.
|
|
54
|
+
|
|
55
|
+
#### Example: Before and After Index
|
|
56
|
+
|
|
57
|
+
```sql
|
|
58
|
+
-- BEFORE: Sequential Scan (190ms)
|
|
59
|
+
EXPLAIN ANALYZE SELECT id, customer_id, total
|
|
60
|
+
FROM orders WHERE created_at > '2025-01-01' AND status = 'shipped';
|
|
61
|
+
-- Seq Scan on orders (actual time=0.031..189.420 rows=11842 loops=1)
|
|
62
|
+
-- Rows Removed by Filter: 988158
|
|
63
|
+
|
|
64
|
+
-- ADD INDEX
|
|
65
|
+
CREATE INDEX idx_orders_status_created ON orders (status, created_at);
|
|
66
|
+
|
|
67
|
+
-- AFTER: Index Scan (4.5ms) -- 42x faster
|
|
68
|
+
-- Index Scan using idx_orders_status_created on orders
|
|
69
|
+
-- (actual time=0.028..3.912 rows=11842 loops=1)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2.2 MySQL: EXPLAIN
|
|
73
|
+
|
|
74
|
+
Key columns: `type` (ALL = full scan, ref/range/const = index use), `key` (index chosen, NULL = none), `rows` (estimated rows), `Extra` (`Using filesort` or `Using temporary` = warning).
|
|
75
|
+
|
|
76
|
+
### 2.3 MongoDB: explain("executionStats")
|
|
77
|
+
|
|
78
|
+
Key fields: `totalDocsExamined` vs `nReturned` (should be close), `stage: "COLLSCAN"` = no index, `stage: "IXSCAN"` = index used.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 3. Indexing Strategies
|
|
83
|
+
|
|
84
|
+
### 3.1 B-Tree Indexes (Default)
|
|
85
|
+
|
|
86
|
+
Supports equality (`=`), range (`<`, `>`, `BETWEEN`), and prefix LIKE (`'prefix%'`).
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- Composite index -- column order is critical
|
|
90
|
+
CREATE INDEX idx_orders_user_date ON orders (user_id, created_at DESC);
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The index supports queries from left to right. `WHERE user_id = 5` uses the index. `WHERE user_id = 5 AND created_at > '2025-01-01'` uses both columns. `WHERE created_at > '2025-01-01'` alone cannot use this index.
|
|
94
|
+
|
|
95
|
+
### 3.2 GIN Indexes (PostgreSQL)
|
|
96
|
+
|
|
97
|
+
For arrays, JSONB, and full-text search. 3-10x slower writes, but dramatically faster reads on composite data.
|
|
98
|
+
|
|
99
|
+
```sql
|
|
100
|
+
CREATE INDEX idx_events_payload ON events USING GIN (payload);
|
|
101
|
+
-- Supports: WHERE payload @> '{"type": "purchase"}'
|
|
102
|
+
|
|
103
|
+
CREATE INDEX idx_articles_search ON articles
|
|
104
|
+
USING GIN (to_tsvector('english', title || ' ' || body));
|
|
105
|
+
-- Supports: WHERE to_tsvector(...) @@ to_tsquery('optimization & database')
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 3.3 Partial Indexes
|
|
109
|
+
|
|
110
|
+
Index only the rows you actually query. Reduces index size and maintenance cost.
|
|
111
|
+
|
|
112
|
+
```sql
|
|
113
|
+
-- Full index on 10M rows: ~240MB
|
|
114
|
+
CREATE INDEX idx_orders_status ON orders (status);
|
|
115
|
+
|
|
116
|
+
-- Partial index on ~500K pending rows: ~12MB (20x smaller)
|
|
117
|
+
CREATE INDEX idx_orders_pending ON orders (created_at) WHERE status = 'pending';
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Heap Engineering benchmark: partial index query time 0.88ms vs non-partial 16.3ms -- **18.5x faster**.
|
|
121
|
+
|
|
122
|
+
### 3.4 Covering Indexes (Index-Only Scans)
|
|
123
|
+
|
|
124
|
+
Include all columns the query needs so the database never touches the table.
|
|
125
|
+
|
|
126
|
+
```sql
|
|
127
|
+
CREATE INDEX idx_orders_covering ON orders (user_id, created_at) INCLUDE (total, status);
|
|
128
|
+
|
|
129
|
+
-- Index Only Scan: Heap Fetches: 0 (pure index read, fastest possible)
|
|
130
|
+
SELECT total, status FROM orders WHERE user_id = 42 AND created_at > '2025-01-01';
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 3.5 MongoDB: ESR Rule for Compound Indexes
|
|
134
|
+
|
|
135
|
+
Order fields as **Equality, Sort, Range**:
|
|
136
|
+
|
|
137
|
+
```javascript
|
|
138
|
+
// Query pattern
|
|
139
|
+
db.orders.find({ status: "shipped", total: { $gt: 100 } }).sort({ created_at: -1 });
|
|
140
|
+
|
|
141
|
+
// Optimal index: Equality first, Sort second, Range last
|
|
142
|
+
db.orders.createIndex({ status: 1, created_at: -1, total: 1 });
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 3.6 Index Cardinality
|
|
146
|
+
|
|
147
|
+
High cardinality columns (email, user_id) benefit most from indexes. If a value appears in >10-15% of rows, the planner skips the index and does a sequential scan anyway. Use partial indexes for low-cardinality columns.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 4. Query Anti-Patterns and Fixes
|
|
152
|
+
|
|
153
|
+
### Anti-Pattern 1: SELECT *
|
|
154
|
+
|
|
155
|
+
```sql
|
|
156
|
+
-- SLOW: fetches 45 columns, prevents index-only scans
|
|
157
|
+
SELECT * FROM users WHERE department = 'engineering';
|
|
158
|
+
-- FAST: 80% less data transfer, 2x faster
|
|
159
|
+
SELECT id, name, email FROM users WHERE department = 'engineering';
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Anti-Pattern 2: Functions on Indexed Columns
|
|
163
|
+
|
|
164
|
+
```sql
|
|
165
|
+
-- SLOW: YEAR() prevents index use, forces full scan (1,200ms on 5M rows)
|
|
166
|
+
SELECT * FROM orders WHERE YEAR(created_at) = 2025;
|
|
167
|
+
-- FAST: sargable range query, uses index (8ms)
|
|
168
|
+
SELECT * FROM orders WHERE created_at >= '2025-01-01' AND created_at < '2026-01-01';
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
For case-insensitive search, create an expression index:
|
|
172
|
+
|
|
173
|
+
```sql
|
|
174
|
+
CREATE INDEX idx_users_email_lower ON users (LOWER(email));
|
|
175
|
+
SELECT * FROM users WHERE LOWER(email) = 'user@example.com';
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Anti-Pattern 3: Leading Wildcards
|
|
179
|
+
|
|
180
|
+
```sql
|
|
181
|
+
-- SLOW: '%widget%' forces full scan (340ms on 2M rows)
|
|
182
|
+
SELECT * FROM products WHERE name LIKE '%widget%';
|
|
183
|
+
-- FAST: use full-text search with GIN index (4ms)
|
|
184
|
+
SELECT * FROM products
|
|
185
|
+
WHERE to_tsvector('english', name) @@ to_tsquery('widget');
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Anti-Pattern 4: Implicit Type Conversions
|
|
189
|
+
|
|
190
|
+
```sql
|
|
191
|
+
-- SLOW: phone_number is VARCHAR but query passes integer -- casts every row
|
|
192
|
+
SELECT * FROM contacts WHERE phone_number = 5551234567;
|
|
193
|
+
-- FAST: match the column type
|
|
194
|
+
SELECT * FROM contacts WHERE phone_number = '5551234567';
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Anti-Pattern 5: Unbounded Queries
|
|
198
|
+
|
|
199
|
+
```sql
|
|
200
|
+
-- DANGEROUS: could return millions of rows
|
|
201
|
+
SELECT * FROM logs WHERE level = 'ERROR';
|
|
202
|
+
-- SAFE: keyset pagination (constant performance at any depth)
|
|
203
|
+
SELECT id, message, created_at FROM logs
|
|
204
|
+
WHERE level = 'ERROR' AND created_at < '2025-06-15T10:30:00Z'
|
|
205
|
+
ORDER BY created_at DESC LIMIT 50;
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`OFFSET 100000` reads and discards 100,000 rows. Keyset pagination jumps directly via the index.
|
|
209
|
+
|
|
210
|
+
### Anti-Pattern 6: DISTINCT as Band-Aid
|
|
211
|
+
|
|
212
|
+
```sql
|
|
213
|
+
-- BAD: DISTINCT masks duplicate rows from incorrect join
|
|
214
|
+
SELECT DISTINCT u.id, u.name FROM users u
|
|
215
|
+
JOIN orders o ON u.id = o.user_id JOIN order_items oi ON o.id = oi.order_id;
|
|
216
|
+
-- GOOD: EXISTS checks relationship without producing duplicates
|
|
217
|
+
SELECT u.id, u.name FROM users u
|
|
218
|
+
WHERE EXISTS (SELECT 1 FROM orders o JOIN order_items oi ON o.id = oi.order_id
|
|
219
|
+
WHERE o.user_id = u.id);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 5. ORM Pitfalls: N+1 and Beyond
|
|
225
|
+
|
|
226
|
+
### 5.1 The N+1 Problem
|
|
227
|
+
|
|
228
|
+
Code fetches N parent records, then issues one query per record for related data: N+1 queries instead of 1-2.
|
|
229
|
+
|
|
230
|
+
**Django:**
|
|
231
|
+
|
|
232
|
+
```python
|
|
233
|
+
# N+1: 501 queries for 500 authors (~1,002ms at 2ms/query)
|
|
234
|
+
authors = Author.objects.all()
|
|
235
|
+
for author in authors:
|
|
236
|
+
books = author.books.all() # 1 query per author
|
|
237
|
+
|
|
238
|
+
# FIX: 2 queries (~4ms) -- 250x fewer round trips
|
|
239
|
+
authors = Author.objects.prefetch_related('books').all()
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Measured: without eager loading ~36s, with `prefetch_related` ~2s -- **18x improvement**.
|
|
243
|
+
|
|
244
|
+
**SQLAlchemy:**
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
# FIX: selectinload for collections, joinedload for many-to-one
|
|
248
|
+
from sqlalchemy.orm import selectinload, joinedload
|
|
249
|
+
users = session.query(User).options(selectinload(User.orders)).all()
|
|
250
|
+
orders = session.query(Order).options(joinedload(Order.customer)).all()
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Rails ActiveRecord:**
|
|
254
|
+
|
|
255
|
+
```ruby
|
|
256
|
+
# FIX: includes (auto-strategy), eager_load (JOIN), preload (separate queries)
|
|
257
|
+
posts = Post.includes(:comments).all
|
|
258
|
+
|
|
259
|
+
# PREVENT: strict_loading raises error on lazy load (Rails 6.1+)
|
|
260
|
+
class Post < ApplicationRecord
|
|
261
|
+
self.strict_loading_by_default = true
|
|
262
|
+
end
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 5.2 Detection Tools
|
|
266
|
+
|
|
267
|
+
| Tool | Framework | Method |
|
|
268
|
+
|---|---|---|
|
|
269
|
+
| Django Debug Toolbar | Django | Shows all SQL per request |
|
|
270
|
+
| `nplusone` | Django/SQLAlchemy | Auto-detects N+1, raises warnings |
|
|
271
|
+
| Bullet gem | Rails | Detects N+1, suggests fixes |
|
|
272
|
+
| `strict_loading` | Rails 6.1+ | Raises exception on lazy load |
|
|
273
|
+
| Sentry / Datadog APM | Any | Identifies repeated query patterns |
|
|
274
|
+
|
|
275
|
+
### 5.3 More ORM Traps
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
# BAD: loads full objects when you need one field
|
|
279
|
+
user_ids = [u.id for u in User.objects.filter(active=True)]
|
|
280
|
+
# GOOD: values_list returns only the column
|
|
281
|
+
user_ids = list(User.objects.filter(active=True).values_list('id', flat=True))
|
|
282
|
+
|
|
283
|
+
# TERRIBLE: filters in Python instead of SQL (fetches 1M rows, keeps 5K)
|
|
284
|
+
active_premium = [u for u in User.objects.all() if u.is_active and u.plan == 'premium']
|
|
285
|
+
# CORRECT: filter in the database
|
|
286
|
+
active_premium = User.objects.filter(is_active=True, plan='premium')
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 6. Join Optimization
|
|
292
|
+
|
|
293
|
+
### Join Algorithms
|
|
294
|
+
|
|
295
|
+
| Algorithm | Best For | Complexity |
|
|
296
|
+
|---|---|---|
|
|
297
|
+
| Nested Loop | Small outer set, indexed inner | O(n * m) worst |
|
|
298
|
+
| Hash Join | Large unsorted sets, equality joins | O(n + m) |
|
|
299
|
+
| Merge Join | Large pre-sorted sets | O(n + m) |
|
|
300
|
+
|
|
301
|
+
### Subquery vs JOIN
|
|
302
|
+
|
|
303
|
+
```sql
|
|
304
|
+
-- SLOW: correlated subquery executes once per outer row
|
|
305
|
+
-- 50K products x 5M order_items: ~45 seconds
|
|
306
|
+
SELECT p.name,
|
|
307
|
+
(SELECT COUNT(*) FROM order_items oi WHERE oi.product_id = p.id)
|
|
308
|
+
FROM products p;
|
|
309
|
+
|
|
310
|
+
-- FAST: JOIN with GROUP BY -- ~800ms (56x faster)
|
|
311
|
+
SELECT p.name, COUNT(oi.id) AS order_count
|
|
312
|
+
FROM products p LEFT JOIN order_items oi ON oi.product_id = p.id
|
|
313
|
+
GROUP BY p.id, p.name;
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### EXISTS vs IN
|
|
317
|
+
|
|
318
|
+
```sql
|
|
319
|
+
-- EXISTS short-circuits after first match -- faster for large subquery results
|
|
320
|
+
SELECT * FROM users u WHERE EXISTS (
|
|
321
|
+
SELECT 1 FROM orders o WHERE o.user_id = u.id AND o.total > 1000);
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## 7. Denormalization and Materialized Views
|
|
327
|
+
|
|
328
|
+
Denormalize when: read-to-write ratio >100:1, fan-out joins (3-5+ tables per request), or repeated aggregation hotspots. **Always exhaust indexing, query rewrites, and caching first.**
|
|
329
|
+
|
|
330
|
+
### Cached Counter Columns
|
|
331
|
+
|
|
332
|
+
```sql
|
|
333
|
+
ALTER TABLE authors ADD COLUMN book_count INTEGER DEFAULT 0;
|
|
334
|
+
-- Maintained via trigger on INSERT/DELETE to books table
|
|
335
|
+
-- Before: COUNT(*) query (12ms). After: single column read (0.1ms)
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Materialized Views
|
|
339
|
+
|
|
340
|
+
```sql
|
|
341
|
+
CREATE MATERIALIZED VIEW mv_daily_revenue AS
|
|
342
|
+
SELECT DATE(created_at) AS day, COUNT(*) AS orders, SUM(total) AS revenue
|
|
343
|
+
FROM orders WHERE status = 'completed' GROUP BY DATE(created_at)
|
|
344
|
+
WITH DATA;
|
|
345
|
+
|
|
346
|
+
CREATE INDEX idx_mv_revenue_day ON mv_daily_revenue (day);
|
|
347
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_daily_revenue; -- no read lock
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
| Refresh Strategy | Freshness | Method |
|
|
351
|
+
|---|---|---|
|
|
352
|
+
| Cron / pg_cron | Minutes-hours | Scheduled `REFRESH` |
|
|
353
|
+
| Trigger-based | Near real-time | Trigger on source tables |
|
|
354
|
+
| CDC / Outbox | Seconds | Change Data Capture pipeline |
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## 8. Connection Pool Tuning
|
|
359
|
+
|
|
360
|
+
Every PostgreSQL connection uses ~5-10MB of memory. Excessive connections cause context switching that degrades all queries.
|
|
361
|
+
|
|
362
|
+
**HikariCP formula:** `pool_size = (core_count * 2) + effective_spindle_count`
|
|
363
|
+
|
|
364
|
+
For a 4-core server with SSDs and data in RAM: pool_size = 8. The HikariCP wiki documents that **reducing pool size to this formula decreased response times from ~100ms to ~2ms** -- 50x improvement.
|
|
365
|
+
|
|
366
|
+
### PgBouncer
|
|
367
|
+
|
|
368
|
+
```ini
|
|
369
|
+
pool_mode = transaction # return connection after each transaction (recommended)
|
|
370
|
+
default_pool_size = 20 # actual PostgreSQL connections
|
|
371
|
+
max_client_conn = 1000 # client connections PgBouncer accepts
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Monitor:** connection wait time (<5ms target), active connections (<80% of pool max), idle ratio (>50% idle = pool too large).
|
|
375
|
+
|
|
376
|
+
```sql
|
|
377
|
+
-- Check for long-running queries holding connections
|
|
378
|
+
SELECT pid, now() - query_start AS duration, query, state
|
|
379
|
+
FROM pg_stat_activity WHERE state != 'idle' ORDER BY duration DESC LIMIT 10;
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 9. Database-Specific Techniques
|
|
385
|
+
|
|
386
|
+
### PostgreSQL
|
|
387
|
+
|
|
388
|
+
```sql
|
|
389
|
+
-- Update stale statistics
|
|
390
|
+
ANALYZE orders;
|
|
391
|
+
|
|
392
|
+
-- Aggressive autovacuum for high-write tables
|
|
393
|
+
ALTER TABLE events SET (
|
|
394
|
+
autovacuum_vacuum_scale_factor = 0.01, -- vacuum after 1% changes (default 20%)
|
|
395
|
+
autovacuum_analyze_scale_factor = 0.005); -- analyze after 0.5% changes
|
|
396
|
+
|
|
397
|
+
-- Concurrent index creation (no table lock)
|
|
398
|
+
CREATE INDEX CONCURRENTLY idx_orders_email ON orders (email);
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### MySQL / InnoDB
|
|
402
|
+
|
|
403
|
+
```sql
|
|
404
|
+
-- Enable slow query log
|
|
405
|
+
SET GLOBAL slow_query_log = 1;
|
|
406
|
+
SET GLOBAL long_query_time = 0.5;
|
|
407
|
+
SET GLOBAL log_queries_not_using_indexes = 1;
|
|
408
|
+
|
|
409
|
+
-- Check buffer pool hit rate (target: >99%)
|
|
410
|
+
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
|
|
411
|
+
-- hit_rate = 1 - (reads / read_requests). Below 99% = increase innodb_buffer_pool_size.
|
|
412
|
+
|
|
413
|
+
-- Optimizer hints (8.0+)
|
|
414
|
+
SELECT /*+ INDEX(orders idx_orders_user_date) */ id, total FROM orders WHERE user_id = 42;
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### MongoDB
|
|
418
|
+
|
|
419
|
+
```javascript
|
|
420
|
+
// Move $match before $lookup to reduce documents entering expensive stages
|
|
421
|
+
db.orders.aggregate([
|
|
422
|
+
{ $match: { status: "pending" } }, // filter FIRST
|
|
423
|
+
{ $lookup: { from: "customers", localField: "customer_id",
|
|
424
|
+
foreignField: "_id", as: "customer" } }
|
|
425
|
+
]);
|
|
426
|
+
|
|
427
|
+
// TTL index for automatic cleanup -- prevents table bloat
|
|
428
|
+
db.sessions.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 2592000 });
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## 10. Monitoring and Continuous Optimization
|
|
434
|
+
|
|
435
|
+
### Key Metrics
|
|
436
|
+
|
|
437
|
+
| Metric | Target | Alert |
|
|
438
|
+
|---|---|---|
|
|
439
|
+
| p50 query time | <5ms | >20ms |
|
|
440
|
+
| p95 query time | <50ms | >200ms |
|
|
441
|
+
| p99 query time | <200ms | >1s |
|
|
442
|
+
| Rows scanned / returned | <10:1 | >100:1 |
|
|
443
|
+
| Index hit rate | >99% | <95% |
|
|
444
|
+
| Buffer/cache hit rate | >99% | <95% |
|
|
445
|
+
| Active connections | <80% pool | >90% pool |
|
|
446
|
+
|
|
447
|
+
### pg_stat_statements (PostgreSQL)
|
|
448
|
+
|
|
449
|
+
```sql
|
|
450
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
451
|
+
|
|
452
|
+
-- Top queries by total execution time
|
|
453
|
+
SELECT calls, round(total_exec_time::numeric, 2) AS total_ms,
|
|
454
|
+
round(mean_exec_time::numeric, 2) AS mean_ms, query
|
|
455
|
+
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
|
|
456
|
+
|
|
457
|
+
-- Tables needing indexes (high sequential scan count)
|
|
458
|
+
SELECT relname, seq_scan, seq_tup_read, idx_scan,
|
|
459
|
+
round(100.0 * idx_scan / GREATEST(seq_scan + idx_scan, 1), 1) AS idx_pct
|
|
460
|
+
FROM pg_stat_user_tables WHERE seq_scan > 100 ORDER BY seq_tup_read DESC LIMIT 20;
|
|
461
|
+
|
|
462
|
+
-- Unused indexes wasting disk and slowing writes
|
|
463
|
+
SELECT indexrelname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid)) AS size
|
|
464
|
+
FROM pg_stat_user_indexes WHERE idx_scan = 0 AND indexrelname NOT LIKE '%_pkey'
|
|
465
|
+
ORDER BY pg_relation_size(indexrelid) DESC LIMIT 20;
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## 11. Checklist: Before You Ship a Query
|
|
471
|
+
|
|
472
|
+
- [ ] Run EXPLAIN ANALYZE on production-like data volumes
|
|
473
|
+
- [ ] Rows scanned vs returned ratio below 10:1
|
|
474
|
+
- [ ] Plan shows Index Scan, not Seq Scan on large tables
|
|
475
|
+
- [ ] No N+1 patterns -- related data loaded with eager loading
|
|
476
|
+
- [ ] No SELECT * -- only needed columns projected
|
|
477
|
+
- [ ] Pagination applied -- no unbounded result sets
|
|
478
|
+
- [ ] No functions on indexed columns -- queries are sargable
|
|
479
|
+
- [ ] Connection pool metrics verified under load
|
|
480
|
+
- [ ] Load tested at 2x expected traffic
|
|
481
|
+
- [ ] Monitoring dashboard and latency alerts configured
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
## 12. Sources
|
|
486
|
+
|
|
487
|
+
- [SQL Query Optimization Guide 2025 (AI2sql)](https://ai2sql.io/learn/sql-query-optimization-guide)
|
|
488
|
+
- [High-Performance SQL: 12 Proven Techniques (TXMinds)](https://www.txminds.com/blog/sql-query-optimization-techniques/)
|
|
489
|
+
- [SQL Query Optimization: 15 Techniques (DataCamp)](https://www.datacamp.com/blog/sql-query-optimization)
|
|
490
|
+
- [PostgreSQL EXPLAIN ANALYZE Guide (EDB)](https://www.enterprisedb.com/blog/postgresql-query-optimization-performance-tuning-with-explain-analyze)
|
|
491
|
+
- [PostgreSQL Documentation: Using EXPLAIN](https://www.postgresql.org/docs/current/using-explain.html)
|
|
492
|
+
- [Reading a Postgres EXPLAIN ANALYZE Plan (Thoughtbot)](https://thoughtbot.com/blog/reading-an-explain-analyze-query-plan)
|
|
493
|
+
- [EXPLAIN ANALYZE Guide (Crunchy Data)](https://www.crunchydata.com/blog/get-started-with-explain-analyze)
|
|
494
|
+
- [Postgres Scan Types in EXPLAIN Plans (Crunchy Data)](https://www.crunchydata.com/blog/postgres-scan-types-in-explain-plans)
|
|
495
|
+
- [N+1 Queries (Sentry Documentation)](https://docs.sentry.io/product/issues/issue-details/performance-issues/n-one-queries/)
|
|
496
|
+
- [N+1 Problem Deep Dive (Chaos and Order)](https://www.youngju.dev/blog/database/2026-03-03-n-plus-1-problem-deep-dive.en)
|
|
497
|
+
- [Django N+1 Problem (ScoutAPM)](https://www.scoutapm.com/blog/django-and-the-n1-queries-problem)
|
|
498
|
+
- [Find, Fix, Prevent N+1 on Rails (Doctolib)](https://medium.com/doctolib/how-to-find-fix-and-prevent-n-1-queries-on-rails-6b30d9cfbbaf)
|
|
499
|
+
- [PostgreSQL Indexing: B-Tree vs GIN vs BRIN (Medium)](https://medium.com/@ankush.thavali/postgresql-indexing-strategies-b-tree-vs-gin-vs-brin-38afcfe70d29)
|
|
500
|
+
- [Postgres GIN Indexes (pganalyze)](https://pganalyze.com/blog/gin-index)
|
|
501
|
+
- [Index Types in Aurora/RDS PostgreSQL (AWS)](https://aws.amazon.com/blogs/database/index-types-supported-in-amazon-aurora-postgresql-and-amazon-rds-for-postgresql-gin-gist-hash-brin/)
|
|
502
|
+
- [PostgreSQL Partial Indexes Documentation](https://www.postgresql.org/docs/current/indexes-partial.html)
|
|
503
|
+
- [Speeding Up PostgreSQL With Partial Indexes (Heap)](https://www.heap.io/blog/speeding-up-postgresql-queries-with-partial-indexes)
|
|
504
|
+
- [WordPress Optimization: 1 min to 20ms (WP Bullet)](https://wp-bullet.com/wordpress-database-optimization-case-study-slow-queries-from-1-minute-to-20-ms)
|
|
505
|
+
- [Optimizing 10 Slow SQL Server Queries (C# Corner)](https://www.c-sharpcorner.com/article/performance-tuning-case-study-optimizing-10-slow-sql-server-queries-step-by-ste/)
|
|
506
|
+
- [DBA Guide to Fixing Slow Queries 2025 (Medium)](https://medium.com/@jholt1055/database-query-optimization-the-complete-dba-guide-to-identifying-and-fixing-slow-queries-in-2025-80cf25c1c7bb)
|
|
507
|
+
- [SQL Anti-Patterns (Medium)](https://somnath-dutta.medium.com/sql-anti-patterns-what-not-to-do-in-sql-queries-0a7c5aac2e25)
|
|
508
|
+
- [34+ SQL Antipatterns (Sonra)](https://sonra.io/mastering-sql-how-to-detect-and-avoid-34-common-sql-antipatterns/)
|
|
509
|
+
- [Performance Anti-Patterns in DB Apps (InfoQ)](https://www.infoq.com/articles/Anti-Patterns-Alois-Reitbauer/)
|
|
510
|
+
- [About Pool Sizing (HikariCP Wiki)](https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing)
|
|
511
|
+
- [Optimal Connection Pool Size (Vlad Mihalcea)](https://vladmihalcea.com/optimal-connection-pool-size/)
|
|
512
|
+
- [MySQL Index Cardinality (Lullabot)](https://www.lullabot.com/articles/slow-queries-check-the-cardinality-of-your-mysql-indexes)
|
|
513
|
+
- [MongoDB Query Optimization Docs](https://www.mongodb.com/docs/manual/core/query-optimization/)
|
|
514
|
+
- [Denormalization in Databases (DataCamp)](https://www.datacamp.com/tutorial/denormalization)
|
|
515
|
+
- [Materialized Views in SQL (DEV Community)](https://dev.to/cristiansifuentes/materialized-views-in-sql-supercharging-read-performance-38n8)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Directory Purpose
|
|
2
|
+
|
|
3
|
+
The `backend` performance directory covers techniques for reducing server response times and maximizing throughput.
|
|
4
|
+
|
|
5
|
+
# Key Concepts
|
|
6
|
+
|
|
7
|
+
- Optimizing database interactions
|
|
8
|
+
- Managing concurrency and background tasks
|
|
9
|
+
- Protecting APIs from overload
|
|
10
|
+
|
|
11
|
+
# File Map
|
|
12
|
+
|
|
13
|
+
- `api-latency.md` — identifying and fixing slow endpoints
|
|
14
|
+
- `background-jobs.md` — offloading heavy work from the request cycle
|
|
15
|
+
- `connection-pooling.md` — managing database and network connections
|
|
16
|
+
- `database-query-optimization.md` — indexes, explain plans, and N+1 fixes
|
|
17
|
+
- `rate-limiting-and-throttling.md` — shedding load and protecting resources
|
|
18
|
+
|
|
19
|
+
# Reading Guide
|
|
20
|
+
|
|
21
|
+
If a specific endpoint is slow → read `api-latency.md`
|
|
22
|
+
If the database is bottlenecking → read `database-query-optimization.md` and `connection-pooling.md`
|
|
23
|
+
If a request does too much work → read `background-jobs.md`
|