sql和nosql的本質,從資料庫設計角度看

2022-09-13 16:03:12 字數 838 閱讀 6611

以mysql為關係庫的例子.redis,hbase為nosql例子

資料庫查詢瓶頸來自:全表掃瞄,隨機io,關聯式資料庫效能提公升主要圍繞如何利用索引,儲存優化來改善查詢

查詢和更新的效能往往是對立的.

mysql通過索引可以增加特定查詢的效能.索引實質是建立一張索引表.儲存上在乙個頁內按索引順序儲存(沒頁大小可以指定到64k),但是不保證頁間的儲存連續性.

hbase乙個表只支援乙個主鍵索引,所以也需要新建表來實現查詢優化.但是hbase的儲存是整個hfile內按主鍵連續(大小可達g級別).

這樣看,hbase建多個表和mysql建乙個表多個索引,兩者其實殊途同歸.另外mysql雖然只是業內順序儲存,但是大多的查詢其實都在一頁或兩頁內解決了.整體上看並不吃虧.

另外hbase不支援多表甚至單錶的多行事務.mysql是全套支援的.

從更新上來看hbase通過sstable結構,更新速度非常快,應該是優於mysql,但是實時的查詢上是吃虧的(因為還未來得及合併,會從多個地方合併資料)

這裡再說說redis的有序集合,其對應mysql的b-tree索引.redis採用跳表實現有序集合.

無序集合則對應到hash索引.

場景:實時查詢(更新後立刻查詢)場景,hbase損耗較多.

需要事務的場景使用mysql解決.

hbase更適合需要高速更新和不太慢的查詢場景.

mysql則是通過犧牲更新速度來提公升查詢效能.

另外mysql事務是包括索引的.太多索引會進一步減慢資料更新的速度.更新通常會鎖一定的資源從而影響到查詢操作.

redis的資料都放在記憶體中,mysql的索引也可以全部放入記憶體,這種情況下,mysql可以實現redis的資料庫設計.

SQL 和 NoSQL 的區別

sql structured query language 資料庫,指關係型資料庫。主要代表 sql server,oracle,mysql 開源 postgresql 開源 nosql not only sql 泛指非關係型資料庫。主要代表 mongodb,redis,couchdb。sql資料存...

SQL 和 NoSQL 的區別

sql structured query language 資料庫,指關係型資料庫。主要代表 sql server,oracle,mysql 開源 postgresql 開源 nosql not only sql 泛指非關係型資料庫。主要代表 mongodb,redis,couchdb。sql資料存...

sql資料庫和nosql資料庫的區別

sql資料庫雖然教程多,支援也很強大,但是隨著網際網路應用的出現,sql資料庫遇到設計上的弊端,sql對錶的定義使得資料橫向擴充套件困難,而且sql資料庫的很多特性也沒有用武之地,例如及時訪問不是必要的,也沒有特別多的事物需求,這些特性都在消耗著sql資料庫的效能 因此nosql資料庫出現 sql資...