新一代實(shí)時(shí)數(shù)倉:阿里云數(shù)據(jù)庫 SelectDB 版--100% 兼容 Apache Doris 的全托管云原生實(shí)時(shí)數(shù)倉
阿里云數(shù)據(jù)庫 SelectDB 版是 100% 兼容 Apache Doris 的云原生數(shù)倉產(chǎn)品,具有存算分離和實(shí)時(shí)彈性的核心優(yōu)勢(shì)。同時(shí)提供離線及實(shí)時(shí)流式數(shù)據(jù)同步鏈路;實(shí)時(shí)更新和萬級(jí) QPS 高并發(fā)點(diǎn)查特性。提供基于倒排的文本檢索和日志分析能力,同時(shí)支持基于 Multi-Catalog 的湖倉一體方案和開放的生態(tài)產(chǎn)品協(xié)同能力。本文將介紹 SelectDB 產(chǎn)品能力及其所支持的場(chǎng)景,為數(shù)倉選型提供參考和借鑒。
一、阿里云 SelectDB 產(chǎn)品產(chǎn)生背景
1. Apache Doris 是全球流行的開源實(shí)時(shí)數(shù)倉產(chǎn)品
SelectDB 是基于 Apache Doris 提供的一個(gè)商業(yè)化的云原生產(chǎn)品。Apache Doris 是一款國產(chǎn)的開源數(shù)據(jù)庫,專注于實(shí)時(shí)數(shù)倉領(lǐng)域。該項(xiàng)目始于 2013 年,并于 2022 年在 Apache 基金會(huì)的支持下成為頂級(jí)項(xiàng)目。經(jīng)過將近 10 年的演進(jìn),Apache Doris 的內(nèi)核已經(jīng)非常穩(wěn)定和成熟?,F(xiàn)在,該項(xiàng)目在社區(qū)中的關(guān)注度和活躍度都非常高。
2. Apache Doris 被 4000+ 國內(nèi)外企業(yè)生產(chǎn)系統(tǒng)使用
目前,在國內(nèi)外使用 Apache Doris 的企業(yè)范圍非常廣泛,遍布各個(gè)行業(yè),包括一些行業(yè)的頭部企業(yè)。其成熟度毋庸置疑,已經(jīng)在客戶業(yè)務(wù)中得到了廣泛驗(yàn)證。
二、SelectDB 核心能力
SelectDB 是在 Doris 基礎(chǔ)上孵化出來的一個(gè)商業(yè)化的實(shí)時(shí)數(shù)倉,在 Doris 上做了云原生改造,并在阿里云上提供托管服務(wù)。接下來將從用戶使用實(shí)時(shí)數(shù)倉的整個(gè)鏈路,展示 SelectDB 在各個(gè)環(huán)節(jié)上的產(chǎn)品能力的匹配。
1. 全面數(shù)據(jù)導(dǎo)入及同步鏈路
首先來看數(shù)據(jù)導(dǎo)入層面。對(duì)于數(shù)倉產(chǎn)品來說,客戶最先面臨的問題就是如何將數(shù)據(jù)同步到數(shù)倉中,以便向上層業(yè)務(wù)提供數(shù)據(jù)服務(wù),包括實(shí)時(shí)分析等業(yè)務(wù)構(gòu)建。在這一層面,SelectDB 是基于 Apache Doris 的,因此具有良好的開放性和生態(tài)兼容性。它支持各種數(shù)據(jù)源,包括流式和批量的大數(shù)據(jù)鏈路加速導(dǎo)入。
SelectDB 支持的數(shù)據(jù)類型和數(shù)據(jù)源非常豐富,如 CSV、MySQL、SQLServer、Oracle 等數(shù)據(jù)源,能夠進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換和導(dǎo)入。對(duì)于流式數(shù)據(jù),SelectDB 與 Flink、Kafka 等常見鏈路有完善的對(duì)接方式;對(duì)于大數(shù)據(jù)體系如 hive,Hadoop,MC 等,SelectDB 支持通過 DataWorks 和 DataX 等平臺(tái)及工具,進(jìn)行批量離線數(shù)據(jù)的導(dǎo)入。
此外,對(duì)于數(shù)據(jù)湖的數(shù)據(jù),為了進(jìn)行數(shù)據(jù)湖的聯(lián)邦查詢和湖倉統(tǒng)一管理,SelectDB 與 Iceberg、Hudi 有良好的兼容性。這使得在數(shù)據(jù)湖層面可以進(jìn)行很好的數(shù)據(jù)分析,在業(yè)務(wù)層面可以通過統(tǒng)一的 SelectDB 訪問層向上層業(yè)務(wù)提供數(shù)據(jù)湖和數(shù)倉的統(tǒng)一服務(wù)接口。
總而言之,SelectDB 在流式數(shù)據(jù)、離線數(shù)據(jù)和數(shù)據(jù)湖數(shù)據(jù)方面,提供了全面的技術(shù)對(duì)接,可以幫助我們便捷地將數(shù)據(jù)導(dǎo)入數(shù)倉,解決了數(shù)據(jù)入倉這一首要問題。
2. 高吞吐數(shù)據(jù)寫入及實(shí)時(shí)更新
在數(shù)據(jù)入倉以后,我們面臨的第二個(gè)問題是數(shù)據(jù)可能會(huì)需要進(jìn)行更新。數(shù)據(jù)進(jìn)入數(shù)據(jù)倉庫以后,例如訂單、物流等實(shí)時(shí)業(yè)務(wù)的數(shù)據(jù)需要進(jìn)行實(shí)時(shí)狀態(tài)更新。SelectDB 針對(duì)不同場(chǎng)景提供了不同的數(shù)據(jù)實(shí)時(shí)更新能力:
- 對(duì)于 TP 庫的數(shù)據(jù),分析時(shí)業(yè)務(wù)對(duì)數(shù)據(jù)的唯一性要求比較高,SelectDB 提供了主鍵(Unique)模型,可以保證數(shù)據(jù)從 TP 到數(shù)倉中的數(shù)據(jù)一致性,支持全列和部分列的更新。同時(shí)基于業(yè)務(wù)場(chǎng)景,提供了兩種更新方式:
MoR (Merge On Read):這種方式適用于人群畫像標(biāo)簽導(dǎo)入等涉及低頻、大批量數(shù)據(jù)更新的場(chǎng)景。人群畫像有很多標(biāo)簽,離線標(biāo)簽通過 T+1 或小時(shí)級(jí)別的計(jì)算進(jìn)行批量導(dǎo)入。MOR 方式下,數(shù)據(jù)能夠以更大的吞吐量批量寫入,吞吐量可達(dá) 100 萬每秒。
MoW (Merge On Write):適用于實(shí)時(shí)分析場(chǎng)景,極致的時(shí)效性和實(shí)時(shí)性要求。如訂單狀態(tài)變更,需要進(jìn)行實(shí)時(shí)更新。這種方式面向高頻、小批量更新,在數(shù)據(jù)進(jìn)倉時(shí)同步更新原有數(shù)據(jù),消耗更多 IO 資源,對(duì) IOPS 要求較高。這種模式下,數(shù)據(jù)寫入過程中事務(wù)性保證完成一致性處理,查詢時(shí)直接獲取一致性的數(shù)據(jù)結(jié)果,減少查詢時(shí)數(shù)據(jù)一致性處理,查詢性能相比批量導(dǎo)入方式可提升 5-10 倍。 - 對(duì)于聚合場(chǎng)景,提供了 Agg 聚合引擎類型。此類業(yè)務(wù)查詢多是進(jìn)行聚合結(jié)算結(jié)果的查詢。如用戶積分的寫入和更新,新增積分記錄會(huì)進(jìn)行存量和新增計(jì)費(fèi)的聚合計(jì)算。那么基于聚合引擎和聚合函數(shù)就可以完成增量寫入過程的的聚合更新。對(duì)于聚合表引擎中進(jìn)行替換更新的列,也支持通過 replace_if_not_null 方式實(shí)現(xiàn)部分列的更新操作。
3. 毫秒級(jí)實(shí)時(shí)查詢能力
接下來將討論衡量 OLAP 實(shí)時(shí)數(shù)倉的一個(gè)核心指標(biāo),即實(shí)時(shí)查詢能力,這里看主要分析場(chǎng)景來進(jìn)行說明。
首先是寬表分析場(chǎng)景,通常涉及到人群畫像和 BI 等場(chǎng)景,數(shù)據(jù)在 ETL 清洗和處理之后形成一張大寬表,對(duì)外提供服務(wù)。這里主要關(guān)注的是單表分析的性能,業(yè)界常用的衡量標(biāo)準(zhǔn)之一是 ClickBench 測(cè)試。在最新的 ClickBench 測(cè)試中,SelectDB 榮登榜首。這充分證明了 SelectDB 在寬表分析場(chǎng)景下的數(shù)據(jù)分析性能處于在業(yè)界領(lǐng)先位置。
4. 萬級(jí) QPS 高并發(fā)點(diǎn)查能力
另外一種場(chǎng)景是數(shù)據(jù)詳情的查詢。比如 Trace 的場(chǎng)景,日志進(jìn)到數(shù)倉以后,查詢某個(gè)用戶具體的行為軌跡,這就需要根據(jù) QueryID 或者 UID 進(jìn)行精準(zhǔn)匹配查詢。又如用戶畫像的數(shù)據(jù),經(jīng)過 ETL 清洗后,可以在數(shù)倉中提供一些人群畫像的查詢分析,但如果要獲取某個(gè)具體用戶的標(biāo)簽,就需要根據(jù)用戶 ID 去查詢對(duì)應(yīng)的標(biāo)簽列,這些情況就是一個(gè)點(diǎn)查的詳情查詢。數(shù)據(jù)在 OLAP 中默認(rèn)是列存排序,基于排序結(jié)果進(jìn)行數(shù)據(jù)塊存儲(chǔ)。當(dāng)進(jìn)行離散的精準(zhǔn) ID 匹配查詢時(shí),每次查詢命中的數(shù)據(jù)結(jié)果需要在多個(gè)數(shù)據(jù)塊中進(jìn)行大量的 IO 檢索,引起 IO 放大,會(huì)明顯影響查詢性能,因此在默認(rèn)列存模式下,效率是比較低的。
SelectDB 的解決方案是提供行存和列存混合存儲(chǔ)的方式,在具體業(yè)務(wù)場(chǎng)景中只需開啟行存模式,通過冗余方式行列同時(shí)存儲(chǔ)并創(chuàng)建索引,提升點(diǎn)查性能。這樣在 Data serving 場(chǎng)景下,數(shù)倉可以直接對(duì)外提供高并發(fā)的點(diǎn)查服務(wù)?;跍y(cè)試結(jié)果,在 1 億條記錄規(guī)模下,用 48 核 BE 資源測(cè)試可以支持萬級(jí)別的點(diǎn)查 QPS,滿足了大部分業(yè)務(wù)場(chǎng)景的高并發(fā)查詢需求。
5. 高性價(jià)比日志分析方案
日志分析是 OLAP 中的一個(gè)通用情景。傳統(tǒng)用戶日志分析使用 Elasticsearch 這種日志檢索引擎的較多。但由于 ES 的寫入過程索引構(gòu)建成本高,以及大量依賴內(nèi)存來支持請(qǐng)求加速,大數(shù)據(jù)規(guī)模下資源用量高且容易發(fā)生 OOM,且壓縮率較低,造成存儲(chǔ)成本高,整體性價(jià)比不是很高。
SelectDB 提供了倒排索引的能力,允許對(duì)文本列進(jìn)行分詞,并在其上創(chuàng)建倒排索引,從而支持關(guān)鍵字的模糊匹配和全文檢索。同時(shí)對(duì)于非文本列,如 Decimal 或 Int 類型的數(shù)據(jù),同樣可以加速查詢,特別是針對(duì)非排序列的 Ad-Hoc 查詢場(chǎng)景。通過這種方式,SelectDB 在日志分析中能夠顯著提升寫入和查詢效率,同時(shí)降低資源消耗,有效解決了以往 Elasticsearch 在性能上的瓶頸問題,整體性價(jià)比是 ES 的 10 倍以上。
6. 多租戶管理和資源隔離
除了完整的數(shù)據(jù)導(dǎo)入和點(diǎn)查服務(wù),包括聚合分析、日志分析和全文檢索等能力,針對(duì)具有高合規(guī)性要求的金融客戶,為滿足其數(shù)據(jù)安全和權(quán)限管理方面的特殊需求,SelectDB 提供了兼容 MySQL 協(xié)議賬號(hào)和數(shù)據(jù)訪問安全認(rèn)證體系,確保可以實(shí)現(xiàn)細(xì)粒度的資源權(quán)限控制,支持庫級(jí)、行級(jí)和列級(jí)角色授權(quán)及數(shù)據(jù)權(quán)限管理。
在數(shù)據(jù)傳輸層面,支持 SSL/TLS 安全加密傳輸,全面保障數(shù)據(jù)存儲(chǔ)和訪問安全。在內(nèi)核層面,實(shí)現(xiàn)了基于用戶角色的資源隔離和權(quán)限限制,有效防止了單一用戶或角色在多用戶使用集群中對(duì)資源的過度使用,從而確保了整個(gè)集群的穩(wěn)定性和實(shí)例的資源限制,為合規(guī)性和數(shù)據(jù)安全性提供了全方位保障。
7. 基于 Multi-Catalog 的湖倉一體能力
另外,Lakehouse 成為當(dāng)前大數(shù)據(jù)處理的一種流行方式之一。基于 Lakehouse 的方案可以減少數(shù)據(jù)冗余成本,同時(shí)提供一體化的處理處理能力。SelectDB 提供了基于 Multi-Catalog 的湖倉一體能力,可以為各種數(shù)據(jù)湖和對(duì)象存儲(chǔ)的數(shù)據(jù)提供統(tǒng)一管理,實(shí)現(xiàn)了實(shí)時(shí)的元數(shù)據(jù)結(jié)構(gòu)同步,從而在整個(gè) SelectDB 平臺(tái)上實(shí)現(xiàn)了統(tǒng)一的邏輯層面的數(shù)據(jù)管理。在引擎層面,實(shí)現(xiàn)了數(shù)據(jù)湖查詢的加速處理和數(shù)據(jù)緩存,利用引擎本身的加速能力優(yōu)化數(shù)據(jù)湖的查詢。同時(shí),通過聯(lián)邦查詢的能力,可以將數(shù)據(jù)湖的數(shù)據(jù)導(dǎo)入到 SelectDB 本地存儲(chǔ)引擎上,以加速實(shí)時(shí)數(shù)據(jù)分析。這樣,通過 SelectDB 統(tǒng)一的 API 接口,業(yè)務(wù)可以輕松訪問數(shù)據(jù)湖和實(shí)時(shí)數(shù)倉,整個(gè)技術(shù)棧更加統(tǒng)一,業(yè)務(wù)開發(fā)難度大大降低。
三、SelectDB 云原生特性
SelectDB 的云原生特性主要體現(xiàn)在四個(gè)方面:
- 存算分離:即存儲(chǔ)和計(jì)算可以獨(dú)立擴(kuò)展,實(shí)現(xiàn)了資源解耦。
- 實(shí)時(shí)彈性:資源彈性調(diào)整完全實(shí)時(shí),無需停機(jī)或大量數(shù)據(jù)遷移。
- 多計(jì)算負(fù)載隔離:讀寫分離,確保不同業(yè)務(wù)在共享存儲(chǔ)后能進(jìn)行物理隔離。
- 數(shù)據(jù)共享:在多集群環(huán)境下實(shí)現(xiàn)了數(shù)據(jù)在隔離的同時(shí)保持一致性。
接下來將詳細(xì)分析 SelectDB 在這四個(gè)方面的具體實(shí)現(xiàn)。
1. 存算分離,獨(dú)立擴(kuò)容
SelectDB 整體架構(gòu)劃分為三個(gè)層次。首先,我們將計(jì)算層拆分為兩部分:第一部分是純粹的計(jì)算引擎,另一部分則是在計(jì)算引擎層面引入了本地盤,這部分曾在 MPP 架構(gòu)下用于全量數(shù)據(jù)存儲(chǔ),現(xiàn)在則退化為緩存作用,利用云盤等進(jìn)行數(shù)據(jù)緩存。這兩部分構(gòu)成了計(jì)算層的資源,即區(qū)分了純計(jì)算能力與緩存能力。而原先在 MPP 架構(gòu)下全量數(shù)據(jù)存儲(chǔ)層的數(shù)據(jù),現(xiàn)在則放置于基于阿里云 OSS 對(duì)象存儲(chǔ)構(gòu)建的共享數(shù)據(jù)存儲(chǔ)層。通過這種架構(gòu)實(shí)現(xiàn)了存儲(chǔ)和計(jì)算的分離。中間的 Cache 用于加速讀寫操作。
這種架構(gòu)相比于 MPP 架構(gòu)帶來了明顯的優(yōu)勢(shì),特別是對(duì)于 Doris、StarRocks 相關(guān)技術(shù)體系,在以前的架構(gòu)中,數(shù)據(jù)高可用性主要通過副本實(shí)現(xiàn),每份數(shù)據(jù)需要在多個(gè)節(jié)點(diǎn)上存儲(chǔ)多個(gè)副本以保證服務(wù)的連續(xù)性和可靠性。而現(xiàn)在,在云原生存算分離架構(gòu)下,數(shù)據(jù)的全量存儲(chǔ)轉(zhuǎn)移到了基于阿里云的 OSS 對(duì)象存儲(chǔ)的共享存儲(chǔ)上,而阿里云 OSS 對(duì)象存儲(chǔ)本身就具備容災(zāi)備份的能力,所以在數(shù)據(jù)庫引擎層面,數(shù)據(jù)只需存儲(chǔ)一份副本即可,其可靠性完全依賴于存儲(chǔ)介質(zhì)本身。這樣對(duì)存儲(chǔ)資源的使用量就減少到了之前的三分之一。
考慮到緩存也會(huì)占用一部分存儲(chǔ)資源,所以我們根據(jù)業(yè)務(wù)需求設(shè)置了緩存命中率,建議從 10% 起步逐步調(diào)整緩存分配比例。如果數(shù)據(jù)分布比較離散,完全可以最大程度地利用整個(gè) Cache 的容量,使其與共享存儲(chǔ)所占比例持平。這樣做的好處是,一方面可以通過共享存儲(chǔ)保證數(shù)據(jù)的持久可靠性,同時(shí)還可以通過 Cache 加速讀寫能力。即使在這種情況下,我們整體數(shù)據(jù)的副本數(shù)量最多只需做到兩副本,相比之前的三副本存儲(chǔ)方式可以減少三分之一的存儲(chǔ)用量,同時(shí) OSS 的單位存儲(chǔ)成本也更具優(yōu)勢(shì)。
2. 實(shí)時(shí)彈性
通過云原生的方式解決了存算分離的問題,使得計(jì)算層和存儲(chǔ)層能夠獨(dú)立擴(kuò)展。當(dāng)需要擴(kuò)展計(jì)算層時(shí),不再需要進(jìn)行數(shù)據(jù)的 Reshard 或 Rebalance 操作。相比于傳統(tǒng)的 MPP 架構(gòu),SelectDB 水平擴(kuò)展僅進(jìn)行元數(shù)據(jù)刷新和主動(dòng)緩存加載即可完成擴(kuò)容,不需要復(fù)雜的數(shù)據(jù)遷移過程。因此整體的擴(kuò)容效率不依賴數(shù)據(jù)量,可以實(shí)時(shí)完成擴(kuò)容。存儲(chǔ)層采用 serverless 方式,根據(jù)需求靈活使用,業(yè)務(wù)完全不感知其擴(kuò)容和縮容的過程。
單副本寫&讀寫 Cache 加速性能
在數(shù)據(jù)存儲(chǔ)和查詢過程中,緩存起著至關(guān)重要的作用。SelectDB 通過在計(jì)算層添加緩存來加速讀寫操作。具體而言,數(shù)據(jù)寫入過程中,首先緩存至存儲(chǔ)介質(zhì),同時(shí)也寫入到 OSS 上,確保在緩存和持久化層都有最新寫入的熱數(shù)據(jù),以便查詢時(shí)能夠迅速獲取最新結(jié)果,保證查詢性能。
在緩存數(shù)據(jù)淘汰策略上,SelectDB 采用兩級(jí)緩存淘汰策略:
第一級(jí)基于 TTL 策略,定義數(shù)據(jù)生命周期以防止數(shù)據(jù)在緩存期間被清除;
第二級(jí)策略則根據(jù)訪問熱度使用 LRU 算法,優(yōu)先保留高頻訪問熱數(shù)據(jù),從而在保證數(shù)據(jù)存儲(chǔ)效率的同時(shí),有效提升系統(tǒng)查詢性能。
在性能消耗方面,相較于傳統(tǒng)的 MPP 架構(gòu),云原生模式下單副本的模式,寫入數(shù)據(jù)處理量減少了 2/3,顯著減少了 CPU 資源的消耗。數(shù)據(jù)的批量寫入和 CPU 計(jì)算能力的高效利用,使得整體寫入效率明顯提升,同時(shí)保持了數(shù)據(jù)存儲(chǔ)的可靠性和查詢的實(shí)時(shí)性,從而在大數(shù)據(jù)處理場(chǎng)景下表現(xiàn)出色。
3. 單實(shí)例多計(jì)算組資源隔離
另外,SelectDB 提供了單實(shí)例多計(jì)算資源隔離的能力,主要是為了滿足多業(yè)務(wù)隔離需求。通過業(yè)務(wù)訪問隔離和讀寫分離的設(shè)置,確保了高業(yè)務(wù)負(fù)載情況下數(shù)據(jù)資源的完全隔離,從而保證了數(shù)據(jù)導(dǎo)入和查詢過程中不會(huì)出現(xiàn)業(yè)務(wù)相互干擾的情況。
具體做法是在計(jì)算層面實(shí)現(xiàn)邏輯計(jì)算資源的隔離,邏輯資源對(duì)應(yīng)的物理資源也是完全獨(dú)立的。這樣從用戶角度來看是不同的計(jì)算集群,還基于容器化技術(shù)實(shí)現(xiàn)了集群的快速部署和釋放,有效地保證了強(qiáng)隔離。再結(jié)合 Doris 內(nèi)核在用戶級(jí)別提供的軟負(fù)載的隔離,可以滿足不同級(jí)別的隔離需求。
四、SelectDB 開放生態(tài)和產(chǎn)品協(xié)同
在數(shù)倉選型過程中,還需要考慮產(chǎn)品的生態(tài)開放性。SelectDB 作為一個(gè)基于 Apache Doris 的云原生商業(yè)化改造產(chǎn)品,本身就是基于 Apache Doris 內(nèi)核構(gòu)建的,因此協(xié)議上完全兼容 Apache Doris,避免了技術(shù)綁定帶來的困擾。SelectDB 提供的是開放的生態(tài)系統(tǒng),允許客戶從 Doris 或 StarRocks 技術(shù)棧無縫切換到 SelectDB,幾乎沒有切換成本。
SelectDB 兼容 MySQL 協(xié)議,這也意味著開發(fā)成本較低。它采用標(biāo)準(zhǔn)的 MySQL 語法,允許使用 MySQL 客戶端工具(如 Navicat、DBeaver)直接對(duì)接,開發(fā)者可以按照標(biāo)準(zhǔn)的 MySQL 開發(fā)模式進(jìn)行 SelectDB 開發(fā)工作。
SelectDB 作為一個(gè)開放的生態(tài)系統(tǒng),與 MySQL 以及 Flink、Kafka 等大數(shù)據(jù)技術(shù)棧的兼容性良好,涵蓋了離線批處理和實(shí)時(shí)數(shù)據(jù)流的接入。并且在云端實(shí)現(xiàn)了與整個(gè)云生態(tài)系統(tǒng)的緊密銜接,通過云控制臺(tái)進(jìn)行操作,可以顯著減少生態(tài)鏈路構(gòu)建及運(yùn)維的成本。
此外,SelectDB 支持從 RDS 和 PolarDB、MySQL 等技術(shù)棧實(shí)時(shí)導(dǎo)入數(shù)據(jù),并計(jì)劃在未來推出 Zero-ETL 服務(wù),同時(shí)支持與阿里云上下游其他數(shù)據(jù)庫產(chǎn)品的無縫流轉(zhuǎn),進(jìn)一步優(yōu)化數(shù)據(jù)流動(dòng),實(shí)現(xiàn)價(jià)值放大。對(duì)于大數(shù)據(jù)工具,在云上也提供了良好的對(duì)接和支持。
以上就是 SelectDB 在數(shù)據(jù)引入、更新、分析能力、成本和彈性擴(kuò)容等各方面所提供的核心能力。
目前,我們提供了一個(gè)包含 8 核集群和相應(yīng)存儲(chǔ)資源的優(yōu)惠套餐,感興趣可以掃描上圖中的二維碼進(jìn)行體驗(yàn)。