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 Cosmos DB 帳戶。 您也可以在 帳戶上設定預設一致性層級 。
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 時,會在帳戶層級建立 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 |
---|---|---|---|---|---|
插入、取代、刪除、upsert、read | Yes | .是 | .是 | .是 | 是 |
下一步
瞭解如何管理 Azure Cosmos DB 帳戶和其他概念: