今天我們回到觀念,隨著資料量的增加,有些人就開始思考,我們是不是需要新的資料庫架構來儲存資料。尤其是今天很多的應用程式,未必完全符合當初關聯式資料庫,所預想的使用情境。不管事資料量過大的時候會有的效能上的挑戰、抑或是儲存資料時需要的彈性。今天的文章我們會討論一下非關聯式資料庫 (NoSQL)
很多人常掛在嘴邊的大數據,在討論時我們會說他有四V特性:
在這裡非關聯式資料庫 NoSQL 想要解決的就是能夠對付這4V,尤其是在給資料彈性以及快速做簡單分析這兩個要件上面特別的顯著。首先NoSQL取消了在SQL當中所需要的綱要,綱要所存在的目的就是為了要能夠有很高的效能,但是為了要能夠有彈性的儲存資料,NoSQL採取的策略就是,取消需要綱要,但是多花一點點額外的時間去讀取資料裡面所儲存的樣態。
此外NoSQL比較常會有重複的資料內容,這樣表示,當我要存取資料的時候,可以快速的找到我所需要的資料,但是在面對更新資料的時候,就必須要花比較多的時間來維持,因為同樣一筆資料,可能出現在很多個不同的地方。建資料會存在很多個不同的地方,那就代表說相較於SQL, NoSQL在維持資料一致性上面,無法保持一致 (會有延遲)。
這些不同的特點都是為了要應付人們在儲存並使用資料本質上的改變。
NoSQL 的樣態其實很多元,就連 XML 都可以算是一種 NoSQL。每一段開口和幣口中,都夾著這個項目的資料數值。在這個系列文章中,我們介紹兩種NoSQL,第一種採取的是用,鍵 (Key) — 值(Value) 儲存資料,每一筆資料,都是由一個項目對應到一個值。另外一種叫做圖資料庫,透過節點(Node)與鍵(Edge)之間的關聯來儲存資料。
接下來幾篇,我們會先討論前者。所以究竟什麼是 Key —Value Pair。如果對Python 熟悉,這個應該很不陌生。我們來看看一筆資料在 Key-Value Pair 底下的樣子:
{
user: "abc",
contact: {
phone: "123-456-7890",
email: "xyz@example.com"
},
access: {
level: 5,
group: "dev"
}
}
沒錯長得跟 Dictionary 很像,其實就是個JSON*。你就會發現,與其把資料拆成一個一個的關聯表,現在我們把資料想成一個文件,將和這個文件相關的所有資訊都存放在一起。
明天我們要來建構自己的MongoDB!
*嚴格說是 BSON,差別主要在實際儲存在資料庫的形式。