dbms: 資料庫管理系統(英語:database management system,縮寫:dbms) 是一種針對物件資料庫,為管理資料庫而設計的大型計算機軟體管理系統。具有代表性的資料管理系統有:oracle、microsoft sql server、access、mysql及postgresql等。通常資料庫管理師會使用資料庫管理系統來建立資料庫系統。
rdbms: 專門管理關係型資料庫的管理系統
商用dbms: oracle,sql server,ibm db2
開源資料庫系統:mysql,postgresql
成分說明:
sql parser: sql語句直譯器;用於對使用者輸入的sql語句進行解析,檢查語法錯誤,解析查詢語義,生成 sql 的內部表達:query plan(執行方案)。一般執行方案看起來如下:
query optimizer: 估計不同的query plan的執行時間和空間代價;從多個query plan 選擇最優的。
data storage and indexing:資料的儲存和訪問
buffer pool:在記憶體中快取硬碟資料
execution engine :根據query plan 完成相應的操作和運算
transaction management:事務管理,實現acid要求。
資料庫和檔案系統的對比:
不同點:
共同點:資料儲存在硬碟;
資料庫在磁碟中使用page為單位來儲存一條條的記錄record。每個page開始有乙個page header,末尾有個slot槽。每個slot 槽都指示了page內的一條記錄的偏移量。
然後tuple的儲存結構是:
整個記錄的總位元組數-> 第乙個變長字段偏移量->第二個變長字段偏移->定長字段內容->-----> 第乙個變長字段值····
例如:
其定義為:
create table student (
id integer not null, name varchar(20), birthday date,
gender enum(m, f), major varchar(20), year year, gpa float,
primary key (id));
那麼每一條記錄儲存形式為:
第乙個位元組是總長度33個位元組。第二個位元組是name整個變長字段對應的偏移量。
例如:
select name, gpa
from student
where major = 『計算機』;
問題: 效能比較差,尤其是資料量大的時候,而所需的資料很少的時候。
例如存在100個系,我們只想過濾出其中的計算機系,那麼順序訪問會遍歷全部的資料。
使用索引即可避免順序訪問,達到有選擇的訪問。例如上面的例子中,如果我們對major欄位建立索引,那麼我們可以直接定位到計算機系,而不用遍歷所有的資料。
索引的型別:
雜湊索引核心——鍊錶雜湊表:
對每條記錄的key進行hash,然後把雜湊結果掛到相應的雜湊表。當hash鏈上的資料太多的時候,可以進行重新雜湊。
樹索引的核心——b
+b^+
b+樹
b+樹 其實就是平衡二叉樹的擴充套件。存在兩類節點:葉子節點和內部節點。其中葉子節點存放著記錄的key值。乙個葉子節點就是乙個page,裡面可能包含很多條資料。每條資料以(key,ptr) 來儲存。ptr 指向真實的記錄id,通過這個id可以獲取record的全部資料。乙個page裡面的key都是有序的。
內部節點是為了組織葉子節點而存在。
例如:b+樹的搜尋:
b+樹插入:
大規模資料實戰
前後端處理分離解耦,前批處理 有向圖編譯,後端為有向圖優化 自動資源分配 自動監控 錯誤跟蹤 首先我們忘掉所有的框架,我們想做的業務設計其實是就是乙個count 乙個topk 衡量指標很簡單是sla 工程一致性模型,強一致性,弱一致性,最終一致性 cloud spanner 就是強一致性,業務級的資...
Python大規模資料插入Postgresql
需要owner許可權 alter table t rs standard satellite image add constraint unique source product id unique source product id batchinsert批量插入 def batchinsert ...
大資料 阿里巴巴的大規模資料流處理系統
隨著阿里系的應用幾乎覆蓋了移動網際網路的全行業,阿里巴巴開始致力於搭建世界一流的計算引擎。在2015年,阿里巴巴開始將視線轉向flink,發現表現不錯,於是開始將其投入到計算引擎的測試中,並定義內部名稱為blink。在隨後的一年克服了穩定性和可靠性的問題 而到了2017年,就開始專注於blink各元...