1. 程式人生 > >[大數據搜索數據庫YDB]YDB新功能介紹-視圖表

[大數據搜索數據庫YDB]YDB新功能介紹-視圖表

默認 quic lec 模糊 out kafka don nod 三種

YDB視圖表

全庫資源匯聚搜索高效解決方案

業務有成百上千張表,每張表有上百個列。
想要根據關鍵字搜索含有該關鍵字的記錄怎麽辦? 每張表都寫一個sql麽?每個列都要拼到where條件裏去搜索麽?no 其實對於資源匯聚類型的搜索可以一條sql就搞定,又兼容原先的表結構,業務其他部分依然可以單表查詢。
是不是有這樣一種場景,每張表的數據量都不多 ,但是你的表特別多,幾十張甚至幾百張表。 如果每個表都創建一個物理表,那麽是比較浪費資源的

  1. 每張表都要維護自己的BUFFER,弄不好就OOM,導入性能實在太差.

  2. 都要單獨開個線程去維護這張表.
  3. 生成的索引都很小,但是文件數量太多,頻繁合並索引導致namenode非常繁忙等等
    如今YDB的視圖表可以幫你解決這個問題。 視圖表示建立在物理表的基礎上的。一張物理表上面可以放很多視圖表,這些表統一管理,統一心跳,統一一個索引,對外部用戶來說對視圖表的查詢和對物理表的查詢,在使用上沒有什麽區別。 有了視圖表以後,原先需要為那些小業務分別創建表,單獨搭建集群的問題也可以得到解決。 規模不大的業務,可以共享同一個集群,共享同一個物理表,業務和業務之間是圖表隔離。
    視圖表並不真實存儲數據,如下圖所示,視圖表通過映射將數據存儲在其對應的物理表中.
    技術分享圖片

創建視圖表

create ydbview  ydbview_007(
phonenum dblikebig viewstore@combineonly,
usernick string viewstore@combineonly,
ydb_sex string viewstore@combineonly,
ydb_province string viewstore@combineonly,
ydb_grade string viewstore@combineonly,
ydb_age string viewstore@combineonly,
ydb_blood string viewstore@fieldonly,
ydb_zhiye string  viewstore@fieldonly,
ydb_earn string viewstore@fieldonly,
ydb_prefer string viewstore@fieldonly,
ydb_consume string viewstore@all,
ydb_day string viewstore@all,
amtdouble tdouble viewstore@all,
czylong tlong physical@czylong_y_tlong_id viewstore@all,
content dblikebig viewstore@all
)
;

1.如果不做配置,默認視圖表對應的物理表名稱為ydb_physical_table,所有的列均進行匯聚
2.在視圖表中字段有三種展現方式 combineonly,fieldonly,all
1)指定combineonly的字段將數據儲存在聚合列ydbview_like字段中,在視圖表中不可見,物理表中可見
2)指定fieldonly的字段在視圖表中可查,在物理表中不可查,不存儲在ydbview_like中
3)指定all的字段數據在視圖表和物理表中均可查,並存儲在 ydbview_like 中一份
4)創建表時可以通過

amtlong tlong  physical@amtlong_y_tlong_id,

這種方式來指定視圖表與物理表中字段的對應關系
5)如下圖所示①部分指定視圖表對應的物理表名稱,通過修改physical_example 部分修改對應的物理表名。②部分是指定在不指定存儲策略的情況下,默認的存儲策略是 ‘all’策略,可修改。①②部分都是可選配置,可不添加,不添加則為默認參數 物理表名為ydb_physical_table 存儲策略為all
技術分享圖片

使用ydb提供的工具偽造一些數據

cd /opt/ydbsoftware/ya100
hadoop fs -rm -r /data/example/quickstart/
hadoop fs -mkdir -p /data/example/quickstart/
hadoop jar ./lib/ydb-1.1.9-pg.jar cn.net.ycloud.ydb.server.reader.kafka.MrMakeShuData 30000000  /data/example/quickstart/1.txt

將數據導入到視圖表中

cd /opt/ydbsoftware/ya100
sh  ./bin/ydbimport.sh -ov -t ydbview_007 -p 3000w -tp txt  -f /data/example/quickstart -sp , -fl phonenum,usernick,ydb_sex,ydb_province,ydb_grade,ydb_age,ydb_blood,ydb_zhiye,ydb_earn,ydb_prefer,ydb_consume,ydb_day,amtdouble,amtlong,content

接下來我們驗證一下設置的參數是否生效
視圖表數據預覽

select * from ydbview_007 where ydbpartition=‘3000w‘ limit 10

結果
技術分享圖片
在這裏我們可以看到在視圖表中phonenum usernick ydb_sex ydb_province ydb_grade ydb_age,czylong中在視圖表中是不可見的
接下來我們看物理表
技術分享圖片
在物理表中我們可以看到 字段 phonenum usernick ydb_sex ydb_province ydb_grade ydb_age ydb_consume ydb_day amtdouble amtlong content
這幾個列是可見的,



通過以上測試我們可以驗證之前的結論:
使用 all存儲方式的字段,在視圖表和物理表中均可見,可以使用ydbview_like字段進行模糊檢索.
使用combineonly字段只能在物理表中可見,在視圖表中不可見,可以通過ydbview_like字段模糊檢索.
使用fieldonly在物理表中不可見,只在視圖表中可見,不可使用ydbview_like字段模糊檢索.



對於YDB視圖表的查詢方式與普通YDB物理表查詢方式是一樣的,視圖表對應的物理表查詢與普通的物理表有所不同
技術分享圖片
我們可以看到如果使用select * 的方式查詢到的物理表數據是兩個列,ydbview_name列存儲的是視圖表的名稱,ydbview_like 字段存儲的是使用all,combineonly存儲方式的聚合列
,如果想要返回指定列的結果,需要在 select 後面指定想要查的字段,例如

select phonenum,usernick from ydb_physical_table where ydbpartition=‘3000w‘ and ydbview_name=‘ydbview_007‘ limit 10

技術分享圖片
雖然可以返回數據,但是這些數據並不能用於檢索,要使用特定的方式
技術分享圖片
接下來我們通過desc ydbview_007的方式來查看ydbview_007對應的ydb物理表字段名
技術分享圖片
在上圖中我們可以看到左邊的紅色框中是視圖表字段,右邊的紅色框中是指定的對應物理表字段,如果在建表時未指定物理表對應字段將會自動創建一個字段進行關聯,在這裏我麽看到ydb_day的對應物理表字段為‘v_1_y_string_id ’
接下來我們查詢這個字段,並通過特定的方式過濾

 select ydbview_name,v_1_y_string_id,ydbview_like from ydb_physical_table  where ydbpartion = ‘3000w‘ and ydbview_like like ‘@@phonenum@13882555844‘ order by v_1_y_string_id desc  limit 10;

技術分享圖片

在上圖中我們看到,我們查詢了phonenum 值為 13882555844的ydb_day數據,且按照該字段進行排序,其中

ydbview_like like ‘@@phonenum@13882555844‘

是固定寫法 ‘@@字段名@對應的值’

有關YDB視圖表使用方法就介紹到這裏了,如果您對於YDB的功能及產品還存有疑問可以通過以下方式獲取試用及技術支持
(如果您無法獲取清晰的二維碼信息,可單擊下圖放大↓)
技術分享圖片

[大數據搜索數據庫YDB]YDB新功能介紹-視圖表