很可惜 T 。T 您現(xiàn)在還不是作者身份,不能自主發(fā)稿哦~
如有投稿需求,請把文章發(fā)送到郵箱tougao@appcpx.com,一經(jīng)錄用會有專人和您聯(lián)系
咨詢?nèi)绾纬蔀榇河鹱髡哒埪?lián)系:鳥哥筆記小羽毛(ngbjxym)
這是彭文華的第143篇原創(chuàng)
最近選題都選神經(jīng)了,就像一只在玩耍毛線團的貓,到處找線頭。終于在一個群里看到有人問一個合適的問題了,我這是久旱逢甘霖哪!
剛看到這個問題的時候我都楞了一下。說起來這個問題我還是在 10 多年前研究的。那時候玩的是 Oracle 。這個問題的回答當然是肯定的,物化視圖占存儲空間。但我還想多扯兩句,把這件事情掰開揉碎了講一遍。大概是這么個思路吧:
視圖是啥?解決啥問題?
物化視圖又是啥?又解決啥問題?
大數(shù)據(jù)場景下,物化視圖怎么用?
既然都問這個問題了,那你肯定是個 SQL Boy 了。我們在跑數(shù)據(jù)的時候,通常要關聯(lián)很多表。當業(yè)務逐漸復雜,表的數(shù)量變多的時候,表和表之間的關聯(lián)關系就會非常非常的繁復。
為了讓事情變的更簡單,我們通常會把相對比較常用,且關系比較固定的幾個表關聯(lián)的內(nèi)容固化下來,以后我們每次都用這個 SQL 腳本就好了。
各個數(shù)據(jù)庫開發(fā)團隊也發(fā)現(xiàn)這個強需求,就推出了一個“View 視圖”的功能,這個視圖本質(zhì)上就是一個 Select 語句。我們查詢這個視圖,實際上就是做了一個嵌套查詢, view 的名稱恒等于子查詢中的內(nèi)容。
因為 View 就是一段 Select 語句,所以 View 幾乎不占存儲空間。
我們現(xiàn)在總結(jié)一下:View,視圖,又叫虛擬表、虛表,主要作用是降低SQL復雜性,讓代碼工作更簡潔。同時因為視圖做了表間關系的聚合和字段的重命名,視圖也有一定的安全性,外界訪問的時候根本無法知道數(shù)據(jù)庫的真實結(jié)構(gòu)是怎樣的。
更重要的是,因為其聚合的特性,視圖在數(shù)據(jù)架構(gòu)中有非常重要的意義,它可以作為基礎表和上層SQL邏輯的解耦工具,規(guī)避基礎表機構(gòu)變更帶來的上層SQL代碼調(diào)整的問題。
視圖在傳統(tǒng)數(shù)據(jù)庫中大量使用。而在大數(shù)據(jù)環(huán)境中,有時候也會使用。
成也蕭何敗蕭何,視圖的核心能力其實就是它的核心問題所在。因為視圖本質(zhì)上只是一個 Select 語句,我們查詢這個視圖的時候?qū)嵸|(zhì)上還是查詢視圖中定義的各個基礎表。一旦這些關聯(lián)關系稍微復雜一些、限定條件多一些,那就效率就完蛋了。
而且因為視圖只是一段 SQL ,常規(guī)的一些建索引、分區(qū)分表等各種優(yōu)化手段也就徹底失效了。
那我們能不能既保留視圖的降低SQL復雜性、增強安全性和解耦架構(gòu)等特性,又能規(guī)避效率低下的問題呢?當然是有的!這時候就該物化視圖出場了。
物化視圖,顧名思義,就是把視圖物理化,變成一張類似于物理表的存在。所以,視圖是“虛擬”的表,物化視圖是“實在”的表。
創(chuàng)建物化視圖和創(chuàng)建普通視圖的語句幾乎一樣,就是把 View 改成materialized view 。只不過物化視圖可多一個“更新頻率”的參數(shù),就是多久重新物化一次。
View 只是一個 SQL ,所以不存在數(shù)據(jù)更新的問題;但是物化視圖不一樣,他都已經(jīng)落地成表了,不更新的話,數(shù)據(jù)永遠都那樣。
物化視圖既然已經(jīng)是張表了,那么就擁有表的一切特性,可以加索引,可以分區(qū)等等,當然也會占用存儲空間了。所以物化視圖是一個用空間換取時間,犧牲實時性,換取使用效率的絕佳方案!
其實很多技巧在傳統(tǒng)數(shù)據(jù)庫的時代就已經(jīng)很成熟了,既然這些方法這么好用,為啥不在大數(shù)據(jù)環(huán)境中也用上呢?
所以不僅僅是Oracle 、MySQL 、Postgre 等關系型數(shù)據(jù)庫能做,現(xiàn)在Doris 、ClickHouse 等等各種大數(shù)據(jù)環(huán)境下的分析性數(shù)據(jù)庫也都具備物化視圖的功能。Hive 3.0 也增加了這個功能。
用起來呢,基本上都是一樣的。反正原理是一樣的,在不同組件**據(jù)他們的要求寫一下就好了。
大致的語法就是:
CREATE MATERIALIZED VIEW IF NOT EXISTS 物化視圖名稱
ON CLUSTER 集群名稱,就是放在哪里
ENGINE = 指定引擎
PARTITION BY 分區(qū)字段
ORDER BY (排序字段)
SETTINGS 各種參數(shù)
AS
SELECT
字段1,字段2,字段1*字段2 as 字段3
FROM 表名稱 ,可以關聯(lián)多個表
GROUP BY 聚合字段;
想在哪里用,就把上面的語法按照那個環(huán)境的要求稍微修改一下就可了。在Doris 、Clickhouse 、甚至 Spark 也支持物化視圖了。
你看,是不是跟建表是一樣一樣的?
不過物化視圖千好萬好,但還是有三個問題不好解決:
1、前面說過,物化視圖是犧牲實時性,換取查詢效率的思路,所以數(shù)據(jù)更新機制是繞不過去的坎。物化視圖畢竟還是在做數(shù)據(jù)物理化,所以必然會遇到數(shù)據(jù)多久更新一次的問題,更新時間要根據(jù)邏輯的復雜程度和數(shù)據(jù)量來決定。如果你的實時性要求很高,建議不要用;
2、物化視圖畢竟還是有視圖的特性的。所以根本沒法執(zhí)行類似“insert into”的語句往里插入數(shù)據(jù),他實質(zhì)是是“快照”性質(zhì)。當然,刪除數(shù)據(jù)也是沒用的。所以他只適合 OLAP 的場景;
3、物化視圖同時還是空間換時間的典范,所以這個不能多用,要不就泛濫成災了。數(shù)據(jù)會爆炸的!存儲空間爆發(fā)式增長,到時候就一發(fā)不可收拾了。
視圖是數(shù)據(jù)架構(gòu)中解耦神器,可以屏蔽復雜邏輯,隱藏原始表結(jié)構(gòu),具有簡化、解耦、安全等特性。但是視圖本質(zhì)上是一段 SQL ,所以效率上有很大的影響。
物化視圖是基于視圖的思路,進一步把視圖的查詢結(jié)果物理化成為一張實表,這樣既能擁有視圖的特性,又能規(guī)避效率的問題,是 OLAP 場景中非常好用的手段。
但是物化視圖也有三個問題:
1、實時性欠缺;
2、只能刷新,無法增刪改數(shù)據(jù)
3、需要管理好,避免數(shù)據(jù)爆炸。
擴展閱讀:數(shù)據(jù)倉庫建設全套資料包,公眾號“大數(shù)據(jù)架構(gòu)師”后臺回復“數(shù)據(jù)倉庫”即可獲得。
配合以下文章享受更佳
【實戰(zhàn)】 手摸手搭建一個實時數(shù)據(jù)倉庫
本文為作者獨立觀點,不代表鳥哥筆記立場,未經(jīng)允許不得轉(zhuǎn)載。
《鳥哥筆記版權(quán)及免責申明》 如對文章、圖片、字體等版權(quán)有疑問,請點擊 反饋舉報
我們致力于提供一個高質(zhì)量內(nèi)容的交流平臺。為落實國家互聯(lián)網(wǎng)信息辦公室“依法管網(wǎng)、依法辦網(wǎng)、依法上網(wǎng)”的要求,為完善跟帖評論自律管理,為了保護用戶創(chuàng)造的內(nèi)容、維護開放、真實、專業(yè)的平臺氛圍,我們團隊將依據(jù)本公約中的條款對注冊用戶和發(fā)布在本平臺的內(nèi)容進行管理。平臺鼓勵用戶創(chuàng)作、發(fā)布優(yōu)質(zhì)內(nèi)容,同時也將采取必要措施管理違法、侵權(quán)或有其他不良影響的網(wǎng)絡信息。
一、根據(jù)《網(wǎng)絡信息內(nèi)容生態(tài)治理規(guī)定》《中華人民共和國未成年人保護法》等法律法規(guī),對以下違法、不良信息或存在危害的行為進行處理。
1. 違反法律法規(guī)的信息,主要表現(xiàn)為:
1)反對憲法所確定的基本原則;
2)危害國家安全,泄露國家秘密,顛覆國家政權(quán),破壞國家統(tǒng)一,損害國家榮譽和利益;
3)侮辱、濫用英烈形象,歪曲、丑化、褻瀆、否定英雄烈士事跡和精神,以侮辱、誹謗或者其他方式侵害英雄烈士的姓名、肖像、名譽、榮譽;
4)宣揚恐怖主義、極端主義或者煽動實施恐怖活動、極端主義活動;
5)煽動民族仇恨、民族歧視,破壞民族團結(jié);
6)破壞國家宗教政策,宣揚邪教和封建迷信;
7)散布謠言,擾亂社會秩序,破壞社會穩(wěn)定;
8)宣揚淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪;
9)煽動非法集會、結(jié)社、游行、示威、聚眾擾亂社會秩序;
10)侮辱或者誹謗他人,侵害他人名譽、隱私和其他合法權(quán)益;
11)通過網(wǎng)絡以文字、圖片、音視頻等形式,對未成年人實施侮辱、誹謗、威脅或者惡意損害未成年人形象進行網(wǎng)絡欺凌的;
12)危害未成年人身心健康的;
13)含有法律、行政法規(guī)禁止的其他內(nèi)容;
2. 不友善:不尊重用戶及其所貢獻內(nèi)容的信息或行為。主要表現(xiàn)為:
1)輕蔑:貶低、輕視他人及其勞動成果;
2)誹謗:捏造、散布虛假事實,損害他人名譽;
3)嘲諷:以比喻、夸張、侮辱性的手法對他人或其行為進行揭露或描述,以此來激怒他人;
4)挑釁:以不友好的方式激怒他人,意圖使對方對自己的言論作出回應,蓄意制造事端;
5)羞辱:貶低他人的能力、行為、生理或身份特征,讓對方難堪;
6)謾罵:以不文明的語言對他人進行負面評價;
7)歧視:煽動人群歧視、地域歧視等,針對他人的民族、種族、宗教、性取向、性別、年齡、地域、生理特征等身份或者歸類的攻擊;
8)威脅:許諾以不良的后果來迫使他人服從自己的意志;
3. 發(fā)布垃圾廣告信息:以推廣曝光為目的,發(fā)布影響用戶體驗、擾亂本網(wǎng)站秩序的內(nèi)容,或進行相關行為。主要表現(xiàn)為:
1)多次發(fā)布包含售賣產(chǎn)品、提供服務、宣傳推廣內(nèi)容的垃圾廣告。包括但不限于以下幾種形式:
2)單個帳號多次發(fā)布包含垃圾廣告的內(nèi)容;
3)多個廣告帳號互相配合發(fā)布、傳播包含垃圾廣告的內(nèi)容;
4)多次發(fā)布包含欺騙性外鏈的內(nèi)容,如未注明的淘寶客鏈接、跳轉(zhuǎn)網(wǎng)站等,誘騙用戶點擊鏈接
5)發(fā)布大量包含推廣鏈接、產(chǎn)品、品牌等內(nèi)容獲取搜索引擎中的不正當曝光;
6)購買或出售帳號之間虛假地互動,發(fā)布干擾網(wǎng)站秩序的推廣內(nèi)容及相關交易。
7)發(fā)布包含欺騙性的惡意營銷內(nèi)容,如通過偽造經(jīng)歷、冒充他人等方式進行惡意營銷;
8)使用特殊符號、圖片等方式規(guī)避垃圾廣告內(nèi)容審核的廣告內(nèi)容。
4. 色情低俗信息,主要表現(xiàn)為:
1)包含自己或他人性經(jīng)驗的細節(jié)描述或露骨的感受描述;
2)涉及色情段子、兩性笑話的低俗內(nèi)容;
3)配圖、頭圖中包含庸俗或挑逗性圖片的內(nèi)容;
4)帶有性暗示、性挑逗等易使人產(chǎn)生性聯(lián)想;
5)展現(xiàn)血腥、驚悚、殘忍等致人身心不適;
6)炒作緋聞、丑聞、劣跡等;
7)宣揚低俗、庸俗、媚俗內(nèi)容。
5. 不實信息,主要表現(xiàn)為:
1)可能存在事實性錯誤或者造謠等內(nèi)容;
2)存在事實夸大、偽造虛假經(jīng)歷等誤導他人的內(nèi)容;
3)偽造身份、冒充他人,通過頭像、用戶名等個人信息暗示自己具有特定身份,或與特定機構(gòu)或個人存在關聯(lián)。
6. 傳播封建迷信,主要表現(xiàn)為:
1)找人算命、測字、占卜、解夢、化解厄運、使用迷信方式治?。?br /> 2)求推薦算命看相大師;
3)針對具體風水等問題進行求助或咨詢;
4)問自己或他人的八字、六爻、星盤、手相、面相、五行缺失,包括通過占卜方法問婚姻、前程、運勢,東西寵物丟了能不能找回、取名改名等;
7. 文章標題黨,主要表現(xiàn)為:
1)以各種夸張、獵奇、不合常理的表現(xiàn)手法等行為來誘導用戶;
2)內(nèi)容與標題之間存在嚴重不實或者原意扭曲;
3)使用夸張標題,內(nèi)容與標題嚴重不符的。
8.「飯圈」亂象行為,主要表現(xiàn)為:
1)誘導未成年人應援集資、高額消費、投票打榜
2)粉絲互撕謾罵、拉踩引戰(zhàn)、造謠攻擊、人肉搜索、侵犯隱私
3)鼓動「飯圈」粉絲攀比炫富、奢靡享樂等行為
4)以號召粉絲、雇用網(wǎng)絡水軍、「養(yǎng)號」形式刷量控評等行為
5)通過「蹭熱點」、制造話題等形式干擾輿論,影響傳播秩序
9. 其他危害行為或內(nèi)容,主要表現(xiàn)為:
1)可能引發(fā)未成年人模仿不安全行為和違反社會公德行為、誘導未成年人不良嗜好影響未成年人身心健康的;
2)不當評述自然災害、重大事故等災難的;
3)美化、粉飾侵略戰(zhàn)爭行為的;
4)法律、行政法規(guī)禁止,或可能對網(wǎng)絡生態(tài)造成不良影響的其他內(nèi)容。
二、違規(guī)處罰
本網(wǎng)站通過主動發(fā)現(xiàn)和接受用戶舉報兩種方式收集違規(guī)行為信息。所有有意的降低內(nèi)容質(zhì)量、傷害平臺氛圍及欺凌未成年人或危害未成年人身心健康的行為都是不能容忍的。
當一個用戶發(fā)布違規(guī)內(nèi)容時,本網(wǎng)站將依據(jù)相關用戶違規(guī)情節(jié)嚴重程度,對帳號進行禁言 1 天、7 天、15 天直至永久禁言或封停賬號的處罰。當涉及欺凌未成年人、危害未成年人身心健康、通過作弊手段注冊、使用帳號,或者濫用多個帳號發(fā)布違規(guī)內(nèi)容時,本網(wǎng)站將加重處罰。
三、申訴
隨著平臺管理經(jīng)驗的不斷豐富,本網(wǎng)站出于維護本網(wǎng)站氛圍和秩序的目的,將不斷完善本公約。
如果本網(wǎng)站用戶對本網(wǎng)站基于本公約規(guī)定做出的處理有異議,可以通過「建議反饋」功能向本網(wǎng)站進行反饋。
(規(guī)則的最終解釋權(quán)歸屬本網(wǎng)站所有)