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 Cosmos 帳戶設定為具有單一區域或多個寫入區域。 如需詳細資訊,請參閱如何使用 Azure 入口網站管理 Azure 資源。 您也可以在帳戶上設定預設一致性層級。
Azure Cosmos DB 帳戶中的元素
目前,您最多可以在一個 Azure 訂用帳戶下方建立 50 個 Azure Cosmos DB 帳戶。 您可以使用支援要求來提高此限制。
您可以使用單一 Azure Cosmos DB 帳戶管理虛擬無限制的資料量和佈建輸送量。 若要管理您的資料和佈建輸送量,請在您的帳戶中建立一或多個資料庫,然後建立一或多個容器以儲存資料。
下圖顯示 Azure Cosmos DB 帳戶中的元素階層。
下圖顯示 Azure Cosmos DB 帳戶中實體的階層。
Azure Cosmos DB 資料庫
在 Azure Cosmos DB 中,資料庫類似於命名空間。 資料庫只是一組容器。 下表說明 Azure Cosmos 資料庫如何對應至各種 API 特有實體:
Azure Cosmos DB 實體 | 適用於 NoSQL 的 API | 適用於 Apache Cassandra 的 API | 適用於 MongoDB 的 API | 適用於 Apache Gremlin 的 API | 適用於資料表的 API |
---|---|---|---|---|---|
Azure Cosmos DB 資料庫 | Database | keyspace | Database | Database | 不適用 |
注意
透過 API for Table 帳戶,在帳戶層級建立 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 for Table |
---|---|---|---|---|---|---|---|
_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 而定,某些屬性可能不直接公開。
系統定義的屬性 | 系統產生或由使用者定義 | 目的 | 適用於 NoSQL 的 API | API for Cassandra | DB API for MongoDB | API for Gremlin | API for Table |
---|---|---|---|---|---|---|---|
_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 |
---|---|---|---|---|---|
插入、取代、刪除、更新插入、讀取 | Yes | .是 | .是 | .是 | Yes |