nosql(nosql = not only sql ),意即「不僅僅是sql」,泛指非關係型的資料庫。隨著網際網路web2.0**的興起,傳統的關聯式資料庫在應付web2.0**,特別是超大規模和高併發的sns型別的web2.0純動態**,在某些場景下暴露出許多難以解決的問題,如效能瓶頸的問題。nosql資料庫的產生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題,包括超大規模資料的儲存。
2.1 二者區別
rdbms(關係型資料庫)
- 高度組織化結構化資料
- 結構化查詢語言(sql)
- 資料和關係都儲存在單獨的表中
- 資料操縱語言,資料定義語言
- 嚴格的一致性
- 事務遵循acid特性(原子性、一致性、隔離性、持續性)
nosql
- 代表著不僅僅是sql
- 沒有宣告性查詢語言
- 沒有預定義的模式,較為靈活
- key-value對儲存,列儲存,文件儲存,圖形資料儲存
- 最終一致性,而非acid屬性
- 非結構化和不可預知的資料
- cap定理(三進二)
- 高效能、高可用性、可拓展性
2.2 二者聯絡
當下關係型資料庫與nosql二者經常是一起使用的,只不過適用的具體場景不同;針對rdbms,比如電商**上,商品的基本資訊存放在關係型資料庫中;針對nosql,比如一些熱點高頻的商品詞彙可以放在redis資料庫中,因為redis是基於記憶體的,擁有更高的效能;大段的文字描述則可以放在mongodb(文件型資料庫)上,因為mongodb以bson儲存資料,適合大段文字的儲存。
2.3 其他
關係型資料庫常常需要多表關聯查詢,在分布式的情形下效率較低;而nosql中,很多採用冗餘資料來避免關聯查詢。如採用bson形式儲存,每項資料都有欄位名,就產生了冗餘;但是一項資料基本有了該物件所有的資訊,就可以避免過多的關聯查詢操作。
key-value對(redis支援該型別)、文件型儲存(如mongo的bson)、列儲存(hbase)、圖關係儲存(neo4j、infogrid)
cap含義:
-c(consistency):強一致性
-a(**ailable):可用性
-p(partition tolerance):分割槽容錯性
cap思想:乙個分布式的系統不可能同時很好滿足cap三個要求,最多只能同時較好地滿足其中兩個特性,即三進二。
cap的三進二:ca、ap、cp
滿足ca:滿足強一致性和可用性,可拓展性較弱。
滿足cp:滿足強一致性和分割槽容錯性,效能不高。
滿足ap:滿足可用性和分割槽容錯性,對一致性要求較低;(即不需要嚴格一致性而只要最終一致性)
含義:為了解決關聯式資料庫的強一致性導致的可用性降低的問題而提出的一種解決方案。
是下面三個術語的縮寫:
- 基本可用(basically **ailable)
- 軟狀態(soft state)
- 最終一致(eventually consistency)
它的思想是通過讓系統放鬆對某一時刻資料一致性的要求來換取系統整體伸縮性和效能上改觀,特別是分布式系統;只要滿足最終一致性即可。
解決方案:統一資料服務平台:通過對映、封裝等手段使各個框架有統一的介面,從而向外服務。
即遠端字典服務(remote dictionary server),是完全開源免費的,用c語言編寫的,遵守bsd協議,是乙個高效能的(key/value)分布式記憶體資料庫,基於記憶體執行並支援持久化的nosql資料庫,是當前最熱門的nosql資料庫之一,也被人們稱為資料結構伺服器。
關鍵字:kv對、基於記憶體、分布式、支援持久化
(1) 高效能:基於記憶體,所以具體較高的效能。
(2) 支援資料持久化:可用把記憶體的資料非同步儲存在磁碟中,下次重啟時再次載入即可使用,從而實現了資料的持久化儲存。
(3) 支援多型別資料:除了鍵值對,還支援list、set、zset等資料型別。
(4) 支援資料備份:採用master-sl**e模式進行資料備份(主從複製)
(redis與memcached:memcached也是基於記憶體的,但不能實現資料的持久化儲存,所以memcached一般只作快取資料庫;而redis就支援資料持久化,可以適用於更廣泛的場景,如高頻熱門資料的長時間huan快取,降低資料庫的i/o;此外,redis比memcached支援更多的資料型別)
安裝完成後,將安裝目錄下的redis.conf備份,並把conf檔案下的對應行修改:daemonzize yes
這樣,執行redis-server,redis的服務可以在後台執行。redis-cli則是啟動客戶端。
- 單程序:單程序模型來處理客戶端的請求。對讀寫等事件的響應是通過對epoll函式的包裝來做到的。redis的實際處理速度完全依靠主程序的執行效率。
- 16個資料庫:預設16個資料庫,類似陣列下表從零開始(0-15),初始預設使用零號庫;通過select可以選擇資料庫。
- 資料庫指令: select 數字 選擇某乙個資料庫
dbsize 檢視當前資料庫的key數量
flushdb 清除當前資料庫資料
flushall 清除全部資料庫
常用的五大資料型別:string 、hash、list、set、zset
- string:字串型別,是最基本的資料型別,且是二進位制安全的(可以包含任何資料);乙個redis的字串最大是512m。
- hash:是鍵值對集合;value是乙個string型別的field和value的對映表,適合用來儲存物件。
- list:是字串列表,底層實現是鍊錶;鍊錶元素的增刪效率都較高。
- set:是字串型別的無序集合,集合內元素各不相同;通過hashtable實現。
- zset:字串型別的有序集合;集合裡的每乙個元素都會關聯乙個double型別的分數,依據分數從小到大進行排序;元素一定不同,但分數可能相同。
Redis學習筆記1
問題 1.正常的命令請求是需要經過查詢分析器和查詢優化器來進行處理,但是redis不需要,因為redis資料的儲存是基於記憶體的 2.對於set資料結構操作的時候,smembers命令可以獲取到集合中包含的所有元素 但是集合包含的元素非常多的時候,該命令執行的速度可能會很慢,要謹慎使用該命令 3.對...
Redis 學習筆記(1)
redis 5.0.5 00000000 0 64 bit running in standalone mode port 6379 pid 118 root 8427640798c6 data redis server v redis server v 5.0.5 sha 00000000 0 m...
Redis學習筆記1 Redis介紹
目錄 1 redis是什麼 2 redis的特點 3 redis 優勢 4 redis與其他key value儲存有什麼不同?附 什麼是bsd協議 附 什麼是原子性,什麼是原子性操作?redis是乙個開源的 高效能的 基於鍵值對的快取與儲存系統,通過提供多種鍵值資料型別來適應不同場景下的快取和儲存需...