<?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>Document-Store on Tarragon</title><link>https://tarrragon.github.io/blog/tags/document-store/</link><description>Recent content in Document-Store on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 22 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/document-store/index.xml" rel="self" type="application/rss+xml"/><item><title>MySQL Document Store / X Protocol</title><link>https://tarrragon.github.io/blog/backend/01-database/vendors/mysql/document-store-x-protocol/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/01-database/vendors/mysql/document-store-x-protocol/</guid><description>&lt;p>MySQL Document Store / X Protocol 的核心責任是說明 MySQL 如何在 relational engine 內提供 JSON document workflow。&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/document-store/" data-link-title="Document Store" data-link-desc="說明以 JSON 文件與彈性 schema 提供資料存取的模式，以及它仍需的治理邊界">Document Store&lt;/a> 讓 application 透過 X Protocol 與 CRUD API 操作 collection，但資料仍落在 MySQL 的 storage、transaction、backup 與 permission 模型裡。&lt;/p>
&lt;p>本文的判讀錨點是：Document Store 是 MySQL 內的 document access pattern，而非 MongoDB 等專用 document database 的完整替代。它適合 relational schema 旁邊的 flexible JSON，但不適合把主要資料模型都藏進無治理 JSON。&lt;/p>
&lt;p>官方文件路由的核心責任是固定 X Protocol claim。實作前先查 &lt;a href="https://dev.mysql.com/doc/refman/en/document-store.html">MySQL 8.4 Document Store&lt;/a>；本文最後檢查日是 2026-05-22。&lt;/p>
&lt;h2 id="responsibility-boundary">Responsibility Boundary&lt;/h2>
&lt;p>Responsibility boundary 的核心責任是把 Document Store 和 SQL table 關係說清楚。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>面向&lt;/th>
 &lt;th>Document Store&lt;/th>
 &lt;th>SQL table / JSON column&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Access API&lt;/td>
 &lt;td>X Protocol、CRUD-style API&lt;/td>
 &lt;td>SQL、JSON function&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Storage&lt;/td>
 &lt;td>MySQL InnoDB&lt;/td>
 &lt;td>MySQL InnoDB&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Transaction&lt;/td>
 &lt;td>MySQL transaction&lt;/td>
 &lt;td>MySQL transaction&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Governance&lt;/td>
 &lt;td>仍需 backup、role、audit、migration&lt;/td>
 &lt;td>仍需 schema / index review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Query power&lt;/td>
 &lt;td>document-friendly access&lt;/td>
 &lt;td>SQL join、index、optimizer&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Document Store 的價值是降低 flexible object 的開發摩擦。它不免除資料合約、index、migration、backup 與 audit 的責任。&lt;/p>
&lt;h2 id="suitable-use-cases">Suitable Use Cases&lt;/h2>
&lt;p>Suitable use cases 的核心責任是找出 document pattern 的合理位置。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>情境&lt;/th>
 &lt;th>適合原因&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Profile / preference&lt;/td>
 &lt;td>欄位變動快、查詢條件少&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Integration payload&lt;/td>
 &lt;td>需要保存外部 JSON 原文&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Feature flag / config&lt;/td>
 &lt;td>讀多寫少、schema 變化頻繁&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hybrid relational + JSON&lt;/td>
 &lt;td>主體 relational，局部 flexible&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Prototype&lt;/td>
 &lt;td>先探索欄位，再逐步 relationalize&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Document Store 最適合局部 flexible data。若核心 query 需要大量 join、aggregation、transaction invariant，應把穩定欄位拉回 relational schema。&lt;/p>
&lt;h2 id="query-and-index">Query and Index&lt;/h2>
&lt;p>Query and index 的核心責任是避免 JSON 查詢變成不可觀測黑箱。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>問題&lt;/th>
 &lt;th>審查方向&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>常用 filter&lt;/td>
 &lt;td>是否需要 generated column / functional index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sort / pagination&lt;/td>
 &lt;td>是否能走 index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Schema drift&lt;/td>
 &lt;td>document version / validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Large document&lt;/td>
 &lt;td>update amplification、network payload&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Analytics&lt;/td>
 &lt;td>是否應 ETL 到 OLAP / warehouse&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>MySQL JSON 查詢可以從 generated column 建 index。正式服務要把常用 JSON path 寫進 query contract，避免每次都掃完整 document。&lt;/p></description><content:encoded><![CDATA[<p>MySQL Document Store / X Protocol 的核心責任是說明 MySQL 如何在 relational engine 內提供 JSON document workflow。<a href="/blog/backend/knowledge-cards/document-store/" data-link-title="Document Store" data-link-desc="說明以 JSON 文件與彈性 schema 提供資料存取的模式，以及它仍需的治理邊界">Document Store</a> 讓 application 透過 X Protocol 與 CRUD API 操作 collection，但資料仍落在 MySQL 的 storage、transaction、backup 與 permission 模型裡。</p>
<p>本文的判讀錨點是：Document Store 是 MySQL 內的 document access pattern，而非 MongoDB 等專用 document database 的完整替代。它適合 relational schema 旁邊的 flexible JSON，但不適合把主要資料模型都藏進無治理 JSON。</p>
<p>官方文件路由的核心責任是固定 X Protocol claim。實作前先查 <a href="https://dev.mysql.com/doc/refman/en/document-store.html">MySQL 8.4 Document Store</a>；本文最後檢查日是 2026-05-22。</p>
<h2 id="responsibility-boundary">Responsibility Boundary</h2>
<p>Responsibility boundary 的核心責任是把 Document Store 和 SQL table 關係說清楚。</p>
<table>
  <thead>
      <tr>
          <th>面向</th>
          <th>Document Store</th>
          <th>SQL table / JSON column</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Access API</td>
          <td>X Protocol、CRUD-style API</td>
          <td>SQL、JSON function</td>
      </tr>
      <tr>
          <td>Storage</td>
          <td>MySQL InnoDB</td>
          <td>MySQL InnoDB</td>
      </tr>
      <tr>
          <td>Transaction</td>
          <td>MySQL transaction</td>
          <td>MySQL transaction</td>
      </tr>
      <tr>
          <td>Governance</td>
          <td>仍需 backup、role、audit、migration</td>
          <td>仍需 schema / index review</td>
      </tr>
      <tr>
          <td>Query power</td>
          <td>document-friendly access</td>
          <td>SQL join、index、optimizer</td>
      </tr>
  </tbody>
</table>
<p>Document Store 的價值是降低 flexible object 的開發摩擦。它不免除資料合約、index、migration、backup 與 audit 的責任。</p>
<h2 id="suitable-use-cases">Suitable Use Cases</h2>
<p>Suitable use cases 的核心責任是找出 document pattern 的合理位置。</p>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>適合原因</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Profile / preference</td>
          <td>欄位變動快、查詢條件少</td>
      </tr>
      <tr>
          <td>Integration payload</td>
          <td>需要保存外部 JSON 原文</td>
      </tr>
      <tr>
          <td>Feature flag / config</td>
          <td>讀多寫少、schema 變化頻繁</td>
      </tr>
      <tr>
          <td>Hybrid relational + JSON</td>
          <td>主體 relational，局部 flexible</td>
      </tr>
      <tr>
          <td>Prototype</td>
          <td>先探索欄位，再逐步 relationalize</td>
      </tr>
  </tbody>
</table>
<p>Document Store 最適合局部 flexible data。若核心 query 需要大量 join、aggregation、transaction invariant，應把穩定欄位拉回 relational schema。</p>
<h2 id="query-and-index">Query and Index</h2>
<p>Query and index 的核心責任是避免 JSON 查詢變成不可觀測黑箱。</p>
<table>
  <thead>
      <tr>
          <th>問題</th>
          <th>審查方向</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>常用 filter</td>
          <td>是否需要 generated column / functional index</td>
      </tr>
      <tr>
          <td>Sort / pagination</td>
          <td>是否能走 index</td>
      </tr>
      <tr>
          <td>Schema drift</td>
          <td>document version / validation</td>
      </tr>
      <tr>
          <td>Large document</td>
          <td>update amplification、network payload</td>
      </tr>
      <tr>
          <td>Analytics</td>
          <td>是否應 ETL 到 OLAP / warehouse</td>
      </tr>
  </tbody>
</table>
<p>MySQL JSON 查詢可以從 generated column 建 index。正式服務要把常用 JSON path 寫進 query contract，避免每次都掃完整 document。</p>
<h2 id="migration-boundary">Migration Boundary</h2>
<p>Migration boundary 的核心責任是讓 document data 可演進。Document 欄位雖然 flexible，但 application 仍會依賴某些 key；這些 key 一旦進入 workflow，就要有版本與 validation。</p>
<p>最小治理：</p>
<ol>
<li>Document version field。</li>
<li>Required key validation at application boundary。</li>
<li>Backfill script for new required key。</li>
<li>Index review for promoted key。</li>
<li>Export / backup restore validation。</li>
</ol>
<p>當 JSON key 變成 join key、permission key 或 reporting key，應評估搬到 relational column。</p>
<h2 id="no-go-conditions">No-Go Conditions</h2>
<p>No-go conditions 的核心責任是指出 Document Store 的邊界。</p>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>建議路由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>主要資料都是 nested document</td>
          <td>MongoDB / document database evaluation</td>
      </tr>
      <tr>
          <td>大量 document aggregation</td>
          <td>OLAP / search / document-oriented engine</td>
      </tr>
      <tr>
          <td>JSON path 已成核心 index</td>
          <td>relationalize key 或 generated column</td>
      </tr>
      <tr>
          <td>需要跨 document complex join</td>
          <td>relational schema</td>
      </tr>
      <tr>
          <td>需要 schema governance</td>
          <td>migration + validation</td>
      </tr>
  </tbody>
</table>
<p>Document Store 要服務於 flexible edge，而非取代資料建模。當 flexible area 穩定下來，就把它納入 schema governance。</p>
<h2 id="下一步路由">下一步路由</h2>
<p>Document Store / X Protocol 完成後，JSON 與 SQL 能力讀 <a href="../modern-sql-features/">Modern SQL Features</a>；若主要資料模型是 document，讀 <a href="/blog/backend/01-database/vendors/mongodb/" data-link-title="MongoDB" data-link-desc="Document database 代表、Atlas managed、跨雲可用、許多大規模平台從 MongoDB 起家">MongoDB</a>；migration 到 PostgreSQL JSONB 可讀 <a href="../migrate-to-postgresql/">MySQL to PostgreSQL</a>。</p>
]]></content:encoded></item></channel></rss>