2、第八周 - 網絡編程進階 - 數據庫類型的理解
阿新 • • 發佈:2018-05-20
過期 第八周 and idt 性能 分配 容易 關系型 文檔型
前言
1、關系型數據庫與非關系型數據庫
A、什麽是數據庫?
數據庫是數據的倉庫。數據庫與普通的文件系統的主要區別:數據庫能快速查找對應的數據。
B、什麽是關系型數據庫?
關系型數據庫是依據關系模型來創建的數據庫。所謂關系模型就是“一對一、一對多、多對多”等關系模型,關系模型就是指二維表格模型,因而一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。關系模型包括數據結構(數據存儲的問題,二維表)、操作指令集合(SQL語句)、完整性約束(表內數據約束、表與表之間的約束)。
常見的關系型數據庫:
Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL
關系型數據庫的特點:
- 安全(因為存儲在磁盤中,不會說突然斷電數據就沒有了);
- 容易理解(建立在關系模型上);
- 但不節省空間(因為建立在關系模型上,就要遵循某些規則,好比數據中某字段值即使為空仍要分配空間)
C、什麽是非關系型數據庫?
非關系型數據庫主要是基於“非關系模型”的數據庫(由於關系型太大,所以一般用“非關系型”來表示其他類型的數據庫)。
非關系型模型比如有:
- 列模型:存儲的數據是一列列的。關系型數據庫以一行作為一個記錄,列模型數據庫以一列為一個記錄。(這種模型,數據即索引,IO很快,主要是一些分布式數據庫)
- 鍵值對模型:存儲的數據是一個個“鍵值對”,K/v模式。
- 文檔類模型:以一個個文檔來存儲數據,有點類似“鍵值對”。
常見非關系模型數據庫:
- 列模型:Hbase
- 鍵值對模型:redis,MemcacheDB
- 文檔類模型:mongoDB
非關系型數據庫的特點:
- 效率高(因為存儲在內存中)。
- 但不安全(斷電丟失數據,但其中redis可以同步數據到磁盤中),現在很多非關系型數據庫都開始支持轉存到磁盤中。
2、NoSQL 緩存數據庫介紹
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關系型的數據庫。
NoSQL數據庫的四大分類:
- 鍵值(Key-Value)存儲數據庫:數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來說的優勢在於簡單、易部署。如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
- 列存儲數據庫:數據庫通常是用來應對分布式存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列。如:Cassandra, HBase, Riak.
- 文檔型數據庫:文檔型數據庫模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型數據庫可以看作是鍵值數據庫的升級版,允許之間嵌套鍵值。而且文檔型數據庫比鍵值數據庫的查詢效率更高。如:CouchDB, MongoDb。
- 圖形(Graph)數據庫:圖形結構的數據庫同其他行列以及剛性結構的SQL數據庫不同,它是使用靈活的圖形模型,並且能夠擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。如:Neo4J, InfoGrid, Infinite Graph。
NoSQL數據庫在以下的這幾種情況下比較適用:
- 數據模型比較簡單;
- 需要靈活性更強的IT系統;
- 對數據庫性能要求較高;
- 不需要高度的數據一致性;
- 對於給定key,比較容易映射復雜值的環境。
NoSQL數據庫的四大分類表格分析:
3、 Mongodb\redis\memcached 區別
Redis和Memcache區別:
- Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等。
- 數據類型--Memcache在添加數據時就要指定數據的字節長度;redis不需要。
- 虛擬內存--Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤。LRU算法。
- 過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10
- 分布式--設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從
- 存儲數據安全--memcache掛掉後,數據沒了;redis可以定期保存到磁盤(持久化)。
- 災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後可以通過aof恢復。
三者區別如下:
2、第八周 - 網絡編程進階 - 數據庫類型的理解