2017-05-29 37 views
0

我對cosmosdb(documentdb)非常陌生,在閱讀文檔時,我一直反覆閱讀一件事情,即documentdb是無模式的,但我覺得像集合類似於模式並且都是邏輯視圖。集合與模式不同如何集合

Wikipedia定義的模式爲'術語「模式」是指將數據組織爲數據庫如何構建的藍圖。我相信收集也是相同的,它是文檔,存儲過程,觸發器和UDF的組織。

所以我的問題是,模式與集合有何不同?

+1

集合不像模式那樣強制執行特定類型的文檔。因此,一個文檔集合可以包含具有用戶數據的文檔或具有日誌數據或任何文檔的文檔。收集只是一組可能無關的文件。集合就像一個數據庫,一個數據庫可以有多個(可能不相關的)表。但是數據庫本身並不描述/強制存儲什麼數據。 –

+0

謝謝@PeterBons聽起來合乎邏輯! – lambodar

回答

2

關係數據庫的模式與文檔數據庫的模式略有不同。簡而言之,關係數據庫比文檔模式更嚴格。換句話說,RDBMS表中的記錄必須嚴格遵守模式,因爲我們在將文檔存儲到Document集合時具有一定的靈活性。

傳統上,集合是遵循相同模式的一組文檔。但是,文檔數據庫不會停止將具有不同模式的文檔存儲在單個集合中。這是它給用戶的靈活性。

讓我們舉一個例子。讓我們假設我們正在存儲一些客戶信息。 在關係數據庫中,我們可能會像

Customer ID INT 
Name  VARCHAR(50) 
Phone  VARCHAR(15) 
Email  VARCHAR(255) 

一些結構取決於其電子郵件或電話號碼的客戶,它們將被記錄爲適當的值或空值。

ID, Name, Phone, Email 
1, John, 83453452, - 
2, Victor, -, - 
3, Smith, 34535345, [email protected] 

但是,在文檔數據庫中,如果某些列沒有任何值,則需要在集合中出現某些列。

[ 
{ 
    id: "123", 
    name: "John", 
    phone:"2572525", 
}, 
{ 
    id: "456", 
    name: "Stephen", 
}, 
{ 
    id: "789", 
    name: "King", 
    phone:"2572525", 
    email:"[email protected]" 
} 
] 

但它始終是最好堅持在文檔數據庫的模式是,即使他們的可維護性目的提供靈活存儲架構少文檔的集合。

+0

感謝您的回答@Ravi,我感謝您的努力。來指出,忘記關係數據庫,我曾在卡桑德拉和它的基於模式的工作,和你指出關於空值的那個,它只是在nosql中的一個選擇,並且與集合或模式無關是什麼我的基本信息 – lambodar

+0

傳統上集合是一組遵循相同模式的文檔。但是,文檔數據庫不會停止將具有不同模式的文檔存儲在單個集合中。這是它給用戶的靈活性。 –

+1

我不同意集合通常包含具有相同模式的文檔。沒有這樣的約定。也許人們被教導要做到這一點(例如每個對象類型一個集合),但是對此沒有規定,也沒有規定。 –

2

集合實際上與模式無關。它們只是一個文件的組織結構。使用Cosmos DB,它們可以作爲:

  • 交易邊界。在一個集合中,您可以使用存儲過程在事務中執行多個查詢/更新。這些更新被限制爲單個集合(更具體地說,集合中的單個分區)。
  • 計費/性能邊界。 Cosmos DB允許您指定分配給集合的請求單位(RU)/秒的數量。每個收藏可以有不同的RU設置。無論您消耗多少存儲空間,每個集合都有一個最低成本(由於必須分配的最小RU數量)。
  • 服務器端代碼邊界。存儲過程,觸發器等被上傳到特定的集合。

無論您選擇爲每個對象類型創建單個集合還是將多個對象類型存儲在單個集合中,完全取決於您。與數據的形狀無關。