@umacloud/knowledge 1.0.1
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/00-governance/governance-capabilities.md +557 -0
- package/00-governance/knowledge-map.md +39 -0
- package/00-governance/maintenance-policy.md +76 -0
- package/00-governance/review-checklist.md +81 -0
- package/README.md +13 -0
- package/ai/01-standards/agent-development-complete.md +691 -0
- package/ai/01-standards/llm-application-complete.md +488 -0
- package/ai/01-standards/mlops-complete.md +798 -0
- package/ai/01-standards/prompt-engineering-complete.md +646 -0
- package/ai/01-standards/rag-architecture-complete.md +649 -0
- package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
- package/ai/03-checklists/ai-project-checklist.md +215 -0
- package/ai/04-antipatterns/ai-antipatterns.md +661 -0
- package/ai/05-cases/case-rag-production.md +147 -0
- package/ai/06-glossary/ai-glossary.md +162 -0
- package/ai/agent-evaluation-benchmark.md +53 -0
- package/ai/ai-agent-memory-context-management.md +41 -0
- package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
- package/ai/ai-data-security-and-compliance-playbook.md +37 -0
- package/ai/ai-domain-index-and-checklist.md +40 -0
- package/ai/ai-governance-maturity-model.md +50 -0
- package/ai/ai-model-selection-and-routing-strategy.md +47 -0
- package/ai/ai-observability-and-oncall-runbook.md +52 -0
- package/ai/ai-rag-engineering-playbook.md +42 -0
- package/ai/ai-red-team-and-safety-evaluation.md +42 -0
- package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
- package/ai/llm-agent-engineering-deep-dive.md +57 -0
- package/ai/prompt-and-tool-guardrails.md +52 -0
- package/api/01-standards/enterprise-api-standards.md +198 -0
- package/api/01-standards/rest-api-design-guide.md +63 -0
- package/api/02-playbooks/api-pagination-playbook.md +93 -0
- package/api/02-playbooks/graphql-production-playbook.md +176 -0
- package/api/03-checklists/api-review-checklist.md +55 -0
- package/api/04-antipatterns/api-antipatterns.md +112 -0
- package/architecture/01-standards/api-gateway-patterns.md +496 -0
- package/architecture/01-standards/cloud-native-patterns.md +644 -0
- package/architecture/01-standards/distributed-systems-patterns.md +591 -0
- package/architecture/01-standards/event-driven-architecture.md +595 -0
- package/architecture/01-standards/microservices-patterns-complete.md +968 -0
- package/architecture/01-standards/microservices-patterns.md +495 -0
- package/architecture/01-standards/system-design-interview.md +664 -0
- package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
- package/architecture/02-playbooks/migration-playbook.md +780 -0
- package/architecture/02-playbooks/system-design-playbook.md +779 -0
- package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
- package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
- package/architecture/05-cases/case-netflix-microservices.md +413 -0
- package/architecture/06-glossary/architecture-glossary.md +164 -0
- package/architecture/adr-template-and-examples.md +38 -0
- package/architecture/api-gateway-deep-dive.md +1291 -0
- package/architecture/configuration-management.md +1162 -0
- package/architecture/distributed-transactions.md +1220 -0
- package/architecture/microservices-complete.md +735 -0
- package/architecture/resilience-and-disaster-patterns.md +37 -0
- package/architecture/service-governance.md +1198 -0
- package/architecture/system-architecture-deep-dive.md +37 -0
- package/backend/01-standards/analytics-and-growth.md +65 -0
- package/backend/01-standards/api-and-error-conventions.md +120 -0
- package/backend/01-standards/application-layering-and-packaging.md +160 -0
- package/backend/01-standards/auth-implementation.md +104 -0
- package/backend/01-standards/backend-framework-idioms.md +74 -0
- package/backend/01-standards/background-jobs-and-async.md +66 -0
- package/backend/01-standards/caching-strategies-complete.md +390 -0
- package/backend/01-standards/config-and-observability.md +77 -0
- package/backend/01-standards/data-modeling-and-persistence.md +94 -0
- package/backend/01-standards/django-complete.md +1765 -0
- package/backend/01-standards/email-and-notifications.md +64 -0
- package/backend/01-standards/fastapi-complete.md +925 -0
- package/backend/01-standards/file-upload-and-storage.md +66 -0
- package/backend/01-standards/graphql-api-complete.md +416 -0
- package/backend/01-standards/llm-application-standard.md +78 -0
- package/backend/01-standards/message-queue-patterns.md +379 -0
- package/backend/01-standards/microservices-and-distributed.md +78 -0
- package/backend/01-standards/nestjs-complete.md +2167 -0
- package/backend/01-standards/payment-integration.md +80 -0
- package/backend/01-standards/rate-limiting-complete.md +451 -0
- package/backend/01-standards/realtime-and-websocket.md +65 -0
- package/backend/01-standards/search-and-filtering.md +64 -0
- package/backend/01-standards/spring-boot-complete.md +445 -0
- package/backend/02-playbooks/api-design-playbook.md +718 -0
- package/backend/02-playbooks/email-send-playbook.md +130 -0
- package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
- package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
- package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
- package/backend/03-checklists/api-launch-checklist.md +189 -0
- package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
- package/blockchain/01-standards/blockchain-basics.md +557 -0
- package/blockchain/01-standards/smart-contract-development.md +1315 -0
- package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
- package/cicd/01-standards/github-actions-complete.md +473 -0
- package/cicd/01-standards/release-and-store-submission.md +75 -0
- package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
- package/cicd/02-playbooks/release-management-playbook.md +605 -0
- package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
- package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
- package/cicd/05-cases/case-deployment-automation.md +221 -0
- package/cicd/05-cases/case-gitops-transformation.md +212 -0
- package/cicd/06-glossary/cicd-glossary.md +114 -0
- package/cicd/cicd-blueprint-deep-dive.md +38 -0
- package/cicd/release-readiness-gate.md +37 -0
- package/cloud-native/01-standards/container-security.md +741 -0
- package/cloud-native/01-standards/kubernetes-complete.md +812 -0
- package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
- package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
- package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
- package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
- package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
- package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
- package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
- package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
- package/cloud-native/03-checklists/container-security-checklist.md +431 -0
- package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
- package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
- package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
- package/cloud-native/05-cases/case-k8s-migration.md +478 -0
- package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
- package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
- package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
- package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
- package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
- package/data/01-standards/elasticsearch-complete.md +2098 -0
- package/data/01-standards/postgresql-complete.md +1613 -0
- package/data/01-standards/redis-complete.md +1527 -0
- package/data/02-playbooks/database-optimization-playbook.md +403 -0
- package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
- package/data/03-checklists/database-launch-checklist.md +187 -0
- package/data/04-antipatterns/database-antipatterns.md +873 -0
- package/data/05-cases/case-database-migration.md +310 -0
- package/data/06-glossary/database-glossary.md +440 -0
- package/data/data-governance-and-modeling-deep-dive.md +39 -0
- package/data-engineering/01-standards/airflow-complete.md +523 -0
- package/data-engineering/01-standards/kafka-complete.md +1521 -0
- package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
- package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
- package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
- package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
- package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
- package/database/01-standards/database-schema-standards.md +147 -0
- package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
- package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
- package/database/02-playbooks/postgresql-production-playbook.md +146 -0
- package/database/02-playbooks/redis-caching-playbook.md +117 -0
- package/database/03-checklists/database-review-checklist.md +50 -0
- package/database/04-antipatterns/database-antipatterns.md +112 -0
- package/design/01-standards/ui-design-system-complete.md +423 -0
- package/design/02-playbooks/design-handoff-playbook.md +254 -0
- package/design/02-playbooks/design-review-playbook.md +388 -0
- package/design/03-checklists/design-review-checklist.md +246 -0
- package/design/04-antipatterns/design-antipatterns.md +378 -0
- package/design/05-cases/case-design-system-adoption.md +328 -0
- package/design/06-glossary/design-glossary.md +329 -0
- package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
- package/design/ux-system-deep-dive.md +38 -0
- package/design-systems/00-craft-rules.md +71 -0
- package/design-systems/aesthetic-families.md +43 -0
- package/design-systems/anti-ai-slop.md +162 -0
- package/design-systems/bold-geometric.md +120 -0
- package/design-systems/brutalist-bold.md +103 -0
- package/design-systems/editorial-clean.md +109 -0
- package/design-systems/glass-aurora.md +108 -0
- package/design-systems/modern-minimal.md +145 -0
- package/design-systems/premium-luxury.md +106 -0
- package/design-systems/product-type-design-map.md +48 -0
- package/design-systems/soft-warm.md +123 -0
- package/design-systems/tech-utility.md +113 -0
- package/desktop/01-standards/desktop-app-standard.md +72 -0
- package/desktop/01-standards/desktop-design.md +71 -0
- package/development/00-governance/document-template.md +41 -0
- package/development/01-standards/api-versioning-strategies.md +432 -0
- package/development/01-standards/authentication-patterns-complete.md +479 -0
- package/development/01-standards/css-architecture-complete.md +550 -0
- package/development/01-standards/database-migration-strategies.md +484 -0
- package/development/01-standards/elasticsearch-complete.md +347 -0
- package/development/01-standards/git-complete.md +371 -0
- package/development/01-standards/golang-complete.md +1565 -0
- package/development/01-standards/graphql-complete.md +298 -0
- package/development/01-standards/javascript-bundlers-complete.md +469 -0
- package/development/01-standards/javascript-typescript-complete.md +528 -0
- package/development/01-standards/jest-complete.md +275 -0
- package/development/01-standards/linux-complete.md +234 -0
- package/development/01-standards/logging-observability-complete.md +526 -0
- package/development/01-standards/microservices-communication.md +502 -0
- package/development/01-standards/mongodb-complete.md +406 -0
- package/development/01-standards/oauth2-complete.md +285 -0
- package/development/01-standards/performance-optimization-complete.md +289 -0
- package/development/01-standards/playwright-complete.md +247 -0
- package/development/01-standards/postgresql-complete.md +456 -0
- package/development/01-standards/pytest-complete.md +340 -0
- package/development/01-standards/python-async-programming.md +902 -0
- package/development/01-standards/python-complete.md +956 -0
- package/development/01-standards/python-decorators-complete.md +799 -0
- package/development/01-standards/python-design-patterns.md +2854 -0
- package/development/01-standards/python-packaging-distribution.md +420 -0
- package/development/01-standards/python-testing-strategies.md +607 -0
- package/development/01-standards/python-web-frameworks-comparison.md +471 -0
- package/development/01-standards/redis-complete.md +317 -0
- package/development/01-standards/rest-api-complete.md +316 -0
- package/development/01-standards/rust-complete.md +578 -0
- package/development/01-standards/typescript-advanced-types.md +1513 -0
- package/development/01-standards/web-security-complete.md +292 -0
- package/development/02-playbooks/api-design-playbook.md +810 -0
- package/development/02-playbooks/database-migration-playbook.md +580 -0
- package/development/02-playbooks/debugging-playbook.md +692 -0
- package/development/02-playbooks/feature-delivery-playbook.md +430 -0
- package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
- package/development/02-playbooks/performance-optimization-playbook.md +531 -0
- package/development/02-playbooks/performance-tuning-playbook.md +652 -0
- package/development/02-playbooks/refactor-playbook.md +403 -0
- package/development/02-playbooks/release-playbook.md +469 -0
- package/development/03-checklists/architecture-review-checklist.md +168 -0
- package/development/03-checklists/data-migration-checklist.md +157 -0
- package/development/03-checklists/oncall-handover-checklist.md +173 -0
- package/development/03-checklists/pr-checklist.md +158 -0
- package/development/03-checklists/production-readiness-checklist.md +190 -0
- package/development/03-checklists/release-readiness-checklist.md +154 -0
- package/development/03-checklists/security-review-checklist.md +182 -0
- package/development/04-antipatterns/api-antipatterns.md +657 -0
- package/development/04-antipatterns/architecture-antipatterns.md +686 -0
- package/development/04-antipatterns/backend-antipatterns.md +648 -0
- package/development/04-antipatterns/cicd-antipatterns.md +540 -0
- package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
- package/development/04-antipatterns/data-antipatterns.md +658 -0
- package/development/04-antipatterns/database-antipatterns.md +578 -0
- package/development/04-antipatterns/frontend-antipatterns.md +635 -0
- package/development/04-antipatterns/reliability-antipatterns.md +700 -0
- package/development/04-antipatterns/security-antipatterns.md +747 -0
- package/development/05-cases/case-api-version-migration.md +428 -0
- package/development/05-cases/case-authorization-hardening.md +383 -0
- package/development/05-cases/case-bluegreen-rollback.md +466 -0
- package/development/05-cases/case-cache-snowball-protection.md +485 -0
- package/development/05-cases/case-ci-cd-pipeline.md +544 -0
- package/development/05-cases/case-database-scaling.md +500 -0
- package/development/05-cases/case-db-hotspot-optimization.md +487 -0
- package/development/05-cases/case-incident-mttr-reduction.md +563 -0
- package/development/05-cases/case-microservice-migration.md +375 -0
- package/development/05-cases/case-performance-optimization.md +406 -0
- package/development/05-cases/case-security-incident-response.md +345 -0
- package/development/06-glossary/full-stack-glossary.md +166 -0
- package/development/09-maturity/quarterly-audit-template.md +35 -0
- package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
- package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
- package/development/12-scenarios/development-scenarios-guide.md +565 -0
- package/development/13-implementation-assets/implementation-toolkit.md +282 -0
- package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
- package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
- package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
- package/development/api-contract-and-versioning-guide.md +36 -0
- package/development/api-governance-complete.md +43 -0
- package/development/backend-engineering-complete.md +43 -0
- package/development/code-review-quality-complete.md +43 -0
- package/development/concurrency-reliability-complete.md +43 -0
- package/development/database-engineering-complete.md +43 -0
- package/development/engineering-effectiveness-complete.md +43 -0
- package/development/engineering-standards-deep-dive.md +38 -0
- package/development/frontend-engineering-complete.md +43 -0
- package/development/performance-capacity-complete.md +43 -0
- package/development/refactor-migration-complete.md +42 -0
- package/development/refactoring-and-techdebt-playbook.md +37 -0
- package/development/security-in-development-complete.md +43 -0
- package/devops/01-standards/cicd-pipeline-complete.md +262 -0
- package/devops/01-standards/docker-complete.md +1490 -0
- package/devops/01-standards/github-actions-complete.md +337 -0
- package/devops/01-standards/kubernetes-complete.md +638 -0
- package/devops/01-standards/terraform-complete.md +2117 -0
- package/devops/02-playbooks/docker-compose-playbook.md +233 -0
- package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
- package/devops/02-playbooks/docker-production-playbook.md +952 -0
- package/edge-iot/01-standards/edge-iot-complete.md +473 -0
- package/experts/architect/api-design.md +178 -0
- package/experts/architect/methodology.md +124 -0
- package/experts/architect/security.md +75 -0
- package/experts/backend-lead/methodology.md +216 -0
- package/experts/devops/methodology.md +160 -0
- package/experts/frontend-lead/methodology.md +178 -0
- package/experts/product-manager/industry/ecommerce.md +43 -0
- package/experts/product-manager/industry/saas.md +40 -0
- package/experts/product-manager/methodology.md +97 -0
- package/experts/qa-lead/methodology.md +123 -0
- package/experts/qa-lead/test-strategy.md +128 -0
- package/experts/uiux-designer/methodology.md +125 -0
- package/frontend/01-standards/accessibility-complete.md +532 -0
- package/frontend/01-standards/accessibility-standard.md +74 -0
- package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
- package/frontend/01-standards/design-tokens-complete.md +444 -0
- package/frontend/01-standards/forms-and-validation.md +77 -0
- package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
- package/frontend/01-standards/i18n-and-localization.md +65 -0
- package/frontend/01-standards/nextjs-complete.md +451 -0
- package/frontend/01-standards/react-complete.md +713 -0
- package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
- package/frontend/01-standards/react-hooks-complete.md +1171 -0
- package/frontend/01-standards/seo-and-web-vitals.md +77 -0
- package/frontend/01-standards/state-management-complete.md +444 -0
- package/frontend/01-standards/vue-complete.md +499 -0
- package/frontend/01-standards/vue3-complete.md +2002 -0
- package/frontend/01-standards/web-framework-best-practices.md +64 -0
- package/frontend/01-standards/web-performance-complete.md +495 -0
- package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
- package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
- package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
- package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
- package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
- package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
- package/frontend/03-checklists/component-quality-checklist.md +166 -0
- package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
- package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
- package/frontend/05-cases/case-performance-optimization.md +274 -0
- package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
- package/harmony/01-standards/harmonyos-design.md +65 -0
- package/high-quality-engineering-playbook.md +54 -0
- package/incident/01-standards/incident-response-complete.md +303 -0
- package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
- package/incident/02-playbooks/postmortem-playbook.md +398 -0
- package/incident/03-checklists/incident-readiness-checklist.md +181 -0
- package/incident/04-antipatterns/incident-antipatterns.md +490 -0
- package/incident/05-cases/case-cascade-failure.md +176 -0
- package/incident/06-glossary/incident-glossary.md +114 -0
- package/incident/postmortem-and-response-deep-dive.md +39 -0
- package/industries/ecommerce/ecommerce-complete.md +631 -0
- package/industries/education/education-complete.md +555 -0
- package/industries/fintech/fintech-complete.md +501 -0
- package/industries/gaming/gaming-complete.md +587 -0
- package/industries/healthcare/healthcare-complete.md +452 -0
- package/low-code/01-standards/low-code-complete.md +944 -0
- package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
- package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
- package/miniprogram/01-standards/miniprogram-design.md +61 -0
- package/miniprogram/01-standards/miniprogram-standard.md +81 -0
- package/mobile/01-standards/android-material-design.md +70 -0
- package/mobile/01-standards/flutter-complete.md +384 -0
- package/mobile/01-standards/ios-design-hig.md +78 -0
- package/mobile/01-standards/mobile-app-standard.md +85 -0
- package/mobile/01-standards/react-native-complete.md +352 -0
- package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
- package/mobile/02-playbooks/mobile-performance.md +473 -0
- package/mobile/03-checklists/mobile-release-checklist.md +234 -0
- package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
- package/mobile/05-cases/case-app-performance.md +500 -0
- package/mobile/05-cases/case-app-startup-optimization.md +218 -0
- package/mobile/06-glossary/mobile-glossary.md +484 -0
- package/observability/01-standards/observability-standards.md +103 -0
- package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
- package/observability/02-playbooks/structured-logging-playbook.md +73 -0
- package/observability/03-checklists/observability-checklist.md +54 -0
- package/observability/04-antipatterns/observability-antipatterns.md +106 -0
- package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
- package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
- package/operations/03-checklists/production-launch-checklist.md +365 -0
- package/operations/04-antipatterns/operations-antipatterns.md +664 -0
- package/operations/05-cases/case-sre-practices.md +581 -0
- package/operations/06-glossary/operations-glossary.md +120 -0
- package/operations/aiops-anomaly-detection.md +758 -0
- package/operations/capacity-planning.md +1061 -0
- package/operations/chaos-engineering.md +659 -0
- package/operations/incident-command-system.md +38 -0
- package/operations/observability-complete.md +442 -0
- package/operations/slo-sli-playbook.md +517 -0
- package/operations/sre-operations-deep-dive.md +39 -0
- package/package.json +8 -0
- package/performance/01-standards/performance-and-scalability.md +80 -0
- package/performance/01-standards/performance-standards.md +156 -0
- package/performance/02-playbooks/query-optimization-playbook.md +103 -0
- package/performance/03-checklists/performance-checklist.md +56 -0
- package/performance/04-antipatterns/performance-antipatterns.md +146 -0
- package/product/01-standards/product-management-complete.md +285 -0
- package/product/02-playbooks/feature-launch-playbook.md +207 -0
- package/product/02-playbooks/user-research-playbook.md +532 -0
- package/product/03-checklists/feature-launch-checklist.md +275 -0
- package/product/04-antipatterns/product-antipatterns.md +355 -0
- package/product/05-cases/case-mvp-to-scale.md +384 -0
- package/product/06-glossary/product-glossary.md +462 -0
- package/product/feature-prioritization-framework.md +40 -0
- package/product/kpi-and-metric-tree.md +37 -0
- package/product/product-discovery-and-prd-deep-dive.md +41 -0
- package/quantum/01-standards/quantum-complete.md +1186 -0
- package/security/01-standards/api-security-complete.md +511 -0
- package/security/01-standards/container-runtime-security.md +574 -0
- package/security/01-standards/data-protection-gdpr.md +543 -0
- package/security/01-standards/owasp-top10-complete.md +1890 -0
- package/security/01-standards/secure-coding-baseline.md +90 -0
- package/security/01-standards/supply-chain-security.md +441 -0
- package/security/01-standards/web-security-checklist.md +108 -0
- package/security/01-standards/zero-trust-architecture.md +521 -0
- package/security/02-playbooks/auth-sso-playbook.md +166 -0
- package/security/02-playbooks/incident-response-security-playbook.md +588 -0
- package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
- package/security/02-playbooks/payment-integration-playbook.md +119 -0
- package/security/02-playbooks/penetration-testing-playbook.md +517 -0
- package/security/03-checklists/security-audit-checklist.md +356 -0
- package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
- package/security/05-cases/case-log4shell-incident.md +537 -0
- package/security/05-cases/case-major-breaches.md +468 -0
- package/security/06-glossary/security-glossary.md +212 -0
- package/security/compliance-automation.md +993 -0
- package/security/container-security.md +680 -0
- package/security/devsecops-complete.md +426 -0
- package/security/sast-dast-sca.md +775 -0
- package/security/secrets-management.md +594 -0
- package/security/security-architecture-deep-dive.md +37 -0
- package/security/threat-modeling-stride-playbook.md +40 -0
- package/seed-templates/auth-system.md +59 -0
- package/seed-templates/blog-content.md +94 -0
- package/seed-templates/dashboard.md +89 -0
- package/seed-templates/docs-site.md +73 -0
- package/seed-templates/e-commerce.md +50 -0
- package/seed-templates/saas-landing.md +92 -0
- package/seed-templates/settings-page.md +51 -0
- package/testing/01-standards/test-strategy-and-layering.md +83 -0
- package/testing/01-standards/testing-strategy-complete.md +422 -0
- package/testing/01-standards/unit-testing-best-practices.md +118 -0
- package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
- package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
- package/testing/03-checklists/test-strategy-checklist.md +208 -0
- package/testing/04-antipatterns/testing-antipatterns.md +718 -0
- package/testing/05-cases/case-testing-transformation.md +300 -0
- package/testing/06-glossary/testing-glossary.md +110 -0
- package/testing/risk-based-test-matrix.md +36 -0
- package/testing/testing-strategy-deep-dive.md +37 -0
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: database-migration-playbook
|
|
3
|
+
title: 数据库迁移作战手册 (Database Migration Playbook)
|
|
4
|
+
domain: development
|
|
5
|
+
category: 02-playbooks
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [agent, checklist, database, development, migration, playbook, 前置条件, 回滚方案]
|
|
8
|
+
quality_score: 70
|
|
9
|
+
last_updated: 2026-06-15
|
|
10
|
+
---
|
|
11
|
+
# 数据库迁移作战手册 (Database Migration Playbook)
|
|
12
|
+
|
|
13
|
+
## 概述
|
|
14
|
+
|
|
15
|
+
数据库迁移是对数据库 Schema 或数据进行变更的结构化操作流程。由于数据库变更通常不可逆且直接影响线上业务,本手册定义了严格的前向/后向兼容策略、安全执行步骤、蓝绿部署方案和回滚机制,确保每次迁移可控、可回滚、零停机。
|
|
16
|
+
|
|
17
|
+
## 前置条件
|
|
18
|
+
|
|
19
|
+
### 必须满足
|
|
20
|
+
|
|
21
|
+
- [ ] 数据库有最新的完整备份(已验证可恢复)
|
|
22
|
+
- [ ] 已在与生产环境一致的测试环境验证迁移脚本
|
|
23
|
+
- [ ] 已评估迁移对表锁、写入性能的影响
|
|
24
|
+
- [ ] 已评估大表变更的执行时间(数据量 > 100 万行需特别关注)
|
|
25
|
+
- [ ] 已准备回滚脚本并验证
|
|
26
|
+
- [ ] 已获得 DBA 或技术负责人审批
|
|
27
|
+
|
|
28
|
+
### 建议满足
|
|
29
|
+
|
|
30
|
+
- [ ] 有数据库变更审计日志
|
|
31
|
+
- [ ] 有自动化迁移工具(Alembic、Flyway、Django Migrations、Prisma Migrate)
|
|
32
|
+
- [ ] 有数据库只读副本可用于验证
|
|
33
|
+
- [ ] 有慢查询监控
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 步骤一:迁移设计
|
|
38
|
+
|
|
39
|
+
### 1.1 前向兼容原则
|
|
40
|
+
|
|
41
|
+
前向兼容:新 Schema 能被旧代码正常使用。这是零停机部署的核心要求。
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
安全的变更(前向兼容):
|
|
45
|
+
✓ 新增列(带默认值或允许 NULL)
|
|
46
|
+
✓ 新增表
|
|
47
|
+
✓ 新增索引(CONCURRENTLY)
|
|
48
|
+
✓ 放宽约束(如 NOT NULL -> NULL)
|
|
49
|
+
|
|
50
|
+
危险的变更(需要特殊处理):
|
|
51
|
+
⚠ 重命名列/表
|
|
52
|
+
⚠ 修改列类型
|
|
53
|
+
⚠ 添加 NOT NULL 约束
|
|
54
|
+
⚠ 删除列/表
|
|
55
|
+
|
|
56
|
+
禁止直接执行的变更:
|
|
57
|
+
✗ 删除正在使用的列
|
|
58
|
+
✗ 重命名正在使用的列
|
|
59
|
+
✗ 修改正在使用列的类型(不兼容)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 1.2 安全重命名列的多步迁移
|
|
63
|
+
|
|
64
|
+
```sql
|
|
65
|
+
-- 场景:将 orders.user_name 重命名为 orders.customer_name
|
|
66
|
+
|
|
67
|
+
-- 迁移 1:添加新列
|
|
68
|
+
ALTER TABLE orders ADD COLUMN customer_name VARCHAR(100);
|
|
69
|
+
|
|
70
|
+
-- 迁移 2:双写(应用层同时写两列)
|
|
71
|
+
-- 代码变更:INSERT/UPDATE 同时写 user_name 和 customer_name
|
|
72
|
+
|
|
73
|
+
-- 迁移 3:数据回填
|
|
74
|
+
UPDATE orders SET customer_name = user_name WHERE customer_name IS NULL;
|
|
75
|
+
|
|
76
|
+
-- 迁移 4:切换读取(应用层从 customer_name 读取)
|
|
77
|
+
-- 代码变更:SELECT 改为读 customer_name
|
|
78
|
+
|
|
79
|
+
-- 迁移 5:停止写旧列
|
|
80
|
+
-- 代码变更:INSERT/UPDATE 只写 customer_name
|
|
81
|
+
|
|
82
|
+
-- 迁移 6:删除旧列(确认无代码引用后)
|
|
83
|
+
ALTER TABLE orders DROP COLUMN user_name;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 1.3 安全添加 NOT NULL 约束
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- 场景:为 orders.status 添加 NOT NULL 约束
|
|
90
|
+
|
|
91
|
+
-- 迁移 1:设置默认值并回填
|
|
92
|
+
ALTER TABLE orders ALTER COLUMN status SET DEFAULT 'draft';
|
|
93
|
+
UPDATE orders SET status = 'draft' WHERE status IS NULL;
|
|
94
|
+
|
|
95
|
+
-- 迁移 2:添加 CHECK 约束(不阻塞写入)
|
|
96
|
+
ALTER TABLE orders ADD CONSTRAINT orders_status_not_null
|
|
97
|
+
CHECK (status IS NOT NULL) NOT VALID;
|
|
98
|
+
|
|
99
|
+
-- 迁移 3:验证约束(扫描全表但不阻塞写入)
|
|
100
|
+
ALTER TABLE orders VALIDATE CONSTRAINT orders_status_not_null;
|
|
101
|
+
|
|
102
|
+
-- 迁移 4:转换为正式 NOT NULL(可选,PostgreSQL 12+)
|
|
103
|
+
ALTER TABLE orders ALTER COLUMN status SET NOT NULL;
|
|
104
|
+
ALTER TABLE orders DROP CONSTRAINT orders_status_not_null;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 1.4 大表安全加索引
|
|
108
|
+
|
|
109
|
+
```sql
|
|
110
|
+
-- PostgreSQL: 使用 CONCURRENTLY 避免锁表
|
|
111
|
+
CREATE INDEX CONCURRENTLY idx_orders_user_created
|
|
112
|
+
ON orders(user_id, created_at DESC);
|
|
113
|
+
|
|
114
|
+
-- 注意事项:
|
|
115
|
+
-- 1. CONCURRENTLY 不能在事务内执行
|
|
116
|
+
-- 2. 如果中途失败,会留下 INVALID 索引,需要手动清理:
|
|
117
|
+
-- DROP INDEX CONCURRENTLY idx_orders_user_created;
|
|
118
|
+
-- 3. 会增加临时磁盘空间使用
|
|
119
|
+
|
|
120
|
+
-- MySQL: 使用 ALGORITHM=INPLACE 或 pt-online-schema-change
|
|
121
|
+
ALTER TABLE orders ADD INDEX idx_user_created (user_id, created_at),
|
|
122
|
+
ALGORITHM=INPLACE, LOCK=NONE;
|
|
123
|
+
|
|
124
|
+
-- 或使用 pt-online-schema-change(大表推荐)
|
|
125
|
+
pt-online-schema-change \
|
|
126
|
+
--alter "ADD INDEX idx_user_created (user_id, created_at)" \
|
|
127
|
+
--execute \
|
|
128
|
+
--chunk-size=1000 \
|
|
129
|
+
--max-lag=1 \
|
|
130
|
+
D=mydb,t=orders
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 步骤二:迁移脚本编写
|
|
136
|
+
|
|
137
|
+
### 2.1 Alembic (Python/SQLAlchemy)
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
"""add customer_name column to orders
|
|
141
|
+
|
|
142
|
+
Revision ID: a1b2c3d4e5f6
|
|
143
|
+
Revises: 9z8y7x6w5v4u
|
|
144
|
+
Create Date: 2024-01-15 10:30:00.000000
|
|
145
|
+
"""
|
|
146
|
+
from alembic import op
|
|
147
|
+
import sqlalchemy as sa
|
|
148
|
+
|
|
149
|
+
revision = 'a1b2c3d4e5f6'
|
|
150
|
+
down_revision = '9z8y7x6w5v4u'
|
|
151
|
+
|
|
152
|
+
def upgrade():
|
|
153
|
+
op.add_column('orders',
|
|
154
|
+
sa.Column('customer_name', sa.String(100), nullable=True, comment='客户名称')
|
|
155
|
+
)
|
|
156
|
+
# 回填数据
|
|
157
|
+
op.execute("""
|
|
158
|
+
UPDATE orders SET customer_name = user_name
|
|
159
|
+
WHERE customer_name IS NULL
|
|
160
|
+
""")
|
|
161
|
+
|
|
162
|
+
def downgrade():
|
|
163
|
+
op.drop_column('orders', 'customer_name')
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 2.2 Flyway (Java)
|
|
167
|
+
|
|
168
|
+
```sql
|
|
169
|
+
-- V20240115_1030__add_customer_name_to_orders.sql
|
|
170
|
+
|
|
171
|
+
-- 前向迁移
|
|
172
|
+
ALTER TABLE orders ADD COLUMN customer_name VARCHAR(100);
|
|
173
|
+
|
|
174
|
+
-- 回填
|
|
175
|
+
UPDATE orders SET customer_name = user_name WHERE customer_name IS NULL;
|
|
176
|
+
|
|
177
|
+
-- 添加注释
|
|
178
|
+
COMMENT ON COLUMN orders.customer_name IS '客户名称';
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
```sql
|
|
182
|
+
-- U20240115_1030__add_customer_name_to_orders.sql (回滚脚本)
|
|
183
|
+
|
|
184
|
+
ALTER TABLE orders DROP COLUMN IF EXISTS customer_name;
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 2.3 Prisma Migrate (Node.js)
|
|
188
|
+
|
|
189
|
+
```prisma
|
|
190
|
+
// schema.prisma - 变更后
|
|
191
|
+
model Order {
|
|
192
|
+
id Int @id @default(autoincrement())
|
|
193
|
+
userId Int @map("user_id")
|
|
194
|
+
customerName String? @map("customer_name") @db.VarChar(100)
|
|
195
|
+
status String @default("draft") @db.VarChar(20)
|
|
196
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
197
|
+
|
|
198
|
+
@@map("orders")
|
|
199
|
+
@@index([userId, createdAt(sort: Desc)])
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# 生成迁移
|
|
205
|
+
npx prisma migrate dev --name add_customer_name
|
|
206
|
+
|
|
207
|
+
# 检查生成的 SQL
|
|
208
|
+
cat prisma/migrations/20240115103000_add_customer_name/migration.sql
|
|
209
|
+
|
|
210
|
+
# 生产环境执行
|
|
211
|
+
npx prisma migrate deploy
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 2.4 迁移脚本审查清单
|
|
215
|
+
|
|
216
|
+
```markdown
|
|
217
|
+
每个迁移脚本必须检查:
|
|
218
|
+
|
|
219
|
+
- [ ] 有对应的 downgrade/回滚脚本
|
|
220
|
+
- [ ] 不包含不可逆操作(或已标注风险并有备份方案)
|
|
221
|
+
- [ ] 大表操作有执行时间预估
|
|
222
|
+
- [ ] 索引变更使用 CONCURRENTLY 或等价方式
|
|
223
|
+
- [ ] 不在事务中执行耗时操作(避免长事务锁表)
|
|
224
|
+
- [ ] 有数据回填逻辑时分批执行
|
|
225
|
+
- [ ] 不包含硬编码的业务数据
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 步骤三:迁移执行
|
|
231
|
+
|
|
232
|
+
### 3.1 预发布环境验证
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# 在预发布环境执行迁移
|
|
236
|
+
# 1. 获取当前状态
|
|
237
|
+
alembic current
|
|
238
|
+
|
|
239
|
+
# 2. 检查待执行的迁移
|
|
240
|
+
alembic history --verbose
|
|
241
|
+
|
|
242
|
+
# 3. 模拟执行(只输出 SQL,不实际执行)
|
|
243
|
+
alembic upgrade head --sql > migration_preview.sql
|
|
244
|
+
cat migration_preview.sql
|
|
245
|
+
|
|
246
|
+
# 4. 实际执行
|
|
247
|
+
alembic upgrade head
|
|
248
|
+
|
|
249
|
+
# 5. 验证
|
|
250
|
+
alembic current
|
|
251
|
+
psql -c "\d orders" # 检查表结构
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### 3.2 生产环境执行
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
#!/bin/bash
|
|
258
|
+
# migrate_production.sh
|
|
259
|
+
|
|
260
|
+
set -euo pipefail
|
|
261
|
+
|
|
262
|
+
DB_HOST="production-db.example.com"
|
|
263
|
+
DB_NAME="production"
|
|
264
|
+
DB_USER="migrate_user"
|
|
265
|
+
BACKUP_DIR="/backups/$(date +%Y%m%d_%H%M%S)"
|
|
266
|
+
|
|
267
|
+
echo "=== 生产环境数据库迁移 ==="
|
|
268
|
+
echo "时间: $(date)"
|
|
269
|
+
echo "目标: $DB_HOST/$DB_NAME"
|
|
270
|
+
|
|
271
|
+
# 步骤 1: 备份
|
|
272
|
+
echo "[1/6] 创建备份..."
|
|
273
|
+
mkdir -p "$BACKUP_DIR"
|
|
274
|
+
pg_dump -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" \
|
|
275
|
+
--format=custom \
|
|
276
|
+
--compress=9 \
|
|
277
|
+
> "$BACKUP_DIR/pre_migration.dump"
|
|
278
|
+
echo "备份完成: $BACKUP_DIR/pre_migration.dump"
|
|
279
|
+
echo "备份大小: $(du -h "$BACKUP_DIR/pre_migration.dump" | cut -f1)"
|
|
280
|
+
|
|
281
|
+
# 步骤 2: 检查当前状态
|
|
282
|
+
echo "[2/6] 检查当前迁移状态..."
|
|
283
|
+
alembic current
|
|
284
|
+
|
|
285
|
+
# 步骤 3: 检查活跃连接
|
|
286
|
+
echo "[3/6] 检查活跃连接..."
|
|
287
|
+
ACTIVE_CONNS=$(psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -t -c \
|
|
288
|
+
"SELECT count(*) FROM pg_stat_activity WHERE state = 'active' AND pid != pg_backend_pid();")
|
|
289
|
+
echo "活跃连接数: $ACTIVE_CONNS"
|
|
290
|
+
|
|
291
|
+
# 步骤 4: 执行迁移
|
|
292
|
+
echo "[4/6] 执行迁移..."
|
|
293
|
+
START_TIME=$(date +%s)
|
|
294
|
+
alembic upgrade head
|
|
295
|
+
END_TIME=$(date +%s)
|
|
296
|
+
echo "迁移耗时: $((END_TIME - START_TIME)) 秒"
|
|
297
|
+
|
|
298
|
+
# 步骤 5: 验证
|
|
299
|
+
echo "[5/6] 验证迁移..."
|
|
300
|
+
alembic current
|
|
301
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "\d orders" | head -20
|
|
302
|
+
|
|
303
|
+
# 步骤 6: 健康检查
|
|
304
|
+
echo "[6/6] 应用健康检查..."
|
|
305
|
+
for i in {1..5}; do
|
|
306
|
+
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://api.example.com/health)
|
|
307
|
+
echo "健康检查 $i: $STATUS"
|
|
308
|
+
sleep 5
|
|
309
|
+
done
|
|
310
|
+
|
|
311
|
+
echo "=== 迁移完成 ==="
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 3.3 大数据量回填
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
# 分批回填数据,避免长事务和锁表
|
|
318
|
+
|
|
319
|
+
import time
|
|
320
|
+
from sqlalchemy import text
|
|
321
|
+
|
|
322
|
+
def backfill_customer_name(engine, batch_size=5000):
|
|
323
|
+
"""分批回填 customer_name"""
|
|
324
|
+
total_updated = 0
|
|
325
|
+
start_time = time.time()
|
|
326
|
+
|
|
327
|
+
while True:
|
|
328
|
+
with engine.begin() as conn:
|
|
329
|
+
result = conn.execute(text("""
|
|
330
|
+
UPDATE orders
|
|
331
|
+
SET customer_name = user_name
|
|
332
|
+
WHERE id IN (
|
|
333
|
+
SELECT id FROM orders
|
|
334
|
+
WHERE customer_name IS NULL
|
|
335
|
+
LIMIT :batch_size
|
|
336
|
+
)
|
|
337
|
+
"""), {"batch_size": batch_size})
|
|
338
|
+
|
|
339
|
+
rows_affected = result.rowcount
|
|
340
|
+
total_updated += rows_affected
|
|
341
|
+
|
|
342
|
+
if rows_affected == 0:
|
|
343
|
+
break
|
|
344
|
+
|
|
345
|
+
# 打印进度
|
|
346
|
+
elapsed = time.time() - start_time
|
|
347
|
+
print(f"已更新 {total_updated} 行, 耗时 {elapsed:.1f}s")
|
|
348
|
+
|
|
349
|
+
# 控制速度,避免对线上造成压力
|
|
350
|
+
time.sleep(0.5)
|
|
351
|
+
|
|
352
|
+
print(f"回填完成: 共更新 {total_updated} 行, 总耗时 {time.time() - start_time:.1f}s")
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 步骤四:蓝绿部署中的迁移
|
|
358
|
+
|
|
359
|
+
### 4.1 蓝绿部署迁移策略
|
|
360
|
+
|
|
361
|
+
```
|
|
362
|
+
蓝绿部署中数据库迁移的核心约束:
|
|
363
|
+
蓝(旧版本)和绿(新版本)共享同一个数据库,
|
|
364
|
+
因此 Schema 变更必须同时兼容两个版本。
|
|
365
|
+
|
|
366
|
+
部署顺序:
|
|
367
|
+
1. 执行前向兼容的数据库迁移
|
|
368
|
+
2. 部署绿环境(新代码)
|
|
369
|
+
3. 验证绿环境
|
|
370
|
+
4. 切换流量到绿环境
|
|
371
|
+
5. 观察稳定后,执行清理迁移(删除旧列等)
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
```
|
|
375
|
+
时间线示例(重命名列):
|
|
376
|
+
|
|
377
|
+
T1: [蓝: 读写 user_name] [DB: user_name]
|
|
378
|
+
执行迁移: ADD customer_name
|
|
379
|
+
|
|
380
|
+
T2: [蓝: 读写 user_name] [DB: user_name + customer_name]
|
|
381
|
+
部署绿: 双写 user_name + customer_name,读 customer_name
|
|
382
|
+
|
|
383
|
+
T3: [绿: 双写, 读 customer_name] [DB: user_name + customer_name]
|
|
384
|
+
回填 customer_name
|
|
385
|
+
|
|
386
|
+
T4: [绿: 双写, 读 customer_name] [DB: user_name + customer_name, 数据已同步]
|
|
387
|
+
切换流量到绿
|
|
388
|
+
|
|
389
|
+
T5: [绿: 只写 customer_name] [DB: user_name + customer_name]
|
|
390
|
+
确认稳定后
|
|
391
|
+
|
|
392
|
+
T6: [绿: 只写 customer_name] [DB: customer_name]
|
|
393
|
+
执行清理迁移: DROP user_name
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### 4.2 双写中间层
|
|
397
|
+
|
|
398
|
+
```python
|
|
399
|
+
class OrderRepository:
|
|
400
|
+
"""支持蓝绿部署的双写 Repository"""
|
|
401
|
+
|
|
402
|
+
def __init__(self, migration_phase: str = "dual_write"):
|
|
403
|
+
# 配置迁移阶段:
|
|
404
|
+
# "old_only" - 只使用旧列
|
|
405
|
+
# "dual_write" - 双写,读新列
|
|
406
|
+
# "new_only" - 只使用新列
|
|
407
|
+
self.phase = migration_phase
|
|
408
|
+
|
|
409
|
+
def create_order(self, data: dict):
|
|
410
|
+
if self.phase == "old_only":
|
|
411
|
+
return self._insert(user_name=data["name"])
|
|
412
|
+
elif self.phase == "dual_write":
|
|
413
|
+
return self._insert(
|
|
414
|
+
user_name=data["name"],
|
|
415
|
+
customer_name=data["name"]
|
|
416
|
+
)
|
|
417
|
+
else: # new_only
|
|
418
|
+
return self._insert(customer_name=data["name"])
|
|
419
|
+
|
|
420
|
+
def get_order_name(self, order):
|
|
421
|
+
if self.phase == "old_only":
|
|
422
|
+
return order.user_name
|
|
423
|
+
else:
|
|
424
|
+
return order.customer_name or order.user_name
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## 步骤五:验证
|
|
430
|
+
|
|
431
|
+
### 5.1 迁移后检查
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
#!/bin/bash
|
|
435
|
+
# verify_migration.sh
|
|
436
|
+
|
|
437
|
+
echo "=== 迁移后验证 ==="
|
|
438
|
+
|
|
439
|
+
# 1. 表结构验证
|
|
440
|
+
echo "[1] 表结构检查"
|
|
441
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "
|
|
442
|
+
SELECT column_name, data_type, is_nullable, column_default
|
|
443
|
+
FROM information_schema.columns
|
|
444
|
+
WHERE table_name = 'orders'
|
|
445
|
+
ORDER BY ordinal_position;
|
|
446
|
+
"
|
|
447
|
+
|
|
448
|
+
# 2. 索引验证
|
|
449
|
+
echo "[2] 索引检查"
|
|
450
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "
|
|
451
|
+
SELECT indexname, indexdef
|
|
452
|
+
FROM pg_indexes
|
|
453
|
+
WHERE tablename = 'orders';
|
|
454
|
+
"
|
|
455
|
+
|
|
456
|
+
# 3. 约束验证
|
|
457
|
+
echo "[3] 约束检查"
|
|
458
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "
|
|
459
|
+
SELECT conname, contype, pg_get_constraintdef(oid)
|
|
460
|
+
FROM pg_constraint
|
|
461
|
+
WHERE conrelid = 'orders'::regclass;
|
|
462
|
+
"
|
|
463
|
+
|
|
464
|
+
# 4. 数据一致性验证
|
|
465
|
+
echo "[4] 数据一致性"
|
|
466
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "
|
|
467
|
+
SELECT
|
|
468
|
+
COUNT(*) as total,
|
|
469
|
+
COUNT(customer_name) as has_customer_name,
|
|
470
|
+
COUNT(user_name) as has_user_name,
|
|
471
|
+
COUNT(CASE WHEN customer_name != user_name THEN 1 END) as mismatched
|
|
472
|
+
FROM orders;
|
|
473
|
+
"
|
|
474
|
+
|
|
475
|
+
# 5. 查询性能验证
|
|
476
|
+
echo "[5] 查询性能"
|
|
477
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c "
|
|
478
|
+
EXPLAIN (ANALYZE, BUFFERS)
|
|
479
|
+
SELECT id, customer_name, status
|
|
480
|
+
FROM orders
|
|
481
|
+
WHERE user_id = 12345
|
|
482
|
+
ORDER BY created_at DESC
|
|
483
|
+
LIMIT 20;
|
|
484
|
+
"
|
|
485
|
+
|
|
486
|
+
echo "=== 验证完成 ==="
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### 5.2 应用层验证
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
# API 功能验证
|
|
493
|
+
echo "创建订单测试"
|
|
494
|
+
curl -s -X POST http://api.example.com/api/v1/orders \
|
|
495
|
+
-H "Content-Type: application/json" \
|
|
496
|
+
-d '{"product_id": 1, "quantity": 1, "customer_name": "测试"}' | jq '.'
|
|
497
|
+
|
|
498
|
+
echo "查询订单测试"
|
|
499
|
+
curl -s http://api.example.com/api/v1/orders?user_id=12345 | jq '.data[0].customer_name'
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
## 回滚方案
|
|
505
|
+
|
|
506
|
+
### Schema 回滚
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
# Alembic 回滚
|
|
510
|
+
alembic downgrade -1 # 回滚一步
|
|
511
|
+
alembic downgrade <revision_id> # 回滚到指定版本
|
|
512
|
+
|
|
513
|
+
# Flyway 回滚
|
|
514
|
+
flyway undo
|
|
515
|
+
|
|
516
|
+
# Django 回滚
|
|
517
|
+
python manage.py migrate <app> <previous_migration>
|
|
518
|
+
|
|
519
|
+
# Prisma(无内置回滚,需手动)
|
|
520
|
+
psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -f rollback.sql
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### 数据回滚
|
|
524
|
+
|
|
525
|
+
```bash
|
|
526
|
+
# 从备份恢复整个数据库(最后手段)
|
|
527
|
+
pg_restore -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" \
|
|
528
|
+
--clean --if-exists \
|
|
529
|
+
"$BACKUP_DIR/pre_migration.dump"
|
|
530
|
+
|
|
531
|
+
# 恢复单表
|
|
532
|
+
pg_restore -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" \
|
|
533
|
+
--table=orders --data-only \
|
|
534
|
+
"$BACKUP_DIR/pre_migration.dump"
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### 回滚决策矩阵
|
|
538
|
+
|
|
539
|
+
| 场景 | 处理方式 | 时间预估 |
|
|
540
|
+
|------|---------|---------|
|
|
541
|
+
| 迁移脚本执行失败 | 事务自动回滚,修复后重试 | 即时 |
|
|
542
|
+
| 迁移成功但应用报错 | 执行 downgrade 脚本 | 分钟级 |
|
|
543
|
+
| 数据回填错误 | 从备份恢复受影响的表 | 取决于数据量 |
|
|
544
|
+
| 性能严重下降 | 回滚索引变更或 Schema 变更 | 分钟级 |
|
|
545
|
+
| 数据损坏 | 停止写入 + 从备份恢复 | 小时级 |
|
|
546
|
+
|
|
547
|
+
### 不可回滚的操作及应对
|
|
548
|
+
|
|
549
|
+
```markdown
|
|
550
|
+
以下操作一旦执行就无法简单回滚:
|
|
551
|
+
1. DROP COLUMN(数据丢失)→ 执行前必须备份该列数据
|
|
552
|
+
2. TRUNCATE TABLE → 执行前必须完整备份
|
|
553
|
+
3. 数据类型缩小(如 VARCHAR(200) → VARCHAR(100))→ 先验证数据范围
|
|
554
|
+
4. 删除索引后重建(大表耗时长)→ 评估重建时间
|
|
555
|
+
|
|
556
|
+
应对策略:
|
|
557
|
+
- 对不可逆操作,始终在执行前创建完整备份
|
|
558
|
+
- 在低峰期执行
|
|
559
|
+
- 保留回填脚本以备需要重建数据
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## Agent Checklist
|
|
565
|
+
|
|
566
|
+
AI 编码 Agent 在执行数据库迁移时必须逐项确认:
|
|
567
|
+
|
|
568
|
+
- [ ] **备份完成**:生产数据库有最新备份,已验证可恢复
|
|
569
|
+
- [ ] **前向兼容**:迁移后旧代码仍能正常运行
|
|
570
|
+
- [ ] **回滚脚本就绪**:每个 upgrade 都有对应的 downgrade
|
|
571
|
+
- [ ] **大表评估**:数据量 > 100 万行的表已评估锁影响和执行时间
|
|
572
|
+
- [ ] **索引安全**:使用 CONCURRENTLY 创建索引
|
|
573
|
+
- [ ] **分批回填**:数据回填分批执行,控制速度
|
|
574
|
+
- [ ] **预发布验证**:迁移脚本已在预发布环境成功执行
|
|
575
|
+
- [ ] **结构验证**:迁移后表结构、索引、约束均符合预期
|
|
576
|
+
- [ ] **数据验证**:迁移后数据一致性已确认
|
|
577
|
+
- [ ] **性能验证**:核心查询的执行计划无退化
|
|
578
|
+
- [ ] **应用验证**:应用层功能正常,无新增错误
|
|
579
|
+
- [ ] **清理计划**:蓝绿部署的旧列/旧表有计划的清理时间
|
|
580
|
+
- [ ] **文档更新**:ER 图和数据字典已同步更新
|