以乙個電商客戶、訂單、訂購、位址模型來對比下關係型資料庫和非關係型資料庫傳統的關係型資料庫設計,er圖(1:1/1:n/n:n,主外來鍵等常見)nosql設計
可以用bson,bson()是一種類json的一種二進位制形式的儲存格式,簡稱binary json,它和json一樣,支援內嵌的文件物件和陣列物件
資料結構:
json是像字串一樣儲存的,bson是按結構儲存的(像陣列 或者說struct)
儲存空間
bson>json
操作速度
bson>json。比如,遍歷查詢:json需要掃字串,而bson可以直接定位
修改:
json也要大動大移,bson就不需要。
兩者對比,問題和難點],
"orders":[
],"shippingaddress":
"orderpayment":[}],}]
}}
為什麼上述的情況可以用聚合模型來處理
高併發的操作是不太建議有關聯查詢的,網際網路公司用冗餘資料來避免關聯查詢
分布式事務是支援不了太多的併發的
nosql技術與傳統的關係型資料庫相比,乙個最明顯的轉變就是拋棄了關係模型。每種nosql解決方案的模型都是不同的。下面吧nosql生態系統的廣泛使用的模型分為四類:「鍵值」(hashtable)、「文件」.,"列族"和「圖」前三類資料庫模型有乙個共同特徵,我們稱其為「面向聚合」。
面向聚合
聚合:在」領域驅動設計「中,我們想把一組相互關聯的物件視為乙個整體單元來操作,而這個單元就叫聚合。我們通過原子操作更新聚合的值,並且在與資料儲存通訊時,也是以聚合為單位。選用面向聚合模型的決定性因素,在於它非常適合在集群上執行。這也是nosql崛起的關鍵。
特點聚合資料模型的特點就是把經常訪問的資料放在一起(聚合在一塊);
當然,以這種方式儲存不可避免的會有重複,重複是為了更少的互動;
缺點比如:以學生學號聚合學生資訊(含學生姓名、班級、年齡、等資訊,甚至英語學科成績),通過學號查詢時,能夠在一次互動中查詢出該學生的所有資訊,但如果想通過學生姓名來查詢,就很困難;
聚合結構在事務方面的支援有限;有一些nosql產品實現了簡單的事務支援,但對於跨越多個聚合結構的事務並不完善;
這樣帶來的好處很明顯,對於某個查詢請求,能夠在與資料庫一次互動中將所有資料都取出來;
聚合模型-----------鍵值
kv鍵值
鍵值(key-value)儲存資料庫
這一類資料庫主要會使用到乙個雜湊表,這個表中有乙個特定的鍵和乙個指標指向特定的資料。key/value模型對於it系統來說的優勢在於簡單、易部署。但是如果dba只對部分值進行查詢或更新的時候,key/value就顯得效率低下了。
[3]舉例如:tokyo cabinet/tyrant, redis, voldemort, oracle bdb.
聚合模型-----------bson
聚合模型-----------列族],
"orders":[
],"shippingaddress":
"orderpayment":[}],}]
}}
列儲存資料庫。
這部分資料庫通常是用來應對分布式儲存的海量資料。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:cassandra, hbase, riak.是按列儲存資料的。最大的特點是方便儲存結構化和半結構化資料,方便做資料壓縮,對針對某一列或者某幾列的查詢有非常大的io優勢。
聚合模型-----------圖形
圖形(graph)資料庫
圖形結構的資料庫同其他行列以及剛性結構的sql資料庫不同,它是使用靈活的圖形模型,並且能夠擴充套件到多個伺服器上。
文件型資料庫(bson格式比較多):典型介紹----couchdb
mongodb
mongodb 是乙個基於分布式檔案儲存的資料庫。由 c++ 語言編寫。旨在為 web 應用提供可擴充套件的高效能資料儲存解決方案
mongodb 是乙個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。
圖關聯式資料庫
neo4j, infogrid
它不是放圖形的,放的是關係比如:朋友圈社交網路、廣告推薦系統,社交網路,推薦系統等。專注於構建關係圖譜,nosql資料庫沒有標準的查詢語言(sql),因此進行資料庫查詢需要制定資料模型。許多nosql資料庫都有rest式的資料介面或者查詢api。
[2]如:neo4j, infogrid, infinite graph.
因此,我們總結nosql資料庫在以下的這幾種情況下比較適用:
1、資料模型比較簡單;
2、需要靈活性更強的it系統;
3、對資料庫效能要求較高;
4、不需要高度的資料一致性;
5、對於給定key,比較容易對映複雜值的環境。
四者對比
分類
examples舉例
典型應用場景
資料模型
優點缺點
鍵值(key-value)
tokyo cabinet/tyrant, redis, voldemort, oracle bdb
內容快取,主要用於處理大量資料的高訪問負載,也用於一些日誌系統等等。
key 指向 value 的鍵值對,通常用hash table來實現
查詢速度快
資料無結構化,通常只被當作字串或者二進位制資料
列儲存資料庫
cassandra, hbase, riak
分布式的檔案系統
以列簇式儲存,將同一列資料存在一起
查詢速度快,可擴充套件性強,更容易進行分布式擴充套件
功能相對侷限
文件型資料庫
couchdb, mongodb
web應用(與key-value類似,value是結構化的,不同的是資料庫能夠了解value的內容)
key-value對應的鍵值對,value為結構化資料
資料結構要求不嚴格,表結構可變,不需要像關係型資料庫一樣需要預先定義表結構
查詢效能不高,而且缺乏統一的查詢語法。
圖形(graph)資料庫
neo4j, infogrid, infinite graph
社交網路,推薦系統等。專注於構建關係圖譜
圖結構利用圖結構相關演算法。比如最短路徑定址,n度關係查詢等
很多時候需要對整個圖做計算才能得出需要的資訊,而且這種結構不太好做分布式的集群方案。
資料庫基本知識二
sql與高階語言 jdbc drivermanager create connection connection create statement statement create resultset connection connect driverprogram statement do som...
SQLite資料庫基本知識(二)
一 插入語句 employee表中原有格式 id integer,name text,integer,salary real,entry date text,resume text insert into employee values 1,小明 0,5000.1,2019 01 01 技術員 這種...
資料庫基本知識
記錄集的游標型別 forwardonly指標一直向下走.移動速度快,但是不能儲存走過的記錄.資源占用少.主要運用在服務端.static 相當於造了乙個一摸一樣的副本.不管資料庫怎麼改,都是改的副本.真正的資料沒有改.最後直接 更新到真正的資料庫.靜態適合只是讀取資料庫中的資料.比如查詢.但編輯不適合...