摘要:評估選項本報告涵蓋了為了支持工作負載涵蓋運營和分析,查詢引擎面臨的挑戰(zhàn)的細節(jié),這些細節(jié)也可以作為訪問數(shù)據(jù)庫引擎查詢引擎和存儲引擎組合以及滿足事務運營分析或混合工作負載需求的指南。
評估HTAP選項
本報告涵蓋了為了支持工作負載(涵蓋OLTP、運營、BI和分析),查詢引擎面臨的挑戰(zhàn)的細節(jié),這些細節(jié)也可以作為訪問數(shù)據(jù)庫引擎、查詢引擎和存儲引擎組合以及滿足事務、運營、分析或混合工作負載需求的指南。以下評估選項實際上也是面臨的挑戰(zhàn):
為了滿足您的工作負載需求,查詢引擎需要具備哪些功能?
為了滿足您的工作負載需求,存儲引擎需要具備哪些功能?查詢引擎能與這些存儲引擎進行良好集成嗎?
對于您的應用程序而言,哪些數(shù)據(jù)模型至關重要?哪些存儲引擎支持這些模型?單個查詢引擎支持這些存儲引擎嗎?
哪些企業(yè)級能力對您來說很重要?查詢引擎和存儲引擎如何滿足這些需求?
查詢引擎的功能工作負載的類型決定查詢引擎需要哪些能力。本報告論述的是支持混合HTAP工作負載,以下為相關考慮事項:
數(shù)據(jù)結(jié)構(gòu) – 鍵支持、聚集、分區(qū)
查詢引擎如何使用存儲引擎提供的鍵入訪問?
即使存儲引擎僅支持單個鍵值,查詢引擎支持多列鍵嗎?
訪問數(shù)據(jù)時,存儲引擎支持按鍵對數(shù)據(jù)進行聚集、部分鍵入訪問和前導鍵列謂詞嗎?
查詢引擎如何處理謂詞不在前導列的情況?
統(tǒng)計
查詢引擎維護數(shù)據(jù)的統(tǒng)計信息嗎?
查詢引擎收集每列、多個鍵或連接列的基數(shù)嗎?
統(tǒng)計為查詢引擎提供有關數(shù)據(jù)傾斜的信息嗎?
更新大表的統(tǒng)計信息需要多久?
添加新數(shù)據(jù)或舊數(shù)據(jù)老化時,查詢引擎是否可以增量更新統(tǒng)計信息?
非前導或非鍵列謂詞
即使鍵或索引的前導列沒有謂詞,查詢引擎是否能有效地訪問表格中的相關行?或總是需要全表掃描?
查詢引擎如何確定跳躍掃描(skip scan)或MDAM比全表掃描更高效?
為了生成與一個數(shù)據(jù)訪問、連接、聚合和并行度策略相關的有效計劃,查詢引擎如何使用鍵列、多鍵或連接列,以及非鍵列上的統(tǒng)計數(shù)據(jù)?
查詢引擎支持列式存儲引擎嗎?
訪問列式存儲引擎時,為了盡快獲取符合條件的行,查詢引擎是否根據(jù)謂詞基數(shù)的順序訪問列?
索引和物化視圖
引擎支持哪些索引?如何應用這些索引?
索引可以是唯一的嗎?
索引始終與基表一致嗎?
支持唯一索引掃描(只訪問索引,不訪問源表)嗎?
這些索引對更新有什么影響(尤其是添加了更多索引時)?
這些索引如何通過批量加載不斷地進行更新?
支持物化視圖嗎?
能同步和異步維護物化視圖嗎?
維護物化視圖的開銷是多少?
在可行的情況下,查詢引擎是否會自動重寫查詢以使用物化視圖?
用戶定義的物化視圖是否支持查詢重寫?
并行度
查詢引擎如何訪問跨節(jié)點分區(qū)和節(jié)點上不同磁盤的數(shù)據(jù)?
查詢引擎是否依賴于存儲引擎進行分區(qū)?或為了并行訪問這些分區(qū),查詢引擎提供并行基礎架構(gòu)嗎?
如果查詢引擎考慮串行和并行計劃,它如何確定所需的并行度?
查詢引擎能根據(jù)并行度僅使用所需的節(jié)點嗎?
減少搜索空間
查詢引擎使用哪些優(yōu)化器技術(shù)?
它能為較大復雜的BI查詢生成良好的計劃、同時為較短運營查詢進行快速編譯嗎?
運營查詢使用了哪些查詢計劃緩存技術(shù)?
如何管理查詢計劃緩存?
優(yōu)化器如何隨著工作負載的變化而發(fā)展?
優(yōu)化器能檢測查詢模式嗎?
連接類型
支持的連接類型有哪些?
如何將連接用于不同的工作負載?
使用錯誤的連接類型有什么影響?如何避免這種影響?
數(shù)據(jù)流和訪問
查詢引擎如何處理復雜分析查詢的大量并行數(shù)據(jù)流,同時提供對運營工作負載數(shù)據(jù)的直接快速訪問?
哪些功能提高了分析工作負載和運營工作負載的效率(例如,預取數(shù)據(jù))?
混合工作負載
能確定工作負載執(zhí)行的優(yōu)先級嗎?
確定工作負載優(yōu)先級的標準是什么?
能為不同服務級別的工作負載分配不同的資源嗎?
查詢優(yōu)先級隨著其占用更多資源而降低嗎?
是否有防止饑餓機制,或是否有一種方式,能在恢復低優(yōu)先級查詢之前切換執(zhí)行高優(yōu)先級查詢?
流式數(shù)據(jù)
查詢引擎能直接處理流式數(shù)據(jù)嗎?
針對流式數(shù)據(jù)需要支持哪些功能?例如,基于行和/或基于時間窗口功能?
處理流式數(shù)據(jù)的語法或API有哪些?這會將您鎖定到這個查詢引擎嗎?
功能支持
數(shù)據(jù)庫為運營、分析和所有其他工作負載提供了哪些功能?
集成查詢引擎和存儲引擎在集成查詢引擎和存儲引擎之前,首先您要確定存儲引擎需要提供哪些功能。然后,您需要評估查詢引擎能否支持和擴展這些功能,以及查詢引擎能否與存儲引擎進行良好集成。以下問題不僅能確定它們(查詢引擎或存儲引擎,或它們的組合)是否能提供支持,而且確定它們能提供什么水平的支持。
統(tǒng)計
存儲引擎維護數(shù)據(jù)的哪些統(tǒng)計信息?
通過這些統(tǒng)計信息,查詢引擎能更快地生成直方圖嗎?
為了避免全表掃描來計算統(tǒng)計信息,存儲引擎支持抽樣嗎?
為了統(tǒng)計信息的增量更新,存儲引擎提供訪問最近變動數(shù)據(jù)的方法嗎?
為了設置更新數(shù)據(jù)的間隔時間,存儲引擎為查詢引擎維護更新計數(shù)器嗎?
鍵結(jié)構(gòu)
存儲引擎支持鍵入訪問嗎?
如果它不是多列鍵,查詢引擎會將它映射到多列鍵嗎?
它能用于前導鍵列的范圍訪問嗎?
分區(qū)
存儲引擎如何跨磁盤和節(jié)點對數(shù)據(jù)進行分區(qū)?它支持哈希和/或范圍分區(qū)、或這些分區(qū)的組合嗎?
為了跨分區(qū)平衡負載、避免性能瓶頸,查詢引擎需要對數(shù)據(jù)進行加鹽(salt data)嗎?
如何添加一個加鹽鍵作為表格鍵最左邊的列、并且避免全表掃描?
集群擴展或收縮時,存儲引擎會重新分區(qū)嗎?或由查詢引擎執(zhí)行?
達到重新平衡時,會對數(shù)據(jù)進行完全的讀/寫訪問嗎?
查詢引擎如何將數(shù)據(jù)訪問本地化,并避免節(jié)點之間的數(shù)據(jù)亂序?
數(shù)據(jù)類型支持
查詢引擎和存儲引擎支持哪些數(shù)據(jù)類型?它們?nèi)绾斡成洌?/p>
可以對這些類型實施數(shù)值約束嗎?
哪個引擎實施引用約束?
支持哪些字符集?
支持排序規(guī)則嗎?
提供哪些壓縮類型?
支持加密嗎?
投影和選擇
存儲引擎或查詢引擎完成投影?查詢引擎和存儲引擎對哪些謂詞求值?
在哪對多列謂詞、IN列表和具有ORs和ANDs的多個謂詞求值?
IN列表長度是多少?
存儲引擎根據(jù)過濾效果的順序?qū)χ^詞求值嗎?
謂詞如何比較同一表格的不同列?
在哪對謂詞中的復雜表達式(可能帶有函數(shù))求值?
存儲引擎如何處理缺省值或缺失值?
為了提高性能,能使用技術(shù)(例如,矢量化、CPU LI、L2、L3緩存)減少串行化開銷嗎?
可擴展性
存儲引擎是否支持操作的服務器端下推,例如,HBase的協(xié)處理器、或Cassandra的前觸發(fā)器和后觸發(fā)器?
查詢引擎如何使用以上存儲引擎提供的功能?
安全執(zhí)行
查詢引擎和存儲引擎的安全框架是什么?它們?nèi)绾斡成涞紸NSI SQL安全執(zhí)行?
查詢引擎與底層Hadoop Kerberos安全模型集成嗎?
查詢引擎與安全框架(例如,Sentry或Ranger)集成嗎?
查詢引擎如何與安全日志、以及底層存儲引擎和平臺安全的SIEM功能集成?
事務管理
是否完全由存儲引擎提供高可用復制、備份和恢復、以及多數(shù)據(jù)中心支持?或由查詢引擎確保所有操作的一致性和完整性?
實施了什么級別的ACID或BASE事務支持?
事務支持如何在查詢引擎和存儲引擎之間進行集成,例如,預寫日志和使用協(xié)處理器?事務是否具有良好的擴展性 – 所有事務工作負載跨多個事務管理器分配嗎?
提供了多數(shù)據(jù)中心支持嗎?
支持雙活單主機復制或多主機復制嗎?
事務處理的開銷有多大?
提供在線備份和時間點恢復嗎?
**元數(shù)據(jù)支持
如何將存儲引擎的元數(shù)據(jù)(例如,表名、位置、分區(qū)、列和數(shù)據(jù)類型)映射到查詢引擎的元數(shù)據(jù)?
如何通過查詢引擎管理存儲引擎的特定選項(例如,壓縮、加密和列族)?
查詢引擎為外部表提供事務支持、二級索引、視圖、約束和物化視圖嗎?
如果能在查詢引擎外部對外部表進行更改,那么查詢引擎如何處理這些更改以及它們可能導致的差異?
性能、擴展和并發(fā)的注意事項
如果存儲引擎有批量加載的能力,那么查詢引擎如何保證多次加載數(shù)據(jù)的事務一致性?
存儲引擎是否提供行集(rowset)插入和讀取,來同時處理大量行?
存儲引擎提供哪些類型的快速掃描選項 – 快照掃描、預取和其他類型?
存儲引擎為查詢引擎的并行操作提供了簡單的集成方法嗎?
存儲引擎支持哪些級別的并發(fā)和混合工作負載能力?
錯誤處理
如何記錄存儲引擎和查詢引擎的錯誤?
查詢引擎如何將存儲引擎中的錯誤映射到有用的錯誤信息和解決方法選項?
其他操作
為了最小化運營和性能影響,查詢引擎如何處理存儲引擎特定運營情況(例如,壓縮或拆分)?
數(shù)據(jù)模型支持以下為評估數(shù)據(jù)模型支持的注意事項:
運營與分析數(shù)據(jù)模型
規(guī)范化數(shù)據(jù)模型能很好地支持運營工作負載嗎?
星型和雪花數(shù)據(jù)模型能很好地支持分析工作負載嗎?
NoSQL數(shù)據(jù)模型
查詢引擎支持哪些存儲引擎數(shù)據(jù)模型 – 鍵值、有序鍵值、Bigtable、文檔、全文檢索、圖形和關系型數(shù)據(jù)模型?
查詢引擎API能在多大程度上覆蓋存儲引擎API?
為了支持存儲引擎API,查詢引擎能在多大程度上映射和/或擴展其API?
企業(yè)級能力以下是評估企業(yè)級能力的考慮事項:
高可用性
提供多長的正常運行時間(99.99%-99.999%)?
能在線升級底層OS(有可用于讀取和寫入的數(shù)據(jù))嗎?
能在線升級底層文件系統(tǒng)(例如,Hadoop分布式文件系統(tǒng))嗎?
能在線升級底層存儲引擎嗎?
能在線升級查詢引擎嗎?
為了適應節(jié)點和/或磁盤的擴容和收縮,能在線重新分配數(shù)據(jù)嗎?
能在線更改表格定義嗎?例如,更改所有列數(shù)據(jù)類型,添加、刪除、重命名列?
能在線創(chuàng)建和刪除二級索引?
支持在線備份——完全備份和增量備份嗎?
可管理性
支持哪些管理功能(更多信息,請參閱圖1-9)?
支持混合負載的管理嗎(即通過每秒的事務來分析運營性能,根據(jù)復雜的查詢和其結(jié)果來衡量分析性能)?
與分析工作負載相反,在運營工作負載上收集指標的開銷是多少?
能設置收集統(tǒng)計信息的間隔來減少開銷嗎?
能否根據(jù)工作負載的優(yōu)先級和/或資源分配,使工作負載達到服務級別目標?
能否提供從應用到查詢引擎、再到存儲引擎的端到端的事務和查詢的詳細統(tǒng)計信息?
為查詢提供操作符(執(zhí)行計劃)的度量信息嗎?
為所有工作負載提供到分區(qū)級別的度量信息嗎?
能否提供足夠的信息來找出傾斜或瓶頸的位置?
如何與YARN或Mesos集成?
結(jié)論本報告總結(jié)了一些使用單一查詢引擎來同時滿足運營和分析負載可能遇到的挑戰(zhàn)。目前而言,即使未滿足HTAP的所有要求,查詢引擎也能夠滿足客戶的混合工作負載需求。該報告還闡述了您應該尋找什么,以及在使用終極數(shù)據(jù)庫處理所有工作負載(運營和分析)時,您可能需要做出的調(diào)整。
?
Rohit Jain是Esgyn的聯(lián)合創(chuàng)始人和首席技術(shù)官。Esgyn是一家開源數(shù)據(jù)庫公司,致力于構(gòu)建融合型分布式大數(shù)據(jù)平臺。2015年,惠普將Apache Trafodion(企業(yè)級大數(shù)據(jù)MPP SQL數(shù)據(jù)庫)捐贈給了Apache軟件基金會。在Apache Trafodion的基礎上,EsygnDB的愿景是建立一個能處理任何數(shù)據(jù)、任何大小和任何工作負載的融合型分布式大數(shù)據(jù)平臺。在過去的28年中,作為一個資深數(shù)據(jù)庫專家,Rohit在應用程序和數(shù)據(jù)庫開發(fā)領域曾為Tandem、Compaq和Hewlett-Packard工作過。他經(jīng)驗豐富,主要涉及在線事務處理、運營數(shù)據(jù)存儲、數(shù)據(jù)集市、企業(yè)數(shù)據(jù)倉庫、BI和大規(guī)模分布式并行系統(tǒng)的高級分析。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17771.html
閱讀 1795·2021-10-27 14:15
閱讀 3900·2021-10-08 10:12
閱讀 1194·2021-09-22 15:55
閱讀 3248·2021-09-22 15:17
閱讀 857·2021-09-02 15:40
閱讀 1763·2019-08-29 18:33
閱讀 1117·2019-08-29 15:22
閱讀 2374·2019-08-29 11:08