引言
在大數(shù)據(jù)時(shí)代的江湖,數(shù)據(jù)量呈爆炸式增長(zhǎng),如何高效地處理和分析海量數(shù)據(jù)成為了一個(gè)關(guān)鍵問(wèn)題。各路英雄豪杰紛紛亮出自己的絕技,爭(zhēng)奪數(shù)據(jù)處理的巔峰寶座。而在這場(chǎng)激烈的角逐中,ClickHouse 以其“獨(dú)孤九劍”般的絕世武功,橫空出世,令群雄側(cè)目。
ClickHouse 是一個(gè)用于聯(lián)機(jī)分析處理(OLAP)的開(kāi)源分布式數(shù)據(jù)管理系統(tǒng)。它由俄羅斯的 Yandex 公司開(kāi)發(fā),為海量數(shù)據(jù)的實(shí)時(shí)分析處理提供高效的解決方案。
今天,就讓我們一同走進(jìn) ClickHouse 的江湖,揭開(kāi)它極速查詢(xún)的終極秘籍。
ClickHouse “九劍”
總決式:整體架構(gòu)
從架構(gòu)角度來(lái)看,數(shù)據(jù)庫(kù)至少由存儲(chǔ)層和查詢(xún)處理層組成。存儲(chǔ)層負(fù)責(zé)保存、加載和維護(hù)表數(shù)據(jù),而查詢(xún)處理層則執(zhí)行用戶(hù)查詢(xún)。與其他數(shù)據(jù)庫(kù)相比,ClickHouse 在這兩個(gè)層上都提供了創(chuàng)新,可實(shí)現(xiàn)極快的插入和選擇查詢(xún)。不同于其他大數(shù)據(jù)計(jì)算引擎(如 Spark、Presto 等)的“計(jì)算服務(wù)于存儲(chǔ)”,ClickHouse 自有存儲(chǔ)層,不依賴(lài)外部存儲(chǔ),可以在存儲(chǔ)層為查詢(xún)計(jì)算做出很多的優(yōu)化特性,即存儲(chǔ)服務(wù)于計(jì)算。
ClickHouse 采用 MPP(大規(guī)模并行處理)架構(gòu),集群中的每個(gè)節(jié)點(diǎn)都是對(duì)等的,可以獨(dú)立對(duì)外提供服務(wù)。這種架構(gòu)使得 ClickHouse 能夠高效地處理分布式查詢(xún),通過(guò)將任務(wù)并行地分散到多個(gè)服務(wù)器節(jié)點(diǎn)上,在每個(gè)服務(wù)器節(jié)點(diǎn)進(jìn)行計(jì)算。
同時(shí),ClickHouse 對(duì)主鍵預(yù)排序,數(shù)據(jù)基于列式存儲(chǔ),并采用向量化引擎等方式保證了 ClickHouse 的快速查詢(xún)分析。
破劍式:列式存儲(chǔ)
列式存儲(chǔ),被廣泛應(yīng)用于大數(shù)據(jù)領(lǐng)域,Parquet、ORC 等文件格式都是列式存儲(chǔ)格式。
在存儲(chǔ)引擎的設(shè)計(jì)上,ClickHouse 同樣采用了基于列存儲(chǔ)的存儲(chǔ)結(jié)構(gòu)。每個(gè)列的數(shù)據(jù)單獨(dú)存儲(chǔ)在一個(gè)文件中,這種結(jié)構(gòu)使得讀取和過(guò)濾數(shù)據(jù)時(shí)可以只訪問(wèn)相關(guān)的列,在很多場(chǎng)景中極大地降低了數(shù)據(jù)分析過(guò)程中讀取的數(shù)據(jù)量。
列存儲(chǔ)還為 ClickHouse 帶來(lái)另一個(gè)非常明顯的優(yōu)勢(shì)就是大幅提高了數(shù)據(jù)壓縮率。由于列中的數(shù)據(jù)通常具有相似的特征,壓縮效率更高,從而大幅減少壓縮后的數(shù)據(jù)大小,極大減少了磁盤(pán)的 I/O 時(shí)間。并且,每一列都可以使用不同的壓縮算法。在實(shí)際生產(chǎn)中,ClickHouse 基本可以達(dá)到 8:1 的壓縮比。
在查詢(xún)過(guò)程中,ClickHouse 只解壓涉及的列數(shù)據(jù)塊,而不是解壓整個(gè)數(shù)據(jù)塊,這樣可以減少解壓縮過(guò)程中的 I/O 操作,進(jìn)一步提高查詢(xún)效率。
破刀式:向量化
向量化執(zhí)行不是一次處理一條數(shù)據(jù),而是將數(shù)據(jù)分成批量(通常是固定大小的數(shù)據(jù)塊),然后一次性處理整個(gè)批次的數(shù)據(jù)。例如,一次處理1024個(gè)數(shù)據(jù)元素。
在計(jì)算引擎上,ClickHouse 首次使用向量化計(jì)算引擎。ClickHouse 利用現(xiàn)代 CPU 提供的 SIMD(單指令多數(shù)據(jù))指令集進(jìn)行向量化加速。SIMD 允許在一個(gè)指令中同時(shí)對(duì)多個(gè)數(shù)據(jù)進(jìn)行操作,從而顯著提高了數(shù)據(jù)處理的速度。
并且,由于數(shù)據(jù)是批量處理的,數(shù)據(jù)的訪問(wèn)模式更具順序性,減少了 CPU 緩存的未命中率。
因?yàn)椴捎昧讼蛄炕?jì)算引擎,從而使 ClickHouse 很大程度上提升了單機(jī)性能。在實(shí)際場(chǎng)景中,上億乃至幾十億的數(shù)據(jù),都可以使用單機(jī)解決。符合當(dāng)前大環(huán)境下的降本增效,而且,很大程度上解決了傳統(tǒng)大數(shù)據(jù)倉(cāng)庫(kù)的效率低及成本高的問(wèn)題。
特別地,受 ClickHouse 的影響,Spark、Presto、Doris、StarRocks 等都開(kāi)始了向量化引擎的改造,像 Spark、Presto 的向量化引擎 Velox,甚至現(xiàn)在連 Flink 都開(kāi)始搞起來(lái)向量化引擎。
破槍式:預(yù)排序
ClickHouse 使用類(lèi) LSM 的算法,在將數(shù)據(jù)寫(xiě)入磁盤(pán)前進(jìn)行排序,以保證數(shù)據(jù)在磁盤(pán)上有序。數(shù)據(jù)在寫(xiě)入后定期在后臺(tái)進(jìn)行 Compaction。通過(guò)類(lèi) LSM Tree 的結(jié)構(gòu),順序?qū)懘疟P(pán),充分利用了磁盤(pán)的吞吐能力。
ClickHouse 在建表時(shí),需要指定主鍵及排序鍵。如果只指定排序鍵,那么主鍵會(huì)被隱式設(shè)置為排序鍵。如果同時(shí)指定了主鍵和排序鍵,則主鍵必須是排序鍵的前綴。
并且,由于數(shù)據(jù)是有序的,在設(shè)計(jì)范圍查找及排序操作時(shí),可以用來(lái)減少磁盤(pán)讀取的數(shù)據(jù)量,進(jìn)而提升查詢(xún)速度。數(shù)據(jù)的預(yù)排序是 ClickHouse 很多特性的基礎(chǔ)。
破鞭式:表引擎
在 ClickHouse 中,表引擎通過(guò)各自的設(shè)計(jì)和優(yōu)化機(jī)制,使得 ClickHouse 能夠在不同的場(chǎng)景下實(shí)現(xiàn)高效的查詢(xún)性能,滿足各種數(shù)據(jù)分析需求。
表引擎決定了:
數(shù)據(jù)存儲(chǔ)的方式和位置、向何處寫(xiě)入數(shù)據(jù)以及從何處讀取數(shù)據(jù); 支持哪些查詢(xún),以及如何支持; 并發(fā)數(shù)據(jù)訪問(wèn); 使用索引(如果有的話); 是否可以執(zhí)行多線程請(qǐng)求; 數(shù)據(jù)復(fù)制參數(shù);
破索式:數(shù)據(jù)類(lèi)型
Clickhouse 支持 100 多種數(shù)據(jù)類(lèi)型。
·基本數(shù)據(jù)類(lèi)型 ·Bool:布爾類(lèi)型,在內(nèi)部存儲(chǔ)為 Uint8,true 為 1,false 為 0; ·UInt8, UInt16, UInt32, UInt64:無(wú)符號(hào)整數(shù)類(lèi)型,分別占用 1 字節(jié)、2 字節(jié)、4 字節(jié)、8 字節(jié); ·Int8, Int16, Int32, Int64:有符號(hào)整數(shù)類(lèi)型,分別占用 1 字節(jié)、2 字節(jié)、4 字節(jié)、8 字節(jié); ·Float32, Float64:浮點(diǎn)數(shù)類(lèi)型,分別單精度和雙精度,分別占用 4 字節(jié)、8字節(jié); ·Decimal32,Decimal64,Decimal128:高精度類(lèi)型,原生方式為 Decimal(P, S); ·String:字符串類(lèi)型,可變長(zhǎng)度; ·FixedString(N):固定長(zhǎng)度字符串類(lèi)型,指定長(zhǎng)度為 N,插入的字符串長(zhǎng)度少于 N,則補(bǔ)空,對(duì)于 N,則報(bào)異常; ·日期和時(shí)間數(shù)據(jù)類(lèi)型 ·Date:日期類(lèi)型,以 YYYY-MM-DD 格式存儲(chǔ); ·DateTime:日期時(shí)間類(lèi)型,以 YYYY-MM-DD HH:MM:SS 格式存儲(chǔ); ·DateTime64(N):帶有精度 N 的日期時(shí)間類(lèi)型,N 為從 1 到 9 的精度值; ·復(fù)雜類(lèi)型 ·Array(T):數(shù)組類(lèi)型,包含元素類(lèi)型 T 的數(shù)組; ·Nested:嵌套類(lèi)型,支持嵌套結(jié)構(gòu); ·Tuple(T1, T2, …):元組類(lèi)型,包含多個(gè)字段,字段類(lèi)型可以是不同的數(shù)據(jù)類(lèi)型; ·Map(K ,V):鍵值類(lèi)型,映射不唯一,即一個(gè)映射可以包含兩個(gè)具有相同鍵的元素; ·Enum:枚舉類(lèi)型,用來(lái)定義常量; ·聚合類(lèi)型 ·AggregateFunction:聚合函數(shù)類(lèi)型,具有實(shí)現(xiàn)定義的中間狀態(tài),可以將其序列化為 AggregateFunction(...) 數(shù)據(jù)類(lèi)型并存儲(chǔ)在表中,通常使用物化視圖來(lái)存儲(chǔ)。產(chǎn)生聚合函數(shù)狀態(tài)的常用方法是調(diào)用帶后綴的聚合函數(shù) -State。將來(lái)要獲得聚合的最終結(jié)果,必須使用帶 -Merge 后綴的相同聚合函數(shù); ·SimpleAggregateFunction:產(chǎn)生聚合函數(shù)值的常見(jiàn)方法是調(diào)用帶有 -SimpleState 后綴的聚合函數(shù),如 min、max、sum、groupArrayArray 等。SimpleAggregateFunction 比使用相同的聚合函數(shù)具有更好的性能 AggregateFunction; ·其他數(shù)據(jù)類(lèi)型 ·UUID:UUID類(lèi)型,用于存儲(chǔ)全局唯一標(biāo)識(shí)符; ·IPv4,IPv6 類(lèi)型:IP類(lèi)型,IPv4 基于 UInt32 封裝,IPv6 基于 FixedString(16) 封裝,包含格式檢查; ·Nullable(T):可空類(lèi)型,包裝類(lèi)型 T,允許存儲(chǔ) NULL 值; ·LowCardinality(T):將其他數(shù)據(jù)類(lèi)型的內(nèi)部表示更改為字典編碼,使用字典編碼數(shù)據(jù)進(jìn)行操作可顯著提高許多應(yīng)用程序的 SELECT 查詢(xún)性能,一般而言字典包含少于 1 W 個(gè)不同的值,則會(huì)有更好的讀取及存儲(chǔ)效率,如果大于 10 W 的不同值,那么相比其他數(shù)據(jù)類(lèi)型性能可能會(huì)更差; |
數(shù)據(jù)類(lèi)型決定了數(shù)據(jù)在內(nèi)存中的組織形式、在磁盤(pán)中存儲(chǔ)的持久化和序列化方式以及在計(jì)算時(shí)的處理機(jī)制。
ClickHouse 中的列 (IColumn) 事實(shí)上是一個(gè)數(shù)組,存儲(chǔ)某一列的一個(gè)或多個(gè)數(shù)據(jù)。ClickHouse 會(huì)將列中的數(shù)據(jù)當(dāng)成整體進(jìn)行處理,而不是將列中的數(shù)據(jù)一行一行地處理。
列是不可變的,任何對(duì)列的操作都會(huì)產(chǎn)生一個(gè)全新的對(duì)象。不可變的語(yǔ)義使得某些對(duì)列的操作可以并行處理,從而充分利用多核處理器。
在 ClickHouse 中,內(nèi)存對(duì)齊的數(shù)據(jù)類(lèi)型只保存數(shù)據(jù)數(shù)組,內(nèi)存中無(wú)法對(duì)齊的數(shù)據(jù)還額外保存了一個(gè)用于定界的 offset 數(shù)組。
由于內(nèi)存對(duì)齊的數(shù)據(jù)類(lèi)型在存儲(chǔ)時(shí)不需要額外存儲(chǔ)數(shù)據(jù)的邊界,在計(jì)算時(shí)也不需要額外處理數(shù)據(jù)邊界,因此內(nèi)存對(duì)齊的數(shù)據(jù)具有更高的存儲(chǔ)與計(jì)算效率。
在列式存儲(chǔ)中,每個(gè)列的數(shù)據(jù)單獨(dú)存儲(chǔ),同一種數(shù)據(jù)類(lèi)型的數(shù)據(jù),對(duì)于數(shù)據(jù)壓縮更加友好,壓縮效率更高。(詳見(jiàn)《破劍式:列式存儲(chǔ)》章節(jié))
數(shù)據(jù)類(lèi)型的設(shè)計(jì)充分考慮了大數(shù)據(jù)場(chǎng)景下的性能,帶來(lái)了極高的查詢(xún)效率,但同時(shí)也對(duì)使用者提出了更高的要求,使用者必須正確了解數(shù)據(jù)特點(diǎn)且必須正確使用數(shù)據(jù)類(lèi)型,否則可能造成內(nèi)存浪費(fèi)、查詢(xún)緩慢等問(wèn)題。
破掌式:分片與副本策略
在 ClickHouse 中,為了提升查詢(xún)性能及增加數(shù)據(jù)容錯(cuò)性,分別在水平方向和垂直方向上劃分為分片(shard)及副本(replica)。
在分布式模式下,ClickHouse 會(huì)將數(shù)據(jù)在水平方向上分為多個(gè)分片,并且分布到不同節(jié)點(diǎn)上,不同分片間的數(shù)據(jù)不同。分片的目的主要是為了提升查詢(xún)性能,方便多線程及分布式查詢(xún)。在分布式查詢(xún)時(shí),按照分片數(shù)量拆分成若干個(gè)對(duì)本地表的子查詢(xún),然后依次查詢(xún)每個(gè)分片的數(shù)據(jù),再合并匯總返回。
在數(shù)據(jù)寫(xiě)入時(shí),需要考慮如何均勻地寫(xiě)入至各個(gè)分片,以及在數(shù)據(jù)查詢(xún)時(shí),需要考慮如何路由到每個(gè)分片,并計(jì)算匯總形成結(jié)果集,這是分片就需要結(jié)合 Distributed 表引擎一起使用。在集群配置分片規(guī)則時(shí),每一個(gè)分片會(huì)配置一個(gè)權(quán)重,分片權(quán)重會(huì)影響數(shù)據(jù)在分片中的傾斜程度,分片權(quán)重越大,被寫(xiě)入的數(shù)據(jù)越多。在創(chuàng)建 Distributed 表時(shí),需要指定 sharding_key 即分片鍵,它必須是一個(gè)整數(shù)類(lèi)型的值。分片鍵的分片策略一般有以下幾種:
?固定字段:按照用于指定的字段的余數(shù)進(jìn)行劃分,字段需要是整數(shù)類(lèi)型;
?隨機(jī)函數(shù):按照隨機(jī)數(shù)進(jìn)行劃分;
?hash 函數(shù):按照指定字段的 hash 值進(jìn)行劃分;
?
ClickHouse 會(huì)將數(shù)據(jù)在垂直方向上分為多個(gè)副本,即同一個(gè)數(shù)據(jù)可以在不同的節(jié)點(diǎn)上存儲(chǔ),并且數(shù)據(jù)副本間的每份數(shù)據(jù)相同,通過(guò)增加數(shù)據(jù)存儲(chǔ)容易來(lái)防止數(shù)據(jù)丟失。可以在任意一個(gè)副本上執(zhí)行 INSERT 、ALTER 操作,效果是相同的,都會(huì)借助 Zookeeper 的協(xié)同能力被分發(fā)至每個(gè)副本以本地形式執(zhí)行。
?
在數(shù)據(jù)查詢(xún)時(shí),一個(gè)表的一個(gè)分片會(huì)擁有多個(gè)副本,那么這時(shí)會(huì)存在分布式表引擎選擇哪個(gè)副本計(jì)算的問(wèn)題。ClickHouse 使用負(fù)載均衡算法從多個(gè)副本中選擇一個(gè),算法是由 load_balancing 參數(shù)控制,并提供了以下選擇副本的算法策略:
?Random(默認(rèn)):會(huì)對(duì)每個(gè)副本計(jì)算錯(cuò)誤數(shù),查詢(xún)將發(fā)送到錯(cuò)誤最少的副本,如果多個(gè)副本同時(shí)擁有同樣最小錯(cuò)誤數(shù),則隨機(jī)選擇一個(gè);
?Nearest hostname(最近主機(jī)):系統(tǒng)同樣會(huì)對(duì)每個(gè)副本計(jì)算錯(cuò)誤數(shù),每 5 分鐘錯(cuò)誤數(shù)會(huì)除以 2,同樣會(huì)選擇錯(cuò)誤最少的副本,如果有多個(gè)副本有最小的錯(cuò)誤數(shù),則會(huì)將查詢(xún)發(fā)送到配置文件中的服務(wù)器主機(jī)名同當(dāng)前分布式表所在節(jié)點(diǎn)的主機(jī)名最相似的副本;
?Hostname levenshtein distance(主機(jī)名編輯):類(lèi)似 Nearest hostname,但它是以編輯距離的方式比較主機(jī)名;
?In Order(排序):具有相同錯(cuò)誤數(shù)的副本將按照配置中指定的順序進(jìn)行訪問(wèn),當(dāng)確切知道哪個(gè)副本更可取時(shí),此方法是合適的。
?First or Random(第一個(gè)或者隨機(jī)):此算法選擇集合中第一個(gè)副本,如果第一個(gè)副本不可用,則隨機(jī)選擇副本。
?Round Robin(循環(huán)遍歷):此算法在具有相同錯(cuò)誤數(shù)的副本中使用循環(huán)遍歷的策略選擇。
破箭式:索引設(shè)計(jì)
在 ClickHouse 中,索引是優(yōu)化查詢(xún)性能的關(guān)鍵部分。ClikcHouse 中主要支持是稀疏索引和跳數(shù)索引。
在 ClickHouse 中,主鍵索引采用稀疏索引實(shí)現(xiàn),僅對(duì)每個(gè)顆粒(index_granularity,默認(rèn)為 8192 行為一個(gè)顆粒)記錄一個(gè)索引條目(mark),索引條目存儲(chǔ)的是顆粒(index_granularity)第一行的主鍵列值,存儲(chǔ)到單獨(dú)的索引文件(primary.idx),并在標(biāo)記文件({列}.mrk)存儲(chǔ)每個(gè)顆粒到文件物理位置的映射。通過(guò)索引文件和標(biāo)記文件,才能共同確定一個(gè)數(shù)據(jù)所在的文件位置。在查詢(xún)時(shí),首先通過(guò)索引確認(rèn)數(shù)據(jù)所在的個(gè)顆粒,然后依據(jù)標(biāo)記確認(rèn)個(gè)顆粒所在的物理地址,最后通過(guò)物理地址從硬盤(pán)上讀取數(shù)據(jù)。
這種索引設(shè)計(jì)允許主鍵索引很小,必須完全適合加載到內(nèi)存,同時(shí)仍可顯著加快查詢(xún)執(zhí)行的時(shí)間,尤其是對(duì)數(shù)據(jù)分析中常見(jiàn)的范圍查找。其核心邏輯是通過(guò)索引降低需要讀取的數(shù)據(jù)量,從而減少磁盤(pán) I/O 時(shí)間,達(dá)到加速查詢(xún)的效果。
除了主鍵索引,ClickHouse 還支持跳數(shù)索引。跳數(shù)索引允許在查詢(xún)時(shí)跳過(guò)沒(méi)有匹配值的數(shù)據(jù)塊,減少掃描數(shù)據(jù)范圍。主要的跳數(shù)索引有 minmax、set、布隆過(guò)濾器三種類(lèi)型。
minmax 類(lèi)型的跳數(shù)索引,存儲(chǔ)每個(gè)塊的索引表達(dá)式的最大值及最小值。這種類(lèi)型非常適合傾向于按值松散排序的列,且只能與標(biāo)量或者元組表達(dá)式一起正確工作(永遠(yuǎn)不會(huì)應(yīng)用于返回?cái)?shù)組或 MAP 數(shù)據(jù)類(lèi)型的表達(dá)式),通常是查詢(xún)處理過(guò)程中成本最低的索引類(lèi)型。
眾所周知,布隆過(guò)濾器允許以極小的誤差來(lái)高效地判斷一個(gè)元素是否存在于集合中。由于布隆過(guò)濾器可以更有效地處理大量離散值的測(cè)試,因此適用于產(chǎn)生更多值進(jìn)行測(cè)試的條件表達(dá)式,比如數(shù)組和 MAP,以及對(duì)文本搜索也很多有用,特別是沒(méi)有單詞分隔符的語(yǔ)言(比如中文)。
通常,set 索引和布隆過(guò)濾器索引都是無(wú)序的,因此不適合用于范圍查找。相反,minmax 索引特別適合于范圍判斷,因?yàn)榇_定范圍是否相交是非常快的。
破氣式:計(jì)算引擎
從功能和整體架構(gòu)上講,ClickHouse 的計(jì)算引擎與其他數(shù)據(jù)庫(kù)的計(jì)算引擎并沒(méi)有很大的不同。功能都是將可描述的結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)轉(zhuǎn)化翻譯為可以執(zhí)行的物理計(jì)劃以及執(zhí)行計(jì)算并獲得計(jì)算結(jié)果,而整體架構(gòu)都有包含 SQL 解析、翻譯解釋、計(jì)算執(zhí)行等部分。
從實(shí)現(xiàn)方面,ClickHouse 同樣采用了多線程及分布式查詢(xún),成為其高性能和高擴(kuò)展性的關(guān)鍵。通過(guò)線程級(jí)并行的方式提升性能,利用多核 CPU 的計(jì)算能力;通過(guò)采用分布式架構(gòu),支持分片和副本,通過(guò)將數(shù)據(jù)分布到多個(gè)節(jié)點(diǎn)實(shí)現(xiàn)存儲(chǔ)和計(jì)算的擴(kuò)展。
特別地,ClickHouse 的計(jì)算引擎是相當(dāng)被詬病的。ClickHouse 沒(méi)有成熟的執(zhí)行計(jì)劃優(yōu)化器,并且對(duì) JOIN 的支持相比其他數(shù)據(jù)庫(kù)及計(jì)算引擎相當(dāng)薄弱。所以,有人認(rèn)為 ClickHouse 的計(jì)算引擎缺乏優(yōu)化及對(duì)分布式的支持,就是個(gè)半成品。
?
最后
通過(guò)上述特點(diǎn),我們可以清楚地看到,ClickHouse 的高性能查詢(xún)能力并非偶然,而是其架構(gòu)設(shè)計(jì)和技術(shù)創(chuàng)新的必然結(jié)果。無(wú)論是列式存儲(chǔ)、向量化執(zhí)行引擎,還是數(shù)據(jù)壓縮技術(shù)、分布式架構(gòu),這些特點(diǎn)共同作用,使得 ClickHouse 在處理大規(guī)模數(shù)據(jù)分析時(shí)表現(xiàn)出色,在大數(shù)據(jù)的江湖中獨(dú)步天下。
?
參考資料
陳峰 《Clickhouse 性能之巔:從架構(gòu)設(shè)計(jì)解讀性能之謎》 機(jī)械工業(yè)出版社
朱凱 《ClickHouse 原理解析與應(yīng)用實(shí)踐》 機(jī)械工業(yè)出版社
?ClickHouse官網(wǎng)?
?《ClickHouse 教程》?
?ClickHouse 的副本與分片?
審核編輯 黃宇
-
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3927瀏覽量
66238 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8960瀏覽量
140240
發(fā)布評(píng)論請(qǐng)先 登錄
青銅劍技術(shù)亮相第九屆電氣化交通前沿技術(shù)論壇
10K-100K B3950-B3435NTC熱敏電阻快速查詢(xún)對(duì)照表
告別延遲!Ethernetip轉(zhuǎn)modbustcp網(wǎng)關(guān)在熔煉車(chē)間監(jiān)控的極速時(shí)代

英特爾揭秘影視制作軟件的法術(shù)秘籍
IP地址查詢(xún)技術(shù)

什么是AI查詢(xún)引擎
ClickHouse:強(qiáng)大的數(shù)據(jù)分析引擎

九章云極DataCanvas公司「算力包」產(chǎn)品璀璨亮相2024中國(guó)算力大會(huì)!

根據(jù)ip地址查網(wǎng)頁(yè)怎么查詢(xún)?

常見(jiàn)的IP地址查詢(xún)技術(shù)

評(píng)論