Polardb 如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

ITPUB社群發表於2023-03-03


講了那麼多期,都是在力量上進行論述,本期開始進入到正式的POALRDB 的內部操作中,POLARDB 與MYSQL 在登入中最大的不同是,你可以透過代理來連線到資料庫中,這裡的一個重點是,POLARDB 是支援多節點的,透過代理來控制多個節點,這裡分為三種節點,最大POLARDB 支援 7 個總節點

1 主節點
2  行式從節點
3  列式從節點

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

而這樣的方式在進行底層的操作出現了一些問題,因為我們無法直接連線到讀節點中的確認的某個節點的直連,所以每次登入需要制定你操作的語句的定位的位置,舉例如你想登入到列節點,則在登入到 POLARDB FOR MYSQL的時候,需要加入 -c 的,在我們mysql 根本不適用的登入引數,登入POALRDB 則需要掛載 -c

在掛載後,才能使用POALRDB 的HINT 節點的模式,否則敲入的命令是對全部的節點生效的。下面的force 命令才能生效,進入的才是POLARDB 的列存節點。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

create table imic_test (id int primary key,name varchar(200)) engine innodb comment 'columnar=1';

在建立一個支援列存的表,是需要特殊的命令來支援的,這裡POLARDB 採用了在 comment 後面新增 'columnar=1' 的方式來進行,凡是在表最後的comment 中新增了 columnar =1 則說明這個表在POLARDB 中會增加類存,也就是在列存節點中是存在這張表的,否則列存是不會包含這個表的。

另外在操作一些MYSQL的語句,諸如 create table like 是可以在POALRDB 多節點執行的,因為機制和MYSQL不一樣,所以單機可以執行的命令在POALRDB for MySQL 都是可以使用的,並且 create table like是可以在產生的新表中增加列索引的。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

這裡還發現阿里雲的文件的BUG 裡面提及可以使用create  table select 語句,實際上是不可以的。(希望更新文件)

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

同時可以透過 show create table tablename  full 的方式來檢視錶中是否具有列式的索引,顯然這個表是具有這個索引的。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

下面我們建立一個測試表,百萬資料的量,並且將所有的列都加入到列存中。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

下面的這個例子很說明問題,在使用了列存的百萬表上進行 distinct 沒有任何行索引的情況下,查詢速度之快。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

我們將列存撤出後,可以看到雖然我們用了索引的情況下,查詢的速度還是列存無法進行比較。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

同時在操作中給我最大的衝擊就是快,在一個100多萬的表上加所有的列到列存,基本上沒有延遲,直接就生效,查詢的方式馬上變為列的方式進行查詢並開始動用更多的CPU 來進行處理。

給我的感覺用幾個字可以形容,新增快,生效快,無延遲。以上是簡單查詢如count , distinct ,group by ,order by 等 我將一切在MYSQL 中都屬於蹂躪資料庫的查詢,在POLARDB for mysql 加列的服務中,挨個試了一遍,完美,完美,完美。 

新增索引的狀態也有展示。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

MYSQL you are dead on cloud .

當然任何解決方案都有自己的問題,我們也在找這個方案中的問題

1  不同的版本對於欄位的支援型別有變化,基於POLARDB的版本,建議在8.01 的POALRDB 的小版本要到 8.0.1.1.30 支援了 blod text  ,分割槽表索引等。所以版本是你能用什麼欄位來進行列處理的關鍵。

2  DDL 操作中如果你是新增欄位,那麼和行存不一樣的是,整體的列存會刪除,重建。

3  列存的資料是逐步同步的,同步是非同步的方式可以透過

select * from information_schema.imci_async_ddl_stats;表來進行相關列索引的查詢。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎

但是該吐槽的吐槽,目前的列式引擎在更新資料庫版本的過程中,我們遇到了更新後,列的索引重建的問題,按照我們的理解,變動較大。但是這是測試是可以,但如果是生產的情況下,我們該如何辦理呢。這也是POALRDB 在升級中一直忽略的一些問題,因為使用POALRDB 的客戶,以後一部分,或者相當一部分是希望 POALRDB 將 MYSQL RDS 升級時的長時間不能線上工作的問題,解決,而如果列式的升級涉及了長時間的索引重建,業務無法進行正常工作,這個感受可不怎麼美好。

Polardb   如何替換MYSQL 之 IMCI 列式(1)建立一個列式引擎



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2938053/,如需轉載,請註明出處,否則將追究法律責任。

相關文章