一、引言
雲原生多模資料庫Lindorm,支援海量資料的低成本存儲和彈性按需付費,提供寬表、時序、檔案等多種資料模型,相容HBase、Cassandra、OpenTSDB等多種開源标準接口,是網際網路、IoT、車聯網、廣告、社交、監控、遊戲、風控等場景的首選資料庫,也是為阿裡巴巴核心業務提供關鍵支撐的資料庫之一。關于Lindorm的更多介紹,可以參考
雲原生多模資料庫Lindorm。
Lindorm對外提供統一的标準SQL入口,可以讓開發人員快速上手,輕松運維海量資料。SearchIndex是Lindorm寬表的二級索引,主要用來幫助業務實作快速的檢索分析。本篇文章介紹如何通過簡單的SQL接口操作SearchIndex。
二、SQL操作SearchIndex
開通全文索引
當您購買Lindorm寬表引擎後,可以在資料庫執行個體控制台開通“全文索引”功能,如下圖:

下載下傳SQL工具
進入資料庫執行個體控制台,在“資料庫連接配接”中下載下傳SQL工具:Lindorm-cli。同時,為了能夠讓本機可以通路叢集,需要“開通外網位址”,并将本機ip加入到白名單中。


連接配接叢集
将上一步下載下傳的Lindorm-cli在本機解壓後,直接執行如下指令:
./lindorm-cli -url jdbc:lindorm:table:url=http://ld-xxxx-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060 -username xxx -password xxx
其中的公網連接配接位址、使用者名和密碼可以在資料庫控制台“資料庫連接配接”中擷取,參見上個章節中的截圖。
備注:需要提前
配置好白名單執行SQL語句
- 建立資料庫
create schema testSchema;
- 建立表
use testSchema;
// 建立一個表,主鍵為id,非主鍵為name,age,address
create table if not exists testTable(id varchar, name varchar, age bigint, address varchar, constraint primary key (id));
- 建立SearchIndex
// 對表的非主鍵列建索引,其中address是一個分詞字段,使用IK分詞器
create search index if not exists testIdx on testTable(name,age,address(type=text,analyzer=ik)) with (indexState=ACTIVE);
- 寫入測試資料
upsert into testTable(id,name,age,address) values ('1', '張三', 25, '北京市朝陽區綠地中心c座');
upsert into testTable(id,name,age,address) values ('2', '李四', 30, '上科路張江人工智能島2号樓');
upsert into testTable(id,name,age,address) values ('3', '王五', 28, '深圳市南山區科苑南路3331号');
upsert into testTable(id,name,age,address) values ('4', '趙六', 36, '杭州市餘杭區文一西路969号');
- 查詢
select name from testtable where address = '朝陽區' limit 10;
select * from testtable where age > 30 and address = '杭州' limit 10;
select name from testtable where name = '王五' limit 10;
對于非主鍵的查詢,一般會消耗非常多的系統資源,為了系統穩定,這樣的查詢預設會被拒絕掉。如果基于這些非主鍵建立了二級索引,則可以高效的執行。
更多SQL文法,可參考
文法手冊三、總結
SearchIndex是Lindorm寬表的二級索引,當您想加速檢索分析的速度時,隻需要對表建立索引即可,寫入的資料會自動建構索引,查詢時服務端會自動路由到索引,整個使用過程對業務代碼0侵入。
SearchIndex在阿裡内部以及公有雲上有着豐富的應用場景,如果您在面對訂單查詢、物流軌迹、大資料畫像、車聯網等場景的業務架構設計,可以嘗試将Lindorm SearchIndex應用到架構中,将會帶來開發和存儲成本的極大收益。
Lindorm的案例彙總,可進一步參考
解決方案歡迎掃碼加入釘釘群,相關的技術專家将為您解答所有疑惑。
