Azure Cosmos DB 中的資料庫、容器和專案

適用於:NoSQL MongoDB Cassandra Gremlin

Azure Cosmos DB 是完全受控的平臺即服務(PaaS)。 若要開始使用 Azure Cosmos DB,請在訂用帳戶中的 Azure 資源群組中建立 Azure Cosmos DB 帳戶。 然後,在帳戶內建立資料庫和容器。

您的 Azure Cosmos DB 帳戶包含唯一的功能變數名稱系統 (DNS) 名稱。 您可以使用許多工具來管理 DNS 名稱,包括:

  • Azure 入口網站
  • Azure Resource Manager 範本
  • Bicep 範本
  • Azure PowerShell
  • Azure CLI
  • Azure 管理 SDK
  • Azure REST API

若要在多個 Azure 區域中復寫數據和輸送量,您可以隨時將 Azure 區域新增和移除至您的帳戶。 您可以將您的帳戶設定為具有單一區域或多個寫入區域。 如需詳細資訊,請參閱使用 Azure 入口網站 管理 Azure Cosmos DB 帳戶。 您也可以在 帳戶上設定預設一致性層級

Azure Cosmos DB 帳戶中的元素

目前,您可以在 Azure 訂用帳戶下建立最多 50 個 Azure Cosmos DB 帳戶。 您可以提出支援要求來增加此限制。

您可以使用單一 Azure Cosmos DB 帳戶來管理幾乎無限制的數據量和布建輸送量。 若要管理您的數據和布建的輸送量,您可以在帳戶內建立一或多個資料庫,然後建立一或多個容器來儲存您的數據。

下圖顯示 Azure Cosmos DB 帳戶中的元素階層。

Diagram of the hierarchy of an Azure Cosmos DB account, including an account, database, and container.

下圖顯示 Azure Cosmos DB 帳戶中的實體階層。

Diagram of the relationship between a container and items, including sibling entities such as stored procedures, user-defined functions, and triggers.

Azure Cosmos DB 資料庫

在 Azure Cosmos DB 中,資料庫類似於命名空間。 資料庫只是一組容器。 下表顯示資料庫如何對應至各種 API 特定實體:

Azure Cosmos DB 實體 適用於 NoSQL 的 API 適用於 Apache Cassandra 的 API 適用於 MongoDB 的 API API for Apache Gremlin 適用於資料表的 API
Azure Cosmos DB 資料庫 Database keyspace Database Database 不適用

注意

使用數據表帳戶的 API 時,會在帳戶層級建立 Azure Cosmos DB 中的數據表,以維持與 Azure 數據表 儲存體 的相容性。

Azure Cosmos DB 容器

Azure Cosmos DB 容器是儲存數據的位置。 與大部分關係資料庫不同,這些資料庫會隨著較大的虛擬機大小相應增加,Azure Cosmos DB 會相應放大。

數據會儲存在一或多個稱為 數據分割的伺服器上。 若要增加分割區,您可以增加輸送量,或在記憶體增加時自動成長。 此關聯性可為容器提供幾乎無限制的輸送量和記憶體數量。

當您建立容器時,您必須提供分割區索引鍵。 數據分割索引鍵是您從項目選取的屬性,可協助 Azure Cosmos DB 有效率地將數據分散到分割區。 Azure Cosmos DB 會使用此屬性的值,將數據路由傳送至要寫入、更新或刪除的適當分割區。 您也可以在查詢中使用 子句中的數據 WHERE 分割索引鍵,以有效率地擷取數據。

Azure Cosmos DB 中數據的基礎記憶體機制稱為 實體分割區。 實體分割區每秒可有高達 10,000 個要求單位的輸送量,而且最多可以儲存 50 GB 的數據。 Azure Cosmos DB 會使用邏輯分割區來抽象化此數據分割概念,其最多可儲存 20 GB 的數據。

邏輯分割區可讓您在新增更多分割區時,為基礎實體分割區上的數據提供更大的彈性和更佳的管理。 若要深入了解數據分割和數據分割索引鍵,請參閱 Azure Cosmos DB 中的數據分割和水平調整。

當您建立容器時,您會以下列其中一種模式設定輸送量:

  • 專用輸送量:容器上的輸送量會獨佔保留給該容器。 專用輸送量有兩種類型:標準和自動調整。 若要深入瞭解,請參閱 在 Azure Cosmos DB 容器上布建標準(手動)輸送量。

  • 共用輸送量:輸送量是在資料庫層級指定,然後與資料庫內最多 25 個容器共用。 共用輸送量會排除使用自己專用輸送量設定的容器。

    當資料庫中的所有容器都有類似的要求和記憶體需求,或當您不需要數據的可預測效能時,共用輸送量可能是個好選項。 若要深入瞭解,請參閱 在 Azure Cosmos DB 中布建資料庫的標準(手動)輸送量。

注意

您無法在專用和共用輸送量之間切換。 您在共用輸送量資料庫中建立的容器無法更新為具有專用輸送量。 若要將容器從共用變更為專用輸送量,您必須建立新的容器,並將數據複製到該容器。 Azure Cosmos DB 中的容器複製功能可讓此程式變得更容易。

容器與架構無關。 容器內的專案可以有任意架構或不同的實體,只要它們共用相同的分割區索引鍵即可。 例如,容器可以包含具有客戶配置檔資訊的項目或檔,以及代表所有客戶銷售訂單的一或多個項目或檔。 您可以將相同容器中所有客戶的類似資訊放在同一個容器

根據預設,您新增至容器的所有數據都會自動編製索引,而不需要明確編製索引。 您可以藉由設定容器的索引編製原則來自定義容器的索引編製。

若要避免影響效能,您可以在容器中選取的專案或整個容器上設定 存留時間(TTL), 以在背景中自動刪除那些未使用的輸送量。 不過,即使未刪除過期的數據,也不會出現在任何讀取作業中。 若要深入瞭解,請參閱 設定 Azure Cosmos DB 中的存留時間。

Azure Cosmos DB 提供稱為 變更摘要的異動數據擷取內建功能。 您可以使用它來訂閱容器內數據的所有變更。

您可以註冊 容器的預存程式、觸發程式、使用者定義函式 (UDF)合併程式

容器中的每個檔都必須具有該容器邏輯索引鍵屬性值內唯一 id 的屬性。 您可以使用這個屬性組合在容器內提供唯一條件約束,而不需要明確定義一個條件約束。

您也可以在使用一或多個屬性的 Azure Cosmos DB 容器上指定唯一 索引鍵條件約束 。 唯一索引鍵條件約束可確保每個邏輯分割區索引鍵一或多個值的唯一性。 如果您使用唯一索引鍵原則建立容器,則無法使用重複唯一索引鍵條件約束所指定值的值來建立任何新的或更新的專案。

容器會特製化為 API 特定實體,如下表所示:

Azure Cosmos DB 實體 適用於 NoSQL 的 API API for Cassandra 適用於 MongoDB 的 API API for Gremlin 適用於資料表的 API
Azure Cosmos DB 容器 容器 Table 集合 圖表 Table

注意

請確定您不會建立兩個具有相同名稱但不同大小寫的容器。 Azure 平臺的某些部分不區分大小寫,這種命名可能會導致容器上的診斷數據和動作發生混淆或衝突。

Azure Cosmos DB 容器的屬性

Azure Cosmos DB 容器具有一組系統定義的屬性。 根據您使用的 API,某些屬性可能不會直接公開。 下表描述系統定義的屬性:

系統定義屬性 系統產生的或用戶可設定 目的 適用於 NoSQL 的 API API for Cassandra 適用於 MongoDB 的 API API for Gremlin 適用於資料表的 API
_rid 系統產生 容器的唯一標識碼。 No
_etag 系統產生 用於開放式並行訪問控制的實體標記。 No
_ts 系統產生 容器的上次更新時間戳。 No
_self 系統產生 容器的可尋址 URI。 No
id 用戶可設定 容器的名稱。 Yes .是 .是 .是 Yes
indexingPolicy 用戶可設定 建置容器索引的原則。 .是 .是 Yes
TimeToLive 用戶可設定 在設定的時間週期之後,從容器自動刪除專案。 如需詳細資訊,請參閱 存留時間。 Yes
changeFeedPolicy 用戶可設定 讀取對容器中專案所做的變更的原則。 如需詳細資訊,請參閱 變更摘要 Yes
uniqueKeyPolicy 用戶可設定 確保邏輯分割區中一或多個值的唯一性的原則。 如需詳細資訊,請參閱 唯一索引鍵條件約束 Yes
AnalyticalTimeToLive 用戶可設定 在分析存放區的內容中,在設定的時間週期之後,自動從容器刪除專案。 如需詳細資訊,請參閱 分析存放區 .是 No

Azure Cosmos DB 項目

根據您使用的 API,個別資料實體可以透過各種方式來表示:

Azure Cosmos DB 實體 適用於 NoSQL 的 API API for Cassandra 適用於 MongoDB 的 API API for Gremlin 適用於資料表的 API
Azure Cosmos DB 專案 項目 資料列 文件 節點或邊緣 項目

項目的屬性

每個 Azure Cosmos DB 專案都有下列系統定義的屬性。 視您使用的 API 而定,其中某些 API 可能不會直接公開。

系統定義屬性 系統產生的或用戶定義 目的 適用於 NoSQL 的 API API for Cassandra 適用於 MongoDB 的 DB API API for Gremlin 適用於資料表的 API
_rid 系統產生 專案的唯一標識碼 No
_etag 系統產生 用於開放式並行存取控制的實體標記 No
_ts 系統產生 專案上次更新的時間戳 No
_self 系統產生 專案的可尋址 URI No
id 邏輯分割區中用戶定義的唯一名稱 Yes .是 .是 .是 Yes
任意使用者定義屬性 使用者定義 API 原生表示法中的使用者定義屬性(包括 JSON、BSON 和 CQL) Yes .是 .是 .是

注意

屬性的唯 id 一性會在每個邏輯分割區內強制執行。 多個檔可以有不同的分割區索引鍵值具有相同 id 的屬性值。

專案上的作業

Azure Cosmos DB 項目支援下列作業。 您可以使用任何 Azure Cosmos DB API 來執行作業。

作業 適用於 NoSQL 的 API API for Cassandra 適用於 MongoDB 的 API API for Gremlin 適用於資料表的 API
插入、取代、刪除、upsert、read Yes .是 .是 .是

下一步

瞭解如何管理 Azure Cosmos DB 帳戶和其他概念: