阿里adb數據庫原理?
ADB筆記:目標:主要用于數據分析,后端支持BI報表和數據大屏。mysql協議,學習成本低。
特有名詞:表組,對應RDS的schema。維度表組(系統自帶):自帶維度概念的表(例如省份表等),可以放到維度表組下普通表組:一般會把需要關聯的普通表放在相同普通表組中,建議這個表組中的所有普通表的一級分區數一致,join性能會有很大提升。維度表:共享表。普通表:分區表。默認一級分區,可創建二級分區。分區:普通表才有,一級分區采用hash算法,單表數據量在60億以內,推薦。主鍵:表必須包含主鍵。由業務id、一級分區鍵組成,有些情況業務id與一級分區相同。對于記錄量特別大的表,從存儲空間和insert性能考慮,一定要減少主鍵的字段數。數據庫創建完畢后,系統會默認創建一個維度表組,所有維度相關的表,可以放到維度表組下。特殊字段:timestamp timestamp AnalyticDB精確到秒,Mysql支持自定義精度常用sql連接:https://help.aliyun.com/document_detail/94859.html?spm=a2c4g.11186623.2.38.22c965313Zwnsdnavicat連接后,無法顯示建表語句。輸入導入方式:1、DTS;2、數據集成。insert插入顯示延遲5-10S,可單獨提工單修改。更新數據:AnalyticDB不支持update操作,可以通過主鍵覆蓋的方式進行insert操作來實現和update同等的功能。數據導出功能較弱,dump方式到OSS/MaxCompute推薦權限定義方式:https://help.aliyun.com/document_detail/95546.html?spm=a2c4g.11186623.6.578.702d620fyspxAo索引&掃描原理AnalyticDB內部采用列存方式,通過單列高效過濾后,可直接通過內部記錄指針掃描其他列值,減少其他列的索引查詢開銷。子查詢修改為表關聯普通表join普通表,盡量包含分區列join條件,如果不包含則,盡量通過where條件過濾掉多余的數據。維度表join普通表,沒有限制。默認是全索引,建表成功后,某列刪除索引操作,需提工單解決。二級分區用于刪除數據,對于“回溯表”類場景,避免手動刪除。一級分區鍵選擇:1、分布均勻,避免數據傾斜。park_record_id?2、建議選擇一級分區列的數據類型為tinyint、smallint、int、bigint或者varchar。3、如果是多個普通表(不包括維度表)JOIN,則選擇參與JOIN的列作為分區列。park_record_id?park_id?4、選擇GROUP BY或DISTINCT包含的列作為分區列5、如果常用的SQL包含某列的等值或IN查詢條件,則選擇該列作為分區列。以下列子則選擇id作為分區列。 select * from table where id=123 and …; select * from table where user in(1, 2,3);使用場景以管理員使用為主,范圍掃描較多,park_id分區優勢更大。歷史單條數據,管理員查詢較少,可忽略。用戶單條查詢,在RDS完成。多參考設計樣例:https://help.aliyun.com/document_detail/97587.html?spm=a2c4g.11186623.6.655.207b43c1yl28Kxhttps://help.aliyun.com/document_detail/97620.html?spm=a2c4g.11186623.6.656.5ebb12f55cr9Pf為滿足高QPS,從設計上采用大寬表、冗余字段,并且避免表關聯。場景描述:全量sql,查詢頻率低,以區域統計查詢為主。最佳實踐:區域查詢、車場查詢讀擴大,數據分布均勻+聚集列效果。缺點:PRIMARY KEY (park_record_id,TS)PARTITION BY HASH KEY (park_record_id) PARTITION NUM 128SUBPARTITION BY LIST KEY (TS)SUBPARTITION OPTIONS (available_partition_num = 300)CLUSTERED BY (area_id,park_id)單個AnalyticDB最多表數 256單個表組總表數 256最大一級分區數 255不支持存儲過程是否支持修改表的一級分區數:當前不支持動態修改,只能刪表重建。