資料庫存儲結構有哪些
『壹』 數據結構:八種常見數據結構介紹
八種常見數據結構介紹
一. 數組(Array)
數組是有序元素的序列,在內存中的分配是連續的。數組會為存儲的元素都分配一個下標(索引),此下標是一個自增連續的,訪問數組中的元素通過下標進行訪問,數組下標從0開始。
- 優點:訪問數據簡單,由於數據是存儲在連續空間內,所以每個數據的內存地址都可以通過數據下標算出,因此可以直接訪問目標數據(隨機訪問)。
- 缺點:添加和刪除數據比較耗時間,因為需要移動其他數據以騰出空間或填補空缺。
- 使用場景:頻繁查詢,對存儲空間要求不大,很少增加和刪除的情況。
二. 鏈表(Linked List)
鏈表是由一系列節點(也可稱元素)組成,數據元素的邏輯順序是通過鏈表的指針地址實現。每個節點包含兩個部分,一個用於存儲元素的內存地址(數據域),另一個則指向下一個相鄰節點地址的指針(指針域)。根據鏈表的指向不同可分為單向鏈表、雙向鏈表、循環鏈表等。
- 優點:數據添加和刪除方便,只需改變指針的指向即可。
- 缺點:訪問比較耗費時間,因為數據都是分散存儲的,需要從頭節點開始逐一訪問。
- 適用場景:數據量較小,需要頻繁增加、刪除操作的場景。
三. 棧(Stack)
棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。棧的特點是先進後出,從棧頂放入元素的操作叫入棧(壓棧),取出元素叫出棧(彈棧)。
- 特點:後進先出(LIFO),即最後插入的元素最先被移除。
- 適用場景:需要逆序處理數據的場景,如函數調用棧、瀏覽器歷史記錄等。
四. 隊列(Queue)
隊列與棧一樣,也是一種線性表,其限制是僅允許在表的一端進行插入,而在表的另一端進行刪除。隊列的特點是先進先出,從一端放入元素的操作稱為入隊,取出元素為出隊。
- 特點:先進先出(FIFO),即先插入的元素先被移除。
- 適用場景:需要按順序處理數據的場景,如任務調度、消息隊列等。
五. 散列表(Hash)
散列表也叫哈希表,是根據鍵和值(key和value)直接進行訪問的數據結構。通過key和value來映射到集合中的一個位置,從而快速找到集合中的對應元素。它利用數組支持按照下標訪問的特性,是數組的一種擴展。
- 數據存儲:使用哈希函數將key轉換為數組索引的下標,然後將value存儲在該下標對應的數組位置。
- 沖突解決:當兩個key的哈希值相同(沖突)時,可以使用鏈表在已有數據的後面繼續存儲新的數據(鏈地址法),或者使用開放地址法等方法解決。
- 特點:查找速度快,但空間利用率可能不高(需要預留足夠的數組空間以減少沖突)。
六. 樹(Tree)
樹是一種數據結構,由n(n>=1)個有限節點組成一個具有層次關系的集合。每個節點有0個或多個子節點,沒有父節點的節點稱為根節點,每一個非根節點有且只有一個父節點,除了根節點外,每個子節點可以分為多個不相交的子樹。
- 常見類型:二叉樹(每個節點最多有兩個子節點)、平衡二叉樹、紅黑樹、B+樹等。
- 特點:添加、刪除元素都很快,並且在查找方面也有很多的演算法優化。
- 應用:資料庫索引結構(如B+樹)、HashMap底層源碼(如紅黑樹)等。
七. 堆(Heap)
堆可以看做是一顆用數組實現的二叉樹,沒有使用父指針或者子指針。堆根據「堆屬性」來排序,「堆屬性」決定了樹中節點的位置。堆中某個節點的值總是不大於或不小於其父節點的值。
- 類型:最大堆(根節點最大)、最小堆(根節點最小)。
- 特點:完全二叉樹結構,滿足堆屬性。添加、刪除元素的時間復雜度為O(log n)。
- 應用:優先隊列、堆排序等。
八. 圖(Graph)
圖是一系列頂點(元素)的集合,這些頂點通過一系列邊連接起來組成圖這種數據結構。頂點用圓圈表示,邊就是這些圓圈之間的連線。頂點之間通過邊連接。
- 類型:有向圖(邊具有方向)、無向圖(邊無方向)。
- 特點:可以表示復雜的關系網路,如社交網路、交通網路等。
- 應用:路徑搜索(如Dijkstra演算法、Floyd-Warshall演算法)、最短路徑問題、網路流問題等。
以下是部分數據結構的圖示:
這些數據結構各有優缺點,適用於不同的應用場景。在實際編程中,需要根據具體需求選擇合適的數據結構來優化演算法和提高程序性能。
『貳』 資料庫有哪幾種
資料庫模型:對象模型、層次模型(輕量級數據訪問協議)、網狀模型(大型數據儲存)、關系模型、面向對象模型、半結構化模型、平面模型(表格模型,一般在形式上是一個二維數組。如表格模型數據Excel)。
資料庫的架構可以大致區分為三個概括層次:內層、概念層和外層。
Operational-Relational Database
典型應用場景: ERP, CRM, 信用卡交易處理, 小型電子商務
數據存儲方式: 表格
主流廠商: Oracle Database, Microsoft SQL Server, IBM DB2, SAP Hana, Amazon Aurora, Azure SQL Database, Enterprise DB (PostgreSQL), MySQL, MemSQL
優勢:成熟的生態環境,事務保證/數據一致性
劣勢:嚴格的數據模型定義,資料庫擴展限制,與非結構化的融合使用較難。
Analytical-Relational Database
典型應用場景: 數據倉庫,商務智能,數據科學
數據存儲方式: 表格
主流廠商: Oracle Exadata, Oracle Hyperion, Teradata, IBM Netezza, IBM dashDB, Amazon Redshift, Microsoft SQL Data Warehouse, Google BigQuery
優勢: 信息和計算的一致性
劣勢: 需要針對資料庫專業的IT人員維護,數據響應數據通常在分鍾級
Operational-Nonrelational Database
典型應用場景: Web, mobile, and IoT applications, social networking, user recommendations, shopping carts
數據存儲方式: 有很多存儲結構 (document, graph, column, key-value, time series)
主流廠商: MongoDB, Amazon DynamoDB, Amazon,DocumentDB, Azure CosmosDB, DataStax, Neo4j, Couchbase, MarkLogic, Redis
優勢: 易用性,靈活性(不需要預定義的模式),水平伸縮(以適應大量數據量),一般低成本(開源)
劣勢: 缺乏事務保證
Analytical -Nonrelational Database
典型應用場景: 索引數以百萬計的數據點,預測性分析,欺詐檢測
數據存儲方式: Hadoop不需要固有的數據結構; 數據可以跨多個伺服器存儲
主流廠商: Cloudera, Hortonworks, MapR, MarkLogic, Snowflake, DataBricks, ElasticSearch
優勢: 適合批量處理, 並行處理文件; 主要是開源的,投入較低
劣勢: 緩慢的響應時間; 不適合快速查找或快速更新