<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Writing-Spec on Tarragon</title><link>https://tarrragon.github.io/blog/tags/writing-spec/</link><description>Recent content in Writing-Spec on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Wed, 20 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/writing-spec/index.xml" rel="self" type="application/rss+xml"/><item><title>資料庫 Vendor 文章撰寫規格</title><link>https://tarrragon.github.io/blog/backend/01-database/vendor-article-spec/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/01-database/vendor-article-spec/</guid><description>&lt;p>資料庫 Vendor 文章撰寫規格的核心責任是把服務頁、深度文章與遷移 playbook 的分工固定下來。PostgreSQL 與 MySQL 已經提供 SQL baseline 的完整樣本；後續撰寫 SQLite、MongoDB、DynamoDB、Aurora、Spanner、Cosmos DB 與 CockroachDB 時，應沿用同一組教學功能檢查，但保留每個服務自己的資料形狀、操作責任與失敗語言。&lt;/p>
&lt;p>這份規格承接 &lt;a href="https://tarrragon.github.io/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">Vendor 深度技術文章寫作方法論&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">Migration Playbook 寫作方法論&lt;/a>。本文只處理資料庫模組的落地規格：哪些內容留在 vendor overview，哪些議題升級成 deep article，哪些變更需要 migration playbook。&lt;/p>
&lt;h2 id="判讀錨點">判讀錨點&lt;/h2>
&lt;p>資料庫 vendor 文章的錨點是正式狀態如何被保存、查詢、複製、演進與修復。產品功能、版本差異與雲端價格都只是材料；正文要把材料轉成讀者可操作的判準，讓讀者能判斷資料模型、交易需求、查詢邊界、容量壓力、操作責任與替代路由。&lt;/p>
&lt;p>PostgreSQL 與 MySQL 的 batch 顯示三個穩定事實。第一，SQL baseline 已經足以支撐其他服務頁開寫；第二，深度文章需要「何時不用」與真實案例 anchor 防止過度工程化；第三，跨 vendor 或 topology 變更需要獨立 playbook，不適合塞回 overview。&lt;/p>
&lt;h2 id="vendor-overview-規格">Vendor Overview 規格&lt;/h2>
&lt;p>Vendor overview 的責任是教讀者完成第一輪服務判斷。這一層回答服務承擔什麼資料責任、適合什麼壓力、日常有哪些操作決策、失效時先看哪些訊號，以及何時改走相鄰服務。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>規格面&lt;/th>
 &lt;th>必答問題&lt;/th>
 &lt;th>交付形態&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>服務定位&lt;/td>
 &lt;td>這個服務承擔 SQL、embedded、document、KV 或 &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/distributed-sql/" data-link-title="Distributed SQL" data-link-desc="把 SQL 與交易語意延伸到多節點與多區域的資料庫形態">distributed SQL&lt;/a> 哪一種責任&lt;/td>
 &lt;td>開場段、教學路線、最短判讀路徑&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>資料形狀&lt;/td>
 &lt;td>資料是 row、document、key-value、time-series、geo 還是 global record&lt;/td>
 &lt;td>適用場景、schema / index / partition 說明&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>一致性與交易&lt;/td>
 &lt;td>transaction、replica、multi-region 與 stale read 如何取捨&lt;/td>
 &lt;td>適用場景、不適用場景、跟其他 vendor 的取捨&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>操作責任&lt;/td>
 &lt;td>誰負責 backup、failover、upgrade、capacity、security 與 audit&lt;/td>
 &lt;td>容量規劃要點、常見陷阱、下一步路由&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>替代邊界&lt;/td>
 &lt;td>什麼條件下改走 SQL、document、KV、managed SQL 或 distributed SQL&lt;/td>
 &lt;td>同類對比、相鄰章節路由、下游 deep article&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>案例與限制&lt;/td>
 &lt;td>哪些案例能提供壓力訊號，哪些 claim 需要時間敏感標記&lt;/td>
 &lt;td>案例對照、已知 limitation、後續擴充候選&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>服務定位段要先把產品名稱放回資料庫分類語言。SQLite 的定位是 embedded formal state 與低操作成本；MongoDB 的定位是 document shape 與 schema governance；DynamoDB 的定位是 managed KV / document access pattern；Aurora 的定位是 managed SQL operation transfer；Spanner、Cosmos DB 與 CockroachDB 的定位是 global 或 distributed consistency。&lt;/p>
&lt;p>資料形狀段要讓讀者知道服務為哪種查詢與寫入模式付成本。Row model 適合交易與 ad-hoc query；document model 適合聚合資料與 schema flexibility；KV model 適合固定 access pattern；&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/distributed-sql/" data-link-title="Distributed SQL" data-link-desc="把 SQL 與交易語意延伸到多節點與多區域的資料庫形態">distributed SQL&lt;/a> 適合跨 region 一致性，但會把 latency、transaction retry 與成本模型帶進設計。&lt;/p></description><content:encoded><![CDATA[<p>資料庫 Vendor 文章撰寫規格的核心責任是把服務頁、深度文章與遷移 playbook 的分工固定下來。PostgreSQL 與 MySQL 已經提供 SQL baseline 的完整樣本；後續撰寫 SQLite、MongoDB、DynamoDB、Aurora、Spanner、Cosmos DB 與 CockroachDB 時，應沿用同一組教學功能檢查，但保留每個服務自己的資料形狀、操作責任與失敗語言。</p>
<p>這份規格承接 <a href="/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">Vendor 深度技術文章寫作方法論</a> 與 <a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">Migration Playbook 寫作方法論</a>。本文只處理資料庫模組的落地規格：哪些內容留在 vendor overview，哪些議題升級成 deep article，哪些變更需要 migration playbook。</p>
<h2 id="判讀錨點">判讀錨點</h2>
<p>資料庫 vendor 文章的錨點是正式狀態如何被保存、查詢、複製、演進與修復。產品功能、版本差異與雲端價格都只是材料；正文要把材料轉成讀者可操作的判準，讓讀者能判斷資料模型、交易需求、查詢邊界、容量壓力、操作責任與替代路由。</p>
<p>PostgreSQL 與 MySQL 的 batch 顯示三個穩定事實。第一，SQL baseline 已經足以支撐其他服務頁開寫；第二，深度文章需要「何時不用」與真實案例 anchor 防止過度工程化；第三，跨 vendor 或 topology 變更需要獨立 playbook，不適合塞回 overview。</p>
<h2 id="vendor-overview-規格">Vendor Overview 規格</h2>
<p>Vendor overview 的責任是教讀者完成第一輪服務判斷。這一層回答服務承擔什麼資料責任、適合什麼壓力、日常有哪些操作決策、失效時先看哪些訊號，以及何時改走相鄰服務。</p>
<table>
  <thead>
      <tr>
          <th>規格面</th>
          <th>必答問題</th>
          <th>交付形態</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>服務定位</td>
          <td>這個服務承擔 SQL、embedded、document、KV 或 <a href="/blog/backend/knowledge-cards/distributed-sql/" data-link-title="Distributed SQL" data-link-desc="把 SQL 與交易語意延伸到多節點與多區域的資料庫形態">distributed SQL</a> 哪一種責任</td>
          <td>開場段、教學路線、最短判讀路徑</td>
      </tr>
      <tr>
          <td>資料形狀</td>
          <td>資料是 row、document、key-value、time-series、geo 還是 global record</td>
          <td>適用場景、schema / index / partition 說明</td>
      </tr>
      <tr>
          <td>一致性與交易</td>
          <td>transaction、replica、multi-region 與 stale read 如何取捨</td>
          <td>適用場景、不適用場景、跟其他 vendor 的取捨</td>
      </tr>
      <tr>
          <td>操作責任</td>
          <td>誰負責 backup、failover、upgrade、capacity、security 與 audit</td>
          <td>容量規劃要點、常見陷阱、下一步路由</td>
      </tr>
      <tr>
          <td>替代邊界</td>
          <td>什麼條件下改走 SQL、document、KV、managed SQL 或 distributed SQL</td>
          <td>同類對比、相鄰章節路由、下游 deep article</td>
      </tr>
      <tr>
          <td>案例與限制</td>
          <td>哪些案例能提供壓力訊號，哪些 claim 需要時間敏感標記</td>
          <td>案例對照、已知 limitation、後續擴充候選</td>
      </tr>
  </tbody>
</table>
<p>服務定位段要先把產品名稱放回資料庫分類語言。SQLite 的定位是 embedded formal state 與低操作成本；MongoDB 的定位是 document shape 與 schema governance；DynamoDB 的定位是 managed KV / document access pattern；Aurora 的定位是 managed SQL operation transfer；Spanner、Cosmos DB 與 CockroachDB 的定位是 global 或 distributed consistency。</p>
<p>資料形狀段要讓讀者知道服務為哪種查詢與寫入模式付成本。Row model 適合交易與 ad-hoc query；document model 適合聚合資料與 schema flexibility；KV model 適合固定 access pattern；<a href="/blog/backend/knowledge-cards/distributed-sql/" data-link-title="Distributed SQL" data-link-desc="把 SQL 與交易語意延伸到多節點與多區域的資料庫形態">distributed SQL</a> 適合跨 region 一致性，但會把 latency、transaction retry 與成本模型帶進設計。</p>
<p>一致性與交易段要接回 <a href="/blog/backend/knowledge-cards/transaction-boundary/" data-link-title="Transaction Boundary" data-link-desc="說明哪些資料變更應在同一個交易中一起成功或一起回復">transaction boundary</a>、<a href="/blog/backend/knowledge-cards/isolation-level/" data-link-title="Isolation Level" data-link-desc="說明資料庫交易隔離級別如何影響並發讀寫結果">isolation level</a>、<a href="/blog/backend/knowledge-cards/replication-lag/" data-link-title="Replication Lag" data-link-desc="說明資料副本落後正式來源多久，以及它如何影響讀取正確性">replication lag</a> 與 <a href="/blog/backend/knowledge-cards/stale-read/" data-link-title="Stale Read" data-link-desc="讀取到落後於最新寫入版本的舊資料">stale read</a>。讀者需要知道的是哪種資料變更必須一起成功、哪種讀取可以接受延遲，以及跨 region 寫入是否值得支付協調成本。</p>
<p>操作責任段要把 managed 與 self-managed 的責任轉移寫清楚。自管服務保留控制權，團隊承擔 patch、backup、failover、capacity 與事故演練；managed 服務降低操作負擔，但增加平台限制、費用模型、版本節奏與 vendor-specific behavior。</p>
<p>替代邊界段要保留機會成本。PostgreSQL 或 MySQL 可以承擔多數 OLTP baseline；當 query 固定且高峰連線壓力明顯，DynamoDB 類服務可能更划算；當 document shape 主導資料模型，MongoDB 或 Cosmos DB 有更自然的操作語意；當 global write 是核心需求，Spanner、CockroachDB 或 Aurora DSQL 才進入主要比較。</p>
<p>案例與限制段要分開處理 evidence 與 backlog。案例提供流量形狀、資料形狀、失敗代價或回退路徑；limitation 承認正文還缺哪些維度，例如 PostgreSQL 目前仍需補 Security / RLS / audit logging、cross-region DR 與 managed PG 變體對比，MySQL 仍需補 deep article 的 anti-recommendation 與真實 incident anchor。</p>
<h2 id="deep-article-規格">Deep Article 規格</h2>
<p>Deep article 的責任是把 vendor overview 點到的單一機制展開成可操作教材。這一層不重寫服務選型，而是教讀者設定、觀測、除錯、容量估算與整合某個具體機制，例如 connection pool、replication topology、online schema change、<a href="/blog/backend/knowledge-cards/change-data-capture/" data-link-title="Change Data Capture" data-link-desc="說明資料變更如何被捕捉並傳送到其他系統">CDC</a>、partitioning、lock contention 或 PITR。</p>
<table>
  <thead>
      <tr>
          <th>規格面</th>
          <th>必答問題</th>
          <th>交付形態</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>問題情境</td>
          <td>什麼 production 壓力會讓這個機制變成主題</td>
          <td>開場場景、痛點、失效訊號</td>
      </tr>
      <tr>
          <td>核心機制</td>
          <td>該 vendor 如何實作這個能力，跟通用概念差在哪</td>
          <td>lifecycle、模式對照、內部元件責任</td>
      </tr>
      <tr>
          <td>操作流程</td>
          <td>讀者要如何配置、驗證、調整與演練</td>
          <td>step-by-step、config、query、command、驗證條件</td>
      </tr>
      <tr>
          <td>失敗模式</td>
          <td>哪些踩雷最常把服務推向事故</td>
          <td>production case、徵兆、根因、修法</td>
      </tr>
      <tr>
          <td>容量與觀測</td>
          <td>什麼 metric、query、log 或 cost signal 能判斷健康狀態</td>
          <td>容量規劃、觀測 metric、alert / dashboard route</td>
      </tr>
      <tr>
          <td>邊界與整合</td>
          <td>什麼條件下要換 sub-tool、改架構或回到 overview</td>
          <td>何時用、何時不用、sibling 對比、下一步路由</td>
      </tr>
  </tbody>
</table>
<p>問題情境段要用具體壓力啟動，產品文件定義只作為補充材料。Connection pool 可以從連線風暴與 backend slot 說起；replication 可以從 lag 與 failover 說起；PITR 可以從 restore 能力與 RPO 說起；lock contention 可以從交易範圍與 deadlock 訊號說起。</p>
<p>核心機制段要保留 vendor-specific 語意。PostgreSQL 的 WAL / LSN / replication slot、MVCC / vacuum、process-per-connection model 與 extension lifecycle 都有自己的操作語意；MySQL 的 binlog / GTID、InnoDB clustered index、gap / next-key lock、ProxySQL query rule 與 Vitess VSchema 也要用自己的語言展開。</p>
<p>操作流程段要把設定與判準綁在一起。Config、SQL、CLI 或 dashboard query 只在能支撐判讀時出現；每個操作要回答「如何知道它生效」「失敗時看到什麼」「可以停在哪個 rollback boundary」。</p>
<p>失敗模式段是 deep article 的主要價值。PostgreSQL / MySQL 既有文章多數已具備「5 個 Production 踩雷」；後續服務要維持這個密度，並優先補真實案例 anchor，避免所有案例都停在合成數字或典型設定。</p>
<p>容量與觀測段要讓 deep article 接回 04 / 09。資料庫機制常見的訊號包括 connection usage、replication lag、lock wait、dead tuple、buffer hit ratio、slow query、binlog retention、WAL growth、partition pruning 與 restore duration；這些訊號要能回到 <a href="/blog/backend/04-observability/observability-evidence-package/" data-link-title="4.20 Observability Evidence Package" data-link-desc="把 log、metric、trace、audit 與資料品質限制包成可交接證據">4.20 Observability Evidence Package</a> 或 <a href="/blog/backend/09-performance-capacity/bottleneck-localization/" data-link-title="9.5 瓶頸定位流程" data-link-desc="從 app 到 DB / cache / broker / 第三方 quota 的逐層瓶頸定位">9.5 瓶頸定位流程</a>。</p>
<p>邊界與整合段要補「何時不用」。MySQL audit 已經指出 deep article 容易缺 anti-recommendation；後續每篇 deep article 至少要有一段說明什麼規模、團隊能力或 workload 下暫時維持簡單設計更划算。</p>
<h2 id="hands-on--artifact-規格">Hands-on / Artifact 規格</h2>
<p>Hands-on / artifact 章節的責任是把 deep article 的機制判讀轉成可演練操作。這一層對齊 LLM <code>hands-on/</code> 的教學功能：讀者能跑出一個 local / staging lab，取得 config、query output、metric snapshot、validation result 或 rollback note，而不只停在概念理解。</p>
<table>
  <thead>
      <tr>
          <th>規格面</th>
          <th>必答問題</th>
          <th>交付形態</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Lab scope</td>
          <td>這個操作在 local、staging、managed sandbox 哪裡跑</td>
          <td>Docker Compose、CLI、SQL script、preview environment</td>
      </tr>
      <tr>
          <td>Input</td>
          <td>需要哪些 schema、seed data、config、credential</td>
          <td>setup checklist、sample data、env var</td>
      </tr>
      <tr>
          <td>操作步驟</td>
          <td>讀者照順序做什麼</td>
          <td>command / SQL / dashboard step</td>
      </tr>
      <tr>
          <td>Evidence</td>
          <td>怎麼知道操作成功、退化或失敗</td>
          <td>query output、metric snapshot、log、screenshot note</td>
      </tr>
      <tr>
          <td>Cleanup</td>
          <td>操作後哪些資料、帳號、route、backup 要清理</td>
          <td>teardown、rollback、retention note</td>
      </tr>
      <tr>
          <td>下一步路由</td>
          <td>操作結果要回到哪篇 deep article 或 migration</td>
          <td>overview、deep article、release gate、incident log</td>
      </tr>
  </tbody>
</table>
<p>PostgreSQL、MySQL 與 SQLite 已建立 hands-on 入口：<a href="/blog/backend/01-database/vendors/postgresql/hands-on/" data-link-title="PostgreSQL Hands-on 操作路線" data-link-desc="PostgreSQL local lab、connection pool、PITR restore drill、schema migration evidence 與 HA failover 的操作型章節設計">PostgreSQL hands-on</a>、<a href="/blog/backend/01-database/vendors/mysql/hands-on/" data-link-title="MySQL Hands-on 操作路線" data-link-desc="MySQL local lab、ProxySQL routing、online schema change、replication failover、backup restore 與 Vitess sandbox 的操作型章節設計">MySQL hands-on</a> 與 <a href="/blog/backend/01-database/vendors/sqlite/hands-on/" data-link-title="SQLite Hands-on 操作路線" data-link-desc="SQLite local file lab、backup / restore drill、WAL busy reproduction、migration fixture、D1 / Turso preview 的操作型章節設計">SQLite hands-on</a>。後續其他 database vendor 也要先建立 hands-on 入口，再依服務責任決定是否補完整操作正文。</p>
<h2 id="migration-playbook-規格">Migration Playbook 規格</h2>
<p>Migration playbook 的責任是處理跨 vendor、跨 topology 或跨 operational model 的變更流程。這一層的主體是差異盤點、階段切換、雙軌驗證、cutover、rollback / fail-forward 與 cleanup；它應作為獨立流程教材，而非 deep article 的長版或 vendor overview 的補充段。</p>
<table>
  <thead>
      <tr>
          <th>規格面</th>
          <th>必答問題</th>
          <th>交付形態</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Driver</td>
          <td>為什麼要遷，壓力來自成本、容量、合規、operation 還是 paradigm</td>
          <td>開場 driver、no-go condition、替代方案</td>
      </tr>
      <tr>
          <td>Diff audit</td>
          <td>source / target 在 schema、operation、paradigm、component、application、topology 哪裡不同</td>
          <td>6 維 audit、主導差異、type 判定</td>
      </tr>
      <tr>
          <td>Phase plan</td>
          <td>哪些工作能分段，哪些工作必須 parallel run 或長期混合</td>
          <td>phase、stream、owner、驗證門檻</td>
      </tr>
      <tr>
          <td>Evidence</td>
          <td>每個階段用什麼資料證明可前進</td>
          <td>validation query、row count、lag、error budget、cost</td>
      </tr>
      <tr>
          <td>Cutover</td>
          <td>什麼條件下切流，切流期間誰決策</td>
          <td>cutover window、rollback condition、decision log route</td>
      </tr>
      <tr>
          <td>Cleanup</td>
          <td>哪些舊路徑能退役，哪些證據要保留</td>
          <td>contract removal、backup retention、incident write-back</td>
      </tr>
  </tbody>
</table>
<p>Driver 段要先排除「因為新服務比較好」這類空泛動機。有效 driver 通常是單機 primary 上限、connection limit、replication lag、backup / restore 責任、multi-region residency、vendor operation transfer、schema feature gap 或成本曲線。</p>
<p>Diff audit 段要先決定 playbook type。MySQL → PostgreSQL 主要是 schema / dialect 差；PostgreSQL → Aurora 主要是 operational redesign；PostgreSQL → CockroachDB 或 Aurora DSQL 主要是 paradigm shift；partition redesign 是 topology re-layout。type 決定結構，不用把所有 playbook 壓成同一套 phase。</p>
<p>Phase plan 段要把不可逆動作放晚。Schema audit、application compatibility、shadow read、dual-write、backfill、CDC catch-up、read-only cutover 與 cleanup 要分出驗證門檻；長期混合架構要明確標示哪些 workload 保留在 source。</p>
<p>Evidence 段要把資料庫遷移接回 observability 與 reliability。Playbook 應要求 row count、checksum、replication lag、error rate、query latency、data quality 與 owner；這些 evidence 是 release gate、incident decision log 與 rollback 判斷的共同材料。</p>
<p>Cutover 段要把決策權責寫清楚。資料庫切流失敗通常代價高，正文要標示切流窗口、暫停條件、回退條件、資料凍結策略與 decision owner，並連到 <a href="/blog/backend/knowledge-cards/rollback-window/" data-link-title="Rollback Window" data-link-desc="說明變更進入 production 後還能用哪種方式回退或改路線的時間與條件">rollback window</a> 或 <a href="/blog/backend/knowledge-cards/rollback-condition/" data-link-title="Rollback Condition" data-link-desc="說明決策執行後出現哪些訊號時要撤回、回退或改路線">rollback condition</a>。</p>
<p>Cleanup 段要防止雙軌永久殘留。舊 schema、舊 writer、舊 CDC connector、舊 backup、舊 dashboard 與舊 runbook 都需要退役判準；資料保留、稽核與 incident write-back 要在 cleanup 前確認。</p>
<h2 id="從-postgresql--mysql-回收的調整項">從 PostgreSQL / MySQL 回收的調整項</h2>
<p>PostgreSQL 與 MySQL 的正文已經足以讓其他服務頁開寫。下一輪調整應集中在橫向品質；SQL baseline 可維持現有正文作為後續服務頁的比較基準。</p>
<h3 id="postgresql">PostgreSQL</h3>
<p>PostgreSQL 的下一輪擴充重點是補安全、災難復原與 managed variant。<a href="/blog/backend/01-database/vendors/postgresql/security-rls-audit-logging/" data-link-title="PostgreSQL Security / RLS / Audit Logging" data-link-desc="PostgreSQL role、grant、Row Level Security、pgAudit、log policy、PII access evidence 與合規路由">Security / RLS / audit logging</a> 可以連到資料保護與稽核章節；<a href="/blog/backend/01-database/vendors/postgresql/cross-region-dr/" data-link-title="PostgreSQL Cross-region DR" data-link-desc="PostgreSQL 跨區災難復原、physical replica、logical replication、backup restore、RPO / RTO 與 failover runbook">cross-region DR</a> 可以連到 reliability 與 incident decision；<a href="/blog/backend/01-database/vendors/postgresql/managed-pg-comparison/" data-link-title="Managed PostgreSQL Comparison" data-link-desc="RDS PostgreSQL、Aurora PostgreSQL、Cloud SQL、Azure Database for PostgreSQL、Neon、Supabase、Crunchy Bridge 的責任邊界比較">Managed PG Comparison</a> 與 <a href="/blog/backend/01-database/vendors/postgresql/specialized-pg-variants/" data-link-title="Specialized PostgreSQL Variants" data-link-desc="pgvectorscale、Citus、TimescaleDB、PostGIS、AlloyDB、Cosmos DB for PostgreSQL、serverless PG 等 PostgreSQL 變體的選型邊界">Specialized PostgreSQL Variants</a> 承接 AlloyDB、Cloud SQL、Cosmos DB for PostgreSQL 與 pgvectorscale。</p>
<p>PostgreSQL 的既有 limitation 已經標示 PG-favoring narrative 與時間敏感 claim。後續補文時要保留對手 vendor 的強項，例如專業 vector DB 的 scale、專業 time-series DB 的 ingestion、distributed SQL 的 global consistency 與 managed 平台的 operation transfer。</p>
<h3 id="mysql">MySQL</h3>
<p>MySQL 的下一輪擴充重點是補 anti-recommendation 與真實 case anchor。多數 deep article 已經有 production 踩雷，但還要加上「何時暫時不用這個機制」的段落，讓讀者知道維持單 primary、簡單 replication、原生 partition 或標準 backup 何時更划算；security、audit、Document Store、multi-source replication、HeatWave、memory contention 與 metadata lock 已先建立 outline 路由。</p>
<p>MySQL 的案例段要把 GitHub、Shopify、Slack、YouTube / Vitess 這些業界來源升級成具體 anchor。案例不只列公司名稱，還要回收它提供的流量形狀、<a href="/blog/backend/knowledge-cards/database-sharding/" data-link-title="Database Sharding" data-link-desc="說明資料庫如何依 shard key 分散資料、路由請求與承擔跨 shard 查詢成本">database sharding</a> 策略、schema change 壓力、failover 責任或工具演化原因。</p>
<h2 id="後續服務撰寫順序">後續服務撰寫順序</h2>
<p>後續服務撰寫順序要從 SQL baseline 推進到資料模型與操作責任差異。每一篇先完成 vendor overview，再依 overview 暴露出的機制缺口決定 deep article 或 migration playbook。</p>
<table>
  <thead>
      <tr>
          <th>批次</th>
          <th>服務</th>
          <th>開寫重點</th>
          <th>升級條件</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DB2</td>
          <td>SQLite</td>
          <td>embedded formal state、local data、testing DB、backup 邊界</td>
          <td>local-first sync、edge deployment 或 file corruption</td>
      </tr>
      <tr>
          <td>DB3</td>
          <td>MongoDB / DynamoDB</td>
          <td>document shape、access pattern、partition key、capacity mode</td>
          <td>shard expansion、Atlas migration、<a href="/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">hot partition</a></td>
      </tr>
      <tr>
          <td>DB4</td>
          <td>Aurora</td>
          <td>managed SQL、storage / compute 分離、failover、cost model</td>
          <td>PostgreSQL / MySQL 遷移、I/O-Optimized cost</td>
      </tr>
      <tr>
          <td>DB5</td>
          <td>Spanner / Cosmos DB</td>
          <td>global consistency、multi-region latency、consistency level</td>
          <td>regional rollout、API model migration</td>
      </tr>
      <tr>
          <td>DB6</td>
          <td>CockroachDB</td>
          <td>distributed SQL、transaction retry、range lease、compatibility</td>
          <td>PostgreSQL migration、multi-region topology</td>
      </tr>
  </tbody>
</table>
<p>SQLite 的重點是讓讀者知道單機正式狀態何時成立。它不應被寫成小型 PostgreSQL，而要處理 file lifecycle、embedded process boundary、backup、concurrency、migration 與測試資料責任。</p>
<p>MongoDB / DynamoDB 的重點是把資料形狀放在 SQL baseline 之後。MongoDB 應教 document shape、index、schema governance 與 transaction boundary；DynamoDB 應教 access pattern、partition key、capacity mode、<a href="/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">hot partition</a> 與 connection-free scaling。</p>
<p>Aurora 的重點是 operation transfer。它把 PostgreSQL / MySQL 相容介面放進 AWS-managed operational model；storage / compute 分離、cluster endpoint、replica、backup、failover、cost model 與 AWS 限制都會改變團隊責任。</p>
<p>Spanner / Cosmos DB 的重點是 global data responsibility。Spanner 應教 TrueTime、strong consistency、multi-region latency 與 cost；Cosmos DB 應教 consistency level、API model、partition、RU 與 Azure 約束。</p>
<p>CockroachDB 的重點是 distributed SQL 對 application contract 的影響。SQL 相容降低導入門檻，但 transaction retry、range lease、hot range、schema feature gap 與 multi-region topology 會改變 application 與 SRE 的責任。</p>
<h2 id="llm-depth-下一輪擴章-backlog">LLM-depth 下一輪擴章 Backlog</h2>
<p>LLM-depth 下一輪的責任是把每個資料庫服務從 T1 overview 推進到可教學的章節群。Overview 只回答第一輪服務判斷；deep article 回答穩定運作與排錯；migration playbook 回答跨 vendor、跨 topology 或跨 operational model 變更。</p>
<table>
  <thead>
      <tr>
          <th>服務</th>
          <th>目前狀態</th>
          <th>下一篇 deep article</th>
          <th>升級 playbook 候選</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>SQLite</td>
          <td>T1 overview 已完成</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/teaching-structure/" data-link-title="SQLite Teaching Structure" data-link-desc="SQLite 服務章節群的大綱：從 embedded formal state、WAL、backup、test fixture、local-first、edge SQLite 到遷移路由">teaching structure</a> + <a href="/blog/backend/01-database/vendors/sqlite/file-lifecycle-backup-boundary/" data-link-title="SQLite file lifecycle 與 backup boundary" data-link-desc="把 SQLite 單檔案正式狀態拆成 WAL、backup API、restore drill、corruption recovery 與操作責任邊界">file lifecycle / backup boundary</a></td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/migrate-to-postgresql/" data-link-title="SQLite to PostgreSQL Migration" data-link-desc="SQLite 升級到 PostgreSQL 的 driver、schema diff、data copy、dual run、cutover、rollback 與 cleanup">SQLite → PostgreSQL</a>、<a href="/blog/backend/01-database/vendors/sqlite/migrate-to-d1-turso/" data-link-title="SQLite to D1 / Turso Migration" data-link-desc="SQLite 轉向 Cloudflare D1、Turso / libSQL 的 edge driver、compatibility audit、data movement 與 rollback">SQLite → D1 / Turso</a></td>
      </tr>
      <tr>
          <td>MongoDB</td>
          <td>T1 overview 已完成</td>
          <td>document shape governance、index / shard key</td>
          <td>self-managed → Atlas、document model → relational split</td>
      </tr>
      <tr>
          <td>DynamoDB</td>
          <td>T1 overview 已完成</td>
          <td>partition key / hot partition、capacity mode</td>
          <td>DynamoDB → SQL / search / analytics split</td>
      </tr>
      <tr>
          <td>Aurora</td>
          <td>T1 overview 已完成</td>
          <td>failover / endpoint routing、I/O cost model</td>
          <td>PostgreSQL / MySQL → Aurora、Aurora → distributed SQL</td>
      </tr>
      <tr>
          <td>Spanner</td>
          <td>T1 overview 已完成</td>
          <td>TrueTime / transaction latency、multi-region topology</td>
          <td>regional SQL → Spanner</td>
      </tr>
      <tr>
          <td>Cosmos DB</td>
          <td>T1 overview 已完成</td>
          <td>consistency level / RU budgeting、partitioning</td>
          <td>API model migration、Cosmos DB → specialized store</td>
      </tr>
      <tr>
          <td>CockroachDB</td>
          <td>T1 overview 已完成</td>
          <td>transaction retry、range split / leaseholder</td>
          <td>PostgreSQL → CockroachDB、single-region → multi-region</td>
      </tr>
  </tbody>
</table>
<p>Backlog 的排序以學習梯度為準。SQLite 先處理單檔案正式狀態，補足「低操作成本如何 production 化」；MongoDB / DynamoDB 再處理資料形狀與 access pattern；Aurora 接 SQL operation transfer；Spanner、Cosmos DB 與 CockroachDB 最後處理 distributed consistency 與 multi-region topology。</p>
<h2 id="規格檢查清單">規格檢查清單</h2>
<p>資料庫 vendor 文章完成前要跑一次規格檢查。檢查通過代表本次內容可作為後續服務的基準；未通過時，先修正文再開下一篇。</p>
<ul>
<li>Vendor overview 已說清楚服務責任、資料形狀、一致性、操作責任、替代邊界、案例與 limitation。</li>
<li>Deep article 已包含問題情境、核心機制、操作流程、失敗模式、容量與觀測、邊界與整合。</li>
<li>Migration playbook 已完成 driver、diff audit、phase plan、evidence、cutover 與 cleanup。</li>
<li>表格後有情境化說明，沒有讓表格取代判讀。</li>
<li>案例提供壓力、失敗代價或回退條件，不只列公司名稱。</li>
<li>「何時不用」或 no-go condition 已出現在 deep article / migration playbook。</li>
<li>Time-sensitive vendor claim 有日期語境或指向官方文件。</li>
<li>下一步路由能接回主章、knowledge card、04 / 06 / 08 / 09 或 sibling vendor。</li>
</ul>
]]></content:encoded></item></channel></rss>