什麼是鍵/值儲存數據庫?
我一直在查看 NoSQL 的維基百科頁面,它列出了鍵/值儲存數據庫的幾個變體,但我找不到任何關於鍵/值儲存在這種情況下的含義的詳細資訊。有人可以向我解釋或連結解釋嗎?另外,我什麼時候會使用這樣的數據庫?
您熟悉鍵/值對的概念嗎?假設您熟悉 Java 或 C#,這是語言中的 map/hash/datatable/KeyValuePair(最後一個是 C# 的情況)
這個小範例圖表展示了它的工作方式:
Color Red Age 18 Size Large Name Smith Title The Brown Dog
你有一個鍵(左)和一個值(右)……注意它可以是字元串、整數等。大多數 KVP 對象允許您在右側儲存任何對象,因為它只是一個值。
由於您將始終擁有要返回的特定對象的唯一鍵,因此您只需在數據庫中查詢該唯一鍵並從具有該對象的任何節點返回結果(這就是它適用於分佈式系統的原因,因為還涉及其他事情,例如輪詢前 n 個節點以返回與其他節點返回匹配的值)。
現在我上面的例子很簡單,所以這裡有一個稍微好一點的 KVP 版本
user1923_color Red user1923_age 18 user3371_color Blue user4344_color Brackish user1923_height 6' 0" user3371_age 34
如您所見,簡單的密鑰生成是將“使用者”放入使用者唯一編號、下劃線和對象。同樣,這是一個簡單的變體,但我認為我們開始理解,只要我們可以定義左側的部分並使其格式一致,我們就可以提取值。
請注意,鍵值(好吧,可能有一些限制,例如純文字)或值屬性(可能有大小限制)沒有限制,但到目前為止,我還沒有真正複雜的系統。讓我們嘗試更進一步:
app_setting_width 450 user1923_color Red user1923_age 18 user3371_color Blue user4344_color Brackish user1923_height 6' 0" user3371_age 34 error_msg_457 There is no file %1 here error_message_1 There is no user with %1 name 1923_name Jim user1923_name Jim Smith user1923_lname Smith Application_Installed true log_errors 1 install_path C:\Windows\System32\Restricted ServerName localhost test test test1 test test123 Brackish devonly wonderwoman value key
你明白了……所有這些都將儲存在分佈式節點上的一個巨大的“表”中(這一切背後都有數學),你只需通過名稱向分佈式系統詢問你需要的值。
至少,這是我對這一切如何運作的理解。我可能有一些錯誤,但這是基礎。
在 SQL 術語中,NoSQL 數據庫是具有兩列的單個表:一列是(主)鍵,另一列是值。就是這樣,這就是 NoSQL 的全部魔力。
你會使用 NoSQL 的主要原因之一是:可擴展性。
如果您的應用程序需要每秒處理數百萬次查詢,那麼實現它的唯一方法就是添加更多伺服器。使用 NoSQL 非常便宜和容易。相比之下,擴展傳統的 SQL 數據庫要復雜得多。
只有最大的網站才能真正充分利用 NoSQL 的潛力,例如 Facebook,擁有數千台執行Cassandra的伺服器。
我強烈推薦閱讀這篇博文,比較 SQL、NoSQL 和 ORM: