計算機剛開始出現的時候,那時候沒有硬碟,只有記憶體,資料不會進行儲存,一般只用於科技計算,計算完輸出結果後,程式就撤出記憶體了。後來隨著技術發展,有了硬碟、檔案,在檔案的基礎上有了檔案系統。檔案系統可以滿足資料存放和查詢的需求。
檔案系統作為資料庫用了一段時間,當資料越來越多、規模越來越大後,資料查詢特別麻煩。資料很容易重複(冗餘)、佔用儲存空間多,資料結構化被迫推進。
總的來說,資料庫顧名思義其實就是存取資料的地方;另外隨著時間線的發展產生了不同種類的資料庫,但本質技術提升的本質都是為了提升業務效能!
關係型資料庫也被稱為RDBMS,顧名思義就是資訊遵循一種利用表或關係的結構化方法,是一種儲存和操作歷史資料的經典方法。
SQL這個詞既是一種語言,也是資料庫的型別。SQL代表結構化查詢語言,是資料庫設計理念的先驅。自80年代中期以來,SQL一直是管理和查詢關係資料集的標準;然而,關係模型的早期雛形可以追溯到60年代和70年代,當時出現了區分應用資料和應用程式碼的迫切需求,使開發人員能夠專注於程式開發的其他方面,如存取和操作手頭的資料。IBM的IMS是第一個功能齊全的關係型資料庫,儘管設計的目的不同,是為了組織阿波羅太空探索計劃的資料。關聯式資料庫是各種程度的時間變化的、規範化的關係的集合。可以做出以下直觀的對應。
關聯式資料庫管理系統 (RDBMS) 支援關係(面向二維表)資料模型,表(table)
表的架構(關係架構)由表名和具有固定資料型別的固定數量的屬性/欄位定義,列(column)
記錄(實體)對應於表中的一行,由每個屬性的值組成,行(row)
表架構是通過資料建模過程中的規範化生成的
可以儲存通過鍵連結多個表的資訊,從而建立跨多個表的關係
在簡單的用例中,鍵用於檢索特定行以便於進行檢查或修改
結構化查詢語言,允許使用者存取和操作高度結構化表中的資料
記錄沒有特定的順序
每個欄位都是單值的
記錄有一個唯一的識別欄位或複合欄位,稱為主鍵欄位
原子性、一致性、隔離性、永續性以保持交易的可靠性。
一個設計高效資料庫的過程
資料庫處理不斷增長的資料量的能力。垂直擴充套件有助於增強資料庫伺服器的現有能力。大多數SQL資料庫支援垂直擴充套件。然而,他們可以擴大規模,而不是縮小規模。
從使用角度來說使用者不直接接觸資料庫,而是通過我們的應用程式與資料庫進行互動。
如果使用者比較多,發出的請求多了之後,由於我們的資料庫是放置在磁碟,而磁碟的效能是比較低的,所以會導致Web應用程式每次到與資料庫進行互動之後,使用者的響應速度會變慢!
解決方案:池化技術,實現資源的複用(降低資源建立銷燬的開銷)
以上是Web應用與資料庫連線層面的優化,至於在資料庫本身我們也可以進行優化,以提升效能。
資料分片,使用分散式叢集結構等雖然提高了可延伸性更好了,但也帶來了新的麻煩
1、以前在一個庫裡的資料,現在跨了多個庫,應用系統不能自己去多個庫中操作,需要使用資料庫分片中介軟體
2、分片中介軟體做簡單的資料操作時還好,但涉及到跨庫join、跨庫事務時就很頭疼了,很多人乾脆自己在業務層處理,複雜度較高
資料建模的僵化
關係型資料庫最大的限制之一是將資料組織到表和關係的特定結構中的僵硬性。由於所有的資料都不能方便地裝入表格,因此這種方法不能應用於所有的自然資料,也不能以樹和圖的形式儲存,但是,RDBMS通過以父子關係的規範化方式對這些資料進行建模來解決這個限制,這仍然是不夠的。
多樣性
資料的複雜性也給關係型資料庫帶來了限制。這些資料庫是按共同特徵來組織資料的。複雜的數位、影象和多媒體資料很難儲存、存取和處理。
空間使用效率低下
當我們定義關係的模式時,我們定義所有屬性的大小。不是所有的記錄都有使用全部空間的資料。一些有很短的長度。每條記錄不一定又適合給定的資料型別,造成了空間浪費。
沉重的變化
一個記錄所需的任何改變都需要應用於所有的記錄。因此造成了重量級的改變。根據當時存在的記錄的大小和數量,這些改變可能是昂貴的,不可行的。因此,改變一個已經存在的資料庫的模式是一個挑戰。
對巨量資料來說效率低下
SQL不適合數量大、速度快、種類多的資料,使得它在基於雲的應用中效率很低。
總結:隨著巨量資料時代的到來,結構化的方法已經無法滿足巨大的資訊處理需求,這些資訊往往是非結構化的。隨著時間的推移,SQL已經經歷了許多迭代,以支援大量的資料處理和管道。然而,對於期望快速響應和最高可延伸性的巨量資料系統來說,它仍然是低效的。
關聯式資料庫近期還是非常廣泛使用的模型,它們仍然在許多企業得到了廣泛採用。然而,面對當今多樣化、高速和海量的資料,有時需要用一個高度不同的資料庫來補充關聯式資料庫。這促進了 NoSQL 資料庫在某些領域的採用,該資料庫也稱為「非關聯式資料庫」。由於支援快速橫向擴充套件,因此非關聯式資料庫可以處理高流量,這也使其具有很強的適應性。非關係型資料庫也即NoSQL(Not Only SQL),目的總結就是高效能,提升可延伸性!
優勢:
不推薦NoSQL的場景:
RDBMS
NoSQL
不僅僅是SQL
沒有宣告性查詢語言
沒有預定義的模式
鍵 - 值對儲存,列儲存,檔案儲存,圖形資料庫
最終一致性,而非ACID屬性
非結構化和不可預知的資料
CAP定理
BASE原則
高效能,高可用性和可伸縮性
這是極為靈活的 NoSQL 資料庫型別,因為應用可以完全控制 value 欄位中儲存的內容,沒有任何限制!
典型代表:MemcacheDB、Redis
特點:
也稱為檔案儲存或面向檔案的資料庫,這些資料庫用於儲存、檢索和管理半結構化資料。無需指定檔案將包含哪些欄位。
典型代表:MongoDB、CouchDB
特點:
這些資料庫以表、行和列的形式來儲存和管理資料。它們廣泛部署於需要用列格式來捕獲無模式資料的應用中。
典型代表:Hbase、Cassandra、Hypertable
特點:將資料按照列進行儲存,最大的特點是方便儲存結構化和半結構化資料,方便做資料壓縮,對針對某一列或者某幾列的查詢有著極大的IO優勢
此資料庫將資料組織為節點和關係,這將顯示節點之間的連線。這支援更加豐富和完整的資料表示。圖形資料庫應用於社群網路、預訂系統和欺詐檢測。
典型代表:Neo4J、FlockDB
特點:
最典型的例子就是社群網路中人與人的關係,資料模型主要是以節點和邊(關係)來實現,特點在於能高效地解決複雜的關係問題
如社群網路中人物之間的關係,如果用關係型資料庫則非常複雜,用圖形資料庫將非常簡單
總結:
NewSQL 提供了與 NoSQL 相同的可延伸性,而且仍基於關係模型,還保留了極其成熟的 SQL 作為查詢語言,保證了ACID事務特性。簡單來講,NewSQL就是在傳統關係型資料庫上整合了NoSQL 強大的可延伸性。
傳統的SQL架構設計基因中是沒有分散式的,而NewSQL 生於雲時代,天生就是分散式架構。
NewSQL 的主要特性:
總的來說資料庫產品演進就是分為三代:
- 第一代資料庫架構產品:傳統的關係型資料庫主導
- 第二代資料庫架構產品:傳統關係型資料庫 + NoSQL多廠家產品配合使用
- 第三代資料庫架構產品:NewSQL(關係型+NoSQL+巨量資料+分散式架構完整解決方案)
主流資料庫產品:
RDBMS:Oracle,MySQL,PG,MSSQL,DB2,SQLLite
NoSQL:MongoDB,Redis,ElasticSearch,Cassandra,Neo4j,Solr
NewSQL: Google Spanner,PinCAP TiDB
雲資料庫:Aliyun RDS,DRDS,PolarDB,騰訊雲 TDSQL
參考文章:
---------------------------------------------------------
個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個「推薦」哦,博主在此感謝!
本文內容若有疏漏請多多包涵,如有錯誤麻煩請指正,如有想法交流非常歡迎在下方評論!