標籤:

矽谷之路5:NoSQL就是把東西放在一起

NoSQL簡介

關係型資料庫(relational database)從20世紀八十年代興起,一直處於主流地位,它能保證數據的持久性、一致性,並且使用SQL進行資料庫操作。關係型資料庫表之間的關係需要用戶自己進行設計,比如一個購物網站上客戶Ann的購買信息其實需要用多個表進行存儲,比如用戶表、訂單表等。所以我們查詢用戶Ann的所有信息時就需要查找不同的表,最後對所有查到的信息進行整合。

現在非常火熱的是NoSQL資料庫,NoSQL名字的來源其實是twitter上的一個tag, 現在一般解讀為「Not Only SQL」,但它本身並沒有確切的含義。NoSQL資料庫包含很多種類:

  • key-value類:例如redis, riak

  • document類:例如mongoDB, couchDB

  • column-family類:例如HBase, Cassandra

key-value類本身還是key-value的關係,根據一個key得到value;doucument類是基於文檔的,將一個文檔的數據放在一起,根據文檔ID進行查詢;column-family類是從Google著名三篇論文之一Google File System衍生出來的,是通過行和列組成一個key進行查詢。

這三種類型都屬於聚合型資料庫,即對於一個key,相關的所有信息是存在一起的。這就和關係型資料庫不同,現在如果我們需要知道Ann的所有信息,我們只需要在一個地方查詢就可以了。

相比於關係型資料庫,我們免除了設計表之間的邏輯的煩惱,使用起來更加輕鬆自由,但是因為數據是按照一種方法聚集的,如果當你想要用另一種方法來聚集的時候就會很麻煩。舉個例子,我們用NoSQL存儲博客上的所有文章,這些文章會按照文章ID進行存儲,所有關於這個文章ID的信息,比如作者,時間,評論等都聚合在這個文章ID下。

那麼如果你需要找到一個作者寫的所有文章該怎麼辦呢?直觀來說並沒有很好的方法,因為所有文章都是按照文章ID存儲的而不是按照作者存儲的,於是就想到我們可以用MapReduce來解決。可以這麼說,關係型資料庫天然地攜帶著MapReduce的需求。所以我們可以通過查詢數據的需求來選擇是用關係型資料庫還是用聚合型資料庫。如果你只需要查詢一種聚合方式,那麼聚合型資料庫是非常好的選擇。

本文整理作者:Mengying Tian, 查看完整視頻:BitTiger

更多精彩內容, 請掃描下面二維碼,關注微信公眾賬號「論碼農的自我修養」


推薦閱讀:

時間序列數據的存儲和計算 - 開源時序資料庫解析(一)
MongoDB 存儲引擎 mmapv1 原理解析
對於 Web 2.0 實時應用、大數據量,MongoDB 和 memcached + SQL 哪個性能更好、在國內比較容易僱工程師?
現在最成熟的開源nosql是什麼?分別有什麼優缺點?
Redis 在 SNS 類應用中的最佳實踐有哪些?

TAG:NoSQL |