iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0

Change Data Capture(CDC),是ScyllaDB 4.1版本之後推行的一項目前仍在實驗的功能,但是看起來已經到了收尾階段,官方的網頁文件與教學影片也都已經上架,應該會是之後版本的主打功能,先來簡單看一下這個功能的作用。
這裡指的CDC,基本上在使用其他的db時都已經聽過,常被用在ETL的流程。CDC紀錄了一筆資料什麼時候被新增了,又是在什麼時候被刪除了。
官方整理出了幾個使用案例:
https://ithelp.ithome.com.tw/upload/images/20200910/201132201YULnYaB4L.png
分析同一張信用卡是否在同一時間在多個地方消費,想要分析每一筆紀錄的操作,從資料庫鏡像一部分的資料而不透過原本的replicate機制,以及將資料轉導到不同的儲存空間。

cdc會將三種變更記錄到log裡,而Scylla將這些log儲存在一個table裡,就如同一般的table。每個狀態都會被儲存在一個欄位,以timestamp做排序。

  • The pre-image:表示變更前的資料狀態。
  • Change per column:每一列的變化。
  • The post-image:變更後的最終狀態。

開始實作之前,先到scylla.yaml裡頭開啟允許實驗設定,然後重啟Scylla。

experimental: true

接著建立table,開啟cdc相關選項:

  • enabled : 預設為false,當設定true,會同時建立cdc的log table。
  • preimage : 預設為false,當設定為true,會紀錄異動前的原始狀態。
CREATE TABLE testing (pk text,ck text,val1 text,val2 text, PRIMARY KEY (pk,ck)) WITH cdc = { 'enabled' : 'true', 'preimage' : 'true' };

可以看到除了剛才建立的table testing,還有另一個table testing_scylla_cdc_log自動產生了。
https://ithelp.ithome.com.tw/upload/images/20200910/20113220vtka9T04Ok.png
接著寫入兩筆資料然後看看log表的情況,log表也同步產生了兩筆記錄。

insert into testing(pk, ck, val1, val2) values('vangogh', 'The Starry Night', '1889', '72x92');
insert into testing(pk, ck, val1, val2) values('vangogh', 'The Potato Eaters', '1885', '81.5x114.5');

https://ithelp.ithome.com.tw/upload/images/20200910/20113220TR9LxE6w8s.png
然後試著更新其中一筆資料,然後再查一次log表,log表中cdc$operation=0的是pre-image紀錄了val1更新前的值。而cdc$operation=1是post-image,紀錄了異動後val1的值。

update testing set val1 = '2020' where pk = 'vangogh' and ck = 'The Starry Night' ;

https://ithelp.ithome.com.tw/upload/images/20200910/20113220YQrOnXbgPh.png
再來試著刪除其中一筆資料的column val2,可以看到log表中cdc$deleted_val2的值變成true,一樣有兩筆記錄分別紀錄更新前後的值。

delete val2 from testing where pk = 'vangogh' and ck = 'The Starry Night';

https://ithelp.ithome.com.tw/upload/images/20200910/20113220JR8IjdYzgS.png

從目前官方釋出的資訊,初步可以了解到Scylla的CDC是將異動的紀錄另外建立一張log table儲存。並且套用cluster的RF規則,此外可以設定TTL。等final版本出來,再來看看有什麼變化。


上一篇
Day28 實作-備份與還原
下一篇
Day30 心得感言
系列文
ScyllaDB實作紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言