<?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>Cassandra on Tarragon</title><link>https://tarrragon.github.io/blog/tags/cassandra/</link><description>Recent content in Cassandra on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/cassandra/index.xml" rel="self" type="application/rss+xml"/><item><title>從 MongoDB / Cassandra 遷入 Cosmos DB：protocol-compat API drop-in vs native API paradigm shift、相容性邊界與 dual-write cutover</title><link>https://tarrragon.github.io/blog/backend/01-database/vendors/cosmosdb/migrate-from-mongodb-cassandra/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/01-database/vendors/cosmosdb/migrate-from-mongodb-cassandra/</guid><description>&lt;p>本文是 &lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/cosmosdb/" data-link-title="Azure Cosmos DB" data-link-desc="全球分散式 multi-model DB、5 個 consistency levels、Microsoft 自家 dogfood 證據">Cosmos DB&lt;/a> overview 的 migration playbook、寫作參照 &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>。從 MongoDB 或 Cassandra 遷入 Cosmos DB 的核心決策是 &lt;em>選哪條路徑&lt;/em> — 用 Cosmos 的 protocol-compat API（MongoDB API / Cassandra API）做 wire-protocol drop-in、driver 與 query 大致不動；還是換 native SQL API、把 application 重寫成 Cosmos native paradigm。這兩條路的 diff 維度、風險、不可逆性都不同、是一個 multi-element 的 migration 規劃。本文先把 driver 與 no-go 講清楚、再做 6 維 diff audit 分出兩條路徑、再進各自的 phase plan、evidence 與 cutover。&lt;/p>
&lt;p>API &lt;em>選擇判斷&lt;/em> 本身（MongoDB API vs SQL API 的四層 framing、dogfood signal、multi-model、跨雲 hedging）由 &lt;a href="../mongodb-api-vs-sql-api/">mongodb-api-vs-sql-api&lt;/a> 主寫、本文不重複展開那層對比；本文主寫 &lt;em>遷移流程&lt;/em> — 選定路徑後怎麼安全把資料與流量搬過去。&lt;/p>
&lt;p>Case anchor：&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/cases/microsoft-365-cosmos-db-analytics/" data-link-title="9.C30 Microsoft 365：從 MongoDB 遷移到 Cosmos DB 的分析平台" data-link-desc="Microsoft 365 把使用分析平台從 MongoDB 遷移到 Cosmos DB、planet-scale 全球分散式分析">9.C30 Microsoft 365&lt;/a>（MongoDB → Cosmos DB MongoDB API、planet-scale、dogfood）、&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/cases/forbes-mongodb-atlas-multi-cloud-migration/" data-link-title="9.C37 Forbes：自管 MongoDB → Atlas on GCP、build 時間 25 → 9 分鐘" data-link-desc="Forbes 把自管 MongoDB 遷到 Atlas on Google Cloud、6 個月完成、build 25 → 9 分鐘、120M 不重複訪客單月承接">9.C37 Forbes&lt;/a>（自管 → Atlas、6 個月、同 DB 換託管的時程對照）、&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/cases/coinbase-mongodb-document-platform/" data-link-title="9.C36 Coinbase：MongoDB 撐 Ruby 單體 &amp;#43; 1.5M reads/sec identity 服務" data-link-desc="Coinbase 以 MongoDB 為主資料層、自建 mongobetween connection proxy、users 服務在加密貨幣 surge 時撐 1.5M reads/sec">9.C36 Coinbase&lt;/a>（保留 MongoDB 補周邊、對照「不一定要遷」）。Microsoft 365 case 自承沒揭露 throughput / latency / cost 數字、本文不拿它當 benchmark、只取遷移路徑 frame。&lt;/p>
&lt;h2 id="driver為什麼遷什麼條件不遷">Driver：為什麼遷、什麼條件不遷&lt;/h2>
&lt;p>有效的遷移 driver 不是「Cosmos DB 比較好」、而是具體壓力：team 已綁 Azure 生態、需要 turnkey global distribution、自管 MongoDB / Cassandra cluster 的 ops 負擔要轉移、或需要 multi-model 把多個 NoSQL 集中治理。Microsoft 365 的 driver 是 planet-scale 全球分散 + Azure dogfood、不是 query 性能。&lt;/p></description><content:encoded><![CDATA[<p>本文是 <a href="/blog/backend/01-database/vendors/cosmosdb/" data-link-title="Azure Cosmos DB" data-link-desc="全球分散式 multi-model DB、5 個 consistency levels、Microsoft 自家 dogfood 證據">Cosmos DB</a> overview 的 migration playbook、寫作參照 <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>。從 MongoDB 或 Cassandra 遷入 Cosmos DB 的核心決策是 <em>選哪條路徑</em> — 用 Cosmos 的 protocol-compat API（MongoDB API / Cassandra API）做 wire-protocol drop-in、driver 與 query 大致不動；還是換 native SQL API、把 application 重寫成 Cosmos native paradigm。這兩條路的 diff 維度、風險、不可逆性都不同、是一個 multi-element 的 migration 規劃。本文先把 driver 與 no-go 講清楚、再做 6 維 diff audit 分出兩條路徑、再進各自的 phase plan、evidence 與 cutover。</p>
<p>API <em>選擇判斷</em> 本身（MongoDB API vs SQL API 的四層 framing、dogfood signal、multi-model、跨雲 hedging）由 <a href="../mongodb-api-vs-sql-api/">mongodb-api-vs-sql-api</a> 主寫、本文不重複展開那層對比；本文主寫 <em>遷移流程</em> — 選定路徑後怎麼安全把資料與流量搬過去。</p>
<p>Case anchor：<a href="/blog/backend/09-performance-capacity/cases/microsoft-365-cosmos-db-analytics/" data-link-title="9.C30 Microsoft 365：從 MongoDB 遷移到 Cosmos DB 的分析平台" data-link-desc="Microsoft 365 把使用分析平台從 MongoDB 遷移到 Cosmos DB、planet-scale 全球分散式分析">9.C30 Microsoft 365</a>（MongoDB → Cosmos DB MongoDB API、planet-scale、dogfood）、<a href="/blog/backend/09-performance-capacity/cases/forbes-mongodb-atlas-multi-cloud-migration/" data-link-title="9.C37 Forbes：自管 MongoDB → Atlas on GCP、build 時間 25 → 9 分鐘" data-link-desc="Forbes 把自管 MongoDB 遷到 Atlas on Google Cloud、6 個月完成、build 25 → 9 分鐘、120M 不重複訪客單月承接">9.C37 Forbes</a>（自管 → Atlas、6 個月、同 DB 換託管的時程對照）、<a href="/blog/backend/09-performance-capacity/cases/coinbase-mongodb-document-platform/" data-link-title="9.C36 Coinbase：MongoDB 撐 Ruby 單體 &#43; 1.5M reads/sec identity 服務" data-link-desc="Coinbase 以 MongoDB 為主資料層、自建 mongobetween connection proxy、users 服務在加密貨幣 surge 時撐 1.5M reads/sec">9.C36 Coinbase</a>（保留 MongoDB 補周邊、對照「不一定要遷」）。Microsoft 365 case 自承沒揭露 throughput / latency / cost 數字、本文不拿它當 benchmark、只取遷移路徑 frame。</p>
<h2 id="driver為什麼遷什麼條件不遷">Driver：為什麼遷、什麼條件不遷</h2>
<p>有效的遷移 driver 不是「Cosmos DB 比較好」、而是具體壓力：team 已綁 Azure 生態、需要 turnkey global distribution、自管 MongoDB / Cassandra cluster 的 ops 負擔要轉移、或需要 multi-model 把多個 NoSQL 集中治理。Microsoft 365 的 driver 是 planet-scale 全球分散 + Azure dogfood、不是 query 性能。</p>
<p>No-go condition（這些情況不該遷入 Cosmos DB）：</p>
<ul>
<li>跨雲是核心需求 — Cosmos DB 只在 Azure；跨雲彈性高於 Azure 整合時、MongoDB 留 <a href="/blog/backend/01-database/vendors/mongodb/" data-link-title="MongoDB" data-link-desc="Document database 代表、Atlas managed、跨雲可用、許多大規模平台從 MongoDB 起家">Atlas</a>（Forbes 路徑、跨 AWS / GCP / Azure）、Cassandra 留自管或 ScyllaDB。</li>
<li>需要 native MongoDB / Cassandra 最新 feature — Cosmos DB 的 protocol-compat API server version 落後原生、且部分 feature 行為不同。</li>
<li>未來雲商策略未定 — hedging 價值高於當下整合、見 <a href="/blog/backend/knowledge-cards/vendor-lock-in/" data-link-title="Vendor Lock-In" data-link-desc="說明採用供應商產品後，其 API 與格式滲入程式碼造成的退出成本">vendor lock-in</a> 的退出成本。</li>
<li>現有 cluster 補周邊就夠用 — Coinbase 保留 MongoDB 加 proxy / cache / predictive scaling、沒遷出。遷移成本高、先確認「補周邊」解不了問題再遷。</li>
</ul>
<h2 id="diff-audit6-維度分出兩條路徑">Diff audit：6 維度分出兩條路徑</h2>
<p>source（MongoDB / Cassandra）與 target（Cosmos DB）的差異按 6 維度盤點、兩條路徑的維度高低不同、這也是 type 判定的依據。</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>protocol-compat API（MongoDB / Cassandra API）</th>
          <th>native SQL API</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Schema</td>
          <td>Low — document / table shape 大致保留</td>
          <td>Medium — 重新建模成 Cosmos native document</td>
      </tr>
      <tr>
          <td>Operational</td>
          <td>High — 自管 cluster → managed RU/s + region</td>
          <td>High — 同左</td>
      </tr>
      <tr>
          <td>Paradigm</td>
          <td>Low — 仍 document / wide-column 語意</td>
          <td>High — 換 query 模型、index policy、RU 思維</td>
      </tr>
      <tr>
          <td>Components</td>
          <td>Medium — driver 保留、aggregation / CQL 部分要改</td>
          <td>High — driver、query layer、ORM 全換</td>
      </tr>
      <tr>
          <td>Application</td>
          <td>Medium — connection string、auth、consistency 對應</td>
          <td>High — 整個 data access layer 重寫</td>
      </tr>
      <tr>
          <td>Data topology</td>
          <td>High — replica set / ring → partition + multi-region</td>
          <td>High — 同左</td>
      </tr>
  </tbody>
</table>
<p>主導差異決定 type：</p>
<ul>
<li>protocol-compat 路徑 — 最大差異是 operational 與 data topology、paradigm 維持 Low、是 wire-compat 的 drop-in 但有相容 gap。對應 <strong>Type B drop-in（partial）</strong>：driver 不換、但每個 query pattern 要驗證相容性、不是無腦切換。</li>
<li>native API 路徑 — paradigm High + application High、是 <strong>Type E paradigm shift</strong>：不只搬資料、要重寫 application 的整個 data access layer。</li>
</ul>
<p>判讀句：protocol-compat 是「換底層儲存與運維、保留 query 介面」、native API 是「連 query 範式一起換」。多數遷移先走 protocol-compat 把資料與 ops 搬過去、native API 是後續若要拿完整 Cosmos feature（Change Feed、stored procedure 原生支援、SQL API query）才考慮的二次遷移 — 一次到位 native API 的工程複雜度與風險顯著更高。</p>
<h3 id="cassandra-路徑的專屬差異">Cassandra 路徑的專屬差異</h3>
<p>Cassandra → Cosmos DB Cassandra API 跟 MongoDB 路徑有一個關鍵不同：Cassandra 的資料建模是 <em>query-driven</em>（partition key + clustering key 對應 access pattern）、這套建模思維跟 Cosmos DB 的 logical partition 概念部分對齊、但 Cosmos DB 的 per-partition RU 上限（目前約 10,000 RU/s、vendor 規格、實作時 cross-verify Azure doc 當前值）與 RU 計費會讓原本 Cassandra 上「寬 partition + 大量 clustering row」的設計變成 hot partition 風險。CQL 的 consistency level（QUORUM / LOCAL_ONE 等）要對應到 Cosmos DB 的 5 個 consistency level、語義不是一對一、見 <a href="../consistency-levels-engineering/">consistency-levels-engineering</a>。Cassandra 的 secondary index / materialized view 在 Cassandra API 的支援度要逐項驗證（時間敏感、查文件）。</p>
<h2 id="phase-plan">Phase plan</h2>
<p>兩條路徑共用大架構、protocol-compat 的相容 audit 較輕、native API 多一段 application 重寫。</p>
<h3 id="protocol-compat-路徑type-b-drop-in">protocol-compat 路徑（Type B drop-in）</h3>
<ul>
<li>Phase 0：相容性 audit — 把 production query / aggregation pipeline（MongoDB）或 CQL statement（Cassandra）拉出來、逐條對照 Cosmos DB 對應 API 的 <a href="https://learn.microsoft.com/azure/cosmos-db/mongodb/feature-support-60">feature support</a> 清單、列出 unsupported 與行為不同的部分。</li>
<li>Phase 1：partition key 設計 — MongoDB shard key / Cassandra partition key 翻譯成 Cosmos logical partition key、檢查 10,000 RU/s 上限與 hot partition 風險、見 <a href="../partition-key-design/">partition-key-design</a>。</li>
<li>Phase 2：bulk export-import — 初始資料用 Data Migration Tool / mongodump / sstable export 灌入。</li>
<li>Phase 3：CDC sync — source 的持續變更（MongoDB oplog / Cassandra CDC）同步到 Cosmos DB、收斂初始 load 後的增量。</li>
<li>Phase 4：shadow read — production query 在兩邊各跑一遍、對 result checksum、量 Cosmos 端 RU baseline、見 <a href="../ru-cost-model-sizing/">ru-cost-model-sizing</a>。</li>
<li>Phase 5：read cutover — 讀切 Cosmos、寫仍 source（可回退）。</li>
<li>Phase 6：write cutover — 寫切 Cosmos。</li>
<li>Phase 7：cleanup — 退役 source cluster、保留 export 與最終 checksum。</li>
</ul>
<h3 id="native-api-路徑type-e-paradigm-shift多出的工作">native API 路徑（Type E paradigm shift）多出的工作</h3>
<p>native API 路徑在 Phase 0 與 Phase 1 之間插入 <em>application 重寫 stream</em>、與資料遷移 stream 並行：</p>
<ul>
<li>重新建模 document（從 MongoDB document / Cassandra table 設計 Cosmos native shape、決定 embed vs reference）</li>
<li>重寫 data access layer（換掉 MongoDB driver / CQL、改用 Cosmos SQL API SDK、重寫所有 query）</li>
<li>重寫 aggregation（Cosmos SQL API 沒有 JOIN、aggregation 模型不同、部分邏輯移到 application 或用 stored procedure / Change Feed 物化）</li>
</ul>
<p>這條 application stream 是 native API 路徑的主要風險與工期來源、必須跟資料遷移 stream 用獨立 owner 並行、shadow read 階段要對 <em>重寫後的 query</em> 與 <em>原 query</em> 的結果一致性、不只是資料一致性。</p>
<h3 id="時程現實">時程現實</h3>
<p>Forbes 同 DB 換託管（自管 → Atlas、paradigm 不變）用 6 個月、中型團隊多 squad 並行。protocol-compat 遷入 Cosmos DB 的工程複雜度高於 Forbes 型（多了 RU / partition / region 範式與相容 gap）、native API 路徑再高一個量級（加 application 重寫）。拿 Forbes 6 個月當 native API 路徑 baseline 會從第一天 over-commit。</p>
<h2 id="evidence">Evidence</h2>
<p>每個 phase 用資料證明可前進、不靠感覺：</p>
<ul>
<li>Phase 0：unsupported feature 清單已窮舉、每條有對應策略（改寫 / 移 application 層 / 接受降級）</li>
<li>Phase 2-3：row / document count 對齊、CDC replication lag 收斂到穩定</li>
<li>Phase 4：query result checksum 一致（protocol-compat 比原 query 結果；native API 比重寫 query 與原 query 結果）、RU baseline 量到、aggregation result 逐條對齊</li>
<li>Phase 5-6：error rate、p99 latency、RU consumption 在 cutover 後在預期範圍</li>
<li>對應 <a href="/blog/backend/01-database/schema-migration-rollout-evidence/" data-link-title="1.7 Schema Migration Rollout 證據（Schema Migration Rollout Evidence）實作示範" data-link-desc="以訂單付款狀態欄位演進示範 schema migration 如何產出 evidence、release gate 與 incident decision log。">schema-migration-rollout-evidence</a> 的 dual-write 驗證</li>
</ul>
<h2 id="cutover">Cutover</h2>
<ul>
<li>read cutover window：先切讀、寫留 source、Cosmos 端 read error rate 與 latency 達標再進 write cutover</li>
<li>write cutover window：read-only freeze &lt; 10 分鐘、切寫、最終 checksum 對齊</li>
<li>Rollback condition：query error rate 超過閾值（如 &gt; 1%）、RU consumption 顯著高於估算（protocol-compat 翻譯層 overhead 比預期高）、或 result mismatch — 任一成立回退到 source、對應 <a href="/blog/backend/knowledge-cards/rollback-condition/" data-link-title="Rollback Condition" data-link-desc="說明決策執行後出現哪些訊號時要撤回、回退或改路線">rollback condition</a></li>
<li>decision owner：cutover 期間誰有權回退要事前定、資料庫切流失敗代價高、不靠臨場判斷</li>
<li>不可逆點：API kind 是 account 層、建 account 時選定、無法事後切換 — protocol-compat 與 native API 是 <em>兩個不同 account</em>；選 protocol-compat 後想升 native API 是 export → 新 account → import + 重寫 application 的二次全量遷移、不是 in-place 升級。這個不可逆性要在 Phase 0 就決定方向、不能 cutover 後反悔</li>
</ul>
<h2 id="cleanup">Cleanup</h2>
<ul>
<li>退役 source cluster 前確認最終 checksum、保留 export dump 90 天作為 rollback 後路</li>
<li>移除 dual-write writer、CDC connector、shadow read harness</li>
<li>保留 RU baseline 與 partition 分布觀測進 production dashboard、見 <a href="../ru-cost-model-sizing/">ru-cost-model-sizing</a></li>
<li>incident write-back：把相容 gap 與翻譯層成本意外寫回 runbook、給未來同類遷移</li>
</ul>
<h2 id="失敗模式">失敗模式</h2>
<h3 id="假設-wire-compat--100-行為相同">假設 wire-compat = 100% 行為相同</h3>
<p>protocol-compat API 是「在某些 query pattern 下相容」、不是普遍相容。MongoDB 的部分 aggregation stage（<code>$graphLookup</code> / <code>$facet</code> 等）、Cassandra 的部分 CQL feature 在對應 API 行為不同或不支援、dev 環境 sample data 看不出、production 才爆。修法是 Phase 0 把 <em>所有</em> production query 拉出來逐條驗證、Phase 4 shadow read 對 checksum、不能假設相容。</p>
<h3 id="shard-key--partition-key-直接照搬">shard key / partition key 直接照搬</h3>
<p>MongoDB shard key 或 Cassandra partition key 直接當 Cosmos logical partition key、忽略 10,000 RU/s per partition 上限。原本 Cassandra 寬 partition 在 Cosmos 變 hot partition、throttle。修法是 Phase 1 按 Cosmos 的 partition 上限重新評估、必要時用 synthetic / composite key 強制分散、見 <a href="../partition-key-design/">partition-key-design</a> 與 <a href="/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">Hot Partition</a>。</p>
<h3 id="把-native-api-二次遷移當升級低估">把 native API 二次遷移當「升級」低估</h3>
<p>選 protocol-compat 上線後、想拿 Change Feed / SQL query 等 native 能力、以為「升級到 SQL API」是改設定。實際是新 account + 全量資料遷 + application 重寫的第二次完整遷移。修法是 Phase 0 就決定終態方向 — 若終態確定要 native feature 且團隊能承擔重寫、直接走 native API 路徑、不要兩段遷。</p>
<h3 id="consistency-level-對應錯">consistency level 對應錯</h3>
<p>CQL 的 QUORUM / MongoDB 的 read concern majority 直接假設等價於 Cosmos 某個 level、語義不是一對一。修法是按 <a href="../consistency-levels-engineering/">consistency-levels-engineering</a> 把 read-after-write 與順序需求逐場景對應、不照字面翻譯 consistency 名稱。</p>
<h2 id="邊界與整合">邊界與整合</h2>
<ul>
<li>主對比 SSoT：<a href="../mongodb-api-vs-sql-api/">mongodb-api-vs-sql-api</a> — API <em>選擇判斷</em> 與三型遷移路徑分類在它主寫、本文主寫選定後的 <em>遷移流程</em></li>
<li>Sibling deep articles：<a href="../partition-key-design/">partition-key-design</a>（shard / partition key 翻譯）、<a href="../ru-cost-model-sizing/">ru-cost-model-sizing</a>（翻譯層 RU overhead 與 baseline）、<a href="../consistency-levels-engineering/">consistency-levels-engineering</a>（read concern / CQL consistency 對應）、<a href="../change-feed-cdc/">change-feed-cdc</a>（native API 才有原生 Change Feed、是 native 路徑的 feature driver 之一）</li>
<li>不遷的對照：<a href="/blog/backend/09-performance-capacity/cases/coinbase-mongodb-document-platform/" data-link-title="9.C36 Coinbase：MongoDB 撐 Ruby 單體 &#43; 1.5M reads/sec identity 服務" data-link-desc="Coinbase 以 MongoDB 為主資料層、自建 mongobetween connection proxy、users 服務在加密貨幣 surge 時撐 1.5M reads/sec">Coinbase</a> 保留 MongoDB 補周邊 — 確認「補周邊」解不了再遷</li>
<li>跨雲對照：<a href="/blog/backend/09-performance-capacity/cases/forbes-mongodb-atlas-multi-cloud-migration/" data-link-title="9.C37 Forbes：自管 MongoDB → Atlas on GCP、build 時間 25 → 9 分鐘" data-link-desc="Forbes 把自管 MongoDB 遷到 Atlas on Google Cloud、6 個月完成、build 25 → 9 分鐘、120M 不重複訪客單月承接">Forbes</a> 留 Atlas 跨雲 — 跨雲需求是 Cosmos DB 的 no-go</li>
<li>共通遷移模型：<a href="/blog/backend/01-database/large-scale-db-migration/" data-link-title="1.12 大規模 DB 遷移實戰" data-link-desc="跨 DB 遷移的 dual-write、[shadow read](/backend/knowledge-cards/shadow-read/)、cutover、rollback 流程 — 從實戰案例提煉的工程做法">1.12 大規模 DB 遷移實戰</a></li>
<li>Knowledge card：<a href="/blog/backend/knowledge-cards/vendor-lock-in/" data-link-title="Vendor Lock-In" data-link-desc="說明採用供應商產品後，其 API 與格式滲入程式碼造成的退出成本">vendor lock-in</a> / <a href="/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">Hot Partition</a></li>
<li>回 overview：<a href="/blog/backend/01-database/vendors/cosmosdb/" data-link-title="Azure Cosmos DB" data-link-desc="全球分散式 multi-model DB、5 個 consistency levels、Microsoft 自家 dogfood 證據">Cosmos DB vendor overview</a> 的「從 MongoDB / Cassandra 遷入」backlog</li>
</ul>
<h2 id="相關連結">相關連結</h2>
<ul>
<li><a href="/blog/backend/01-database/vendors/cosmosdb/" data-link-title="Azure Cosmos DB" data-link-desc="全球分散式 multi-model DB、5 個 consistency levels、Microsoft 自家 dogfood 證據">Cosmos DB vendor overview</a> — 本文是該頁尾遷入 backlog 的深度展開</li>
<li><a href="../mongodb-api-vs-sql-api/">mongodb-api-vs-sql-api</a> — API 選擇判斷與三型遷移路徑 SSoT</li>
<li><a href="/blog/backend/09-performance-capacity/cases/microsoft-365-cosmos-db-analytics/" data-link-title="9.C30 Microsoft 365：從 MongoDB 遷移到 Cosmos DB 的分析平台" data-link-desc="Microsoft 365 把使用分析平台從 MongoDB 遷移到 Cosmos DB、planet-scale 全球分散式分析">9.C30 Microsoft 365</a> — MongoDB → Cosmos DB MongoDB API dogfood</li>
<li><a href="/blog/backend/09-performance-capacity/cases/forbes-mongodb-atlas-multi-cloud-migration/" data-link-title="9.C37 Forbes：自管 MongoDB → Atlas on GCP、build 時間 25 → 9 分鐘" data-link-desc="Forbes 把自管 MongoDB 遷到 Atlas on Google Cloud、6 個月完成、build 25 → 9 分鐘、120M 不重複訪客單月承接">9.C37 Forbes</a> — 同 DB 換託管時程對照</li>
<li><a href="/blog/backend/09-performance-capacity/cases/coinbase-mongodb-document-platform/" data-link-title="9.C36 Coinbase：MongoDB 撐 Ruby 單體 &#43; 1.5M reads/sec identity 服務" data-link-desc="Coinbase 以 MongoDB 為主資料層、自建 mongobetween connection proxy、users 服務在加密貨幣 surge 時撐 1.5M reads/sec">9.C36 Coinbase</a> — 保留 MongoDB 不遷的對照</li>
<li><a href="../partition-key-design/">partition-key-design</a> / <a href="../ru-cost-model-sizing/">ru-cost-model-sizing</a> / <a href="../consistency-levels-engineering/">consistency-levels-engineering</a> — 遷移各 phase 的 sibling</li>
<li><a href="/blog/backend/01-database/large-scale-db-migration/" data-link-title="1.12 大規模 DB 遷移實戰" data-link-desc="跨 DB 遷移的 dual-write、[shadow read](/backend/knowledge-cards/shadow-read/)、cutover、rollback 流程 — 從實戰案例提煉的工程做法">1.12 大規模 DB 遷移實戰</a> — 跨 vendor 共通模型</li>
<li><a href="/blog/backend/knowledge-cards/vendor-lock-in/" data-link-title="Vendor Lock-In" data-link-desc="說明採用供應商產品後，其 API 與格式滲入程式碼造成的退出成本">Vendor Lock-in 卡片</a> — 跨雲 no-go 判讀</li>
<li>官方：<a href="https://learn.microsoft.com/azure/cosmos-db/mongodb/">Migrate to Cosmos DB for MongoDB</a> / <a href="https://learn.microsoft.com/azure/cosmos-db/cassandra/">Cosmos DB for Apache Cassandra</a></li>
</ul>
]]></content:encoded></item></channel></rss>