TableStore最佳實踐:智慧元資料管理方案
一、方案背景
使用者儲存海量的文件、媒體檔案等資料的同時,對檔案元資料(Mate)的管理不可或缺。元資料擁有多維度的欄位資訊,基本資訊包含檔案大小、建立時間、使用者等。隨著人工智慧的發展,通過AI技術提取檔案核心要素也成為檔案元資料的重要資訊。以圖片為例:使用者通過智慧媒體服務,獲取分析圖片核心標籤並未標籤打分,使用者還可提取人臉識別相關資訊,以及地理位置等資訊,提取的資訊也需要儲存到檔案元資料資訊中。因而檔案元資料的資訊量不斷增加,資訊格式、型別也不斷豐富。
需求場景
某智慧媒體管理平臺,為使用者提供檔案(圖片、視訊等)管理服務,使用者通過自研(或售賣)的智慧媒體分析工具,為目標檔案進行分析。將分析後的資訊豐富原有的元資料資訊。因此,平臺需要一套有效的元資料的管理方案來為使用者管理、分析、統計元資料資訊。,例如:
使用者A:【使用者A】*【近1年】*【標籤含[開心]】*的所有圖片,按標籤分數排序
使用者B:【使用者B】*【出現某某明星】*的所有視訊,按明星相似度排序
......
管理系統樣例,如下所示:__官網控制檯地址:__專案樣例
技術點
對於智慧元資料管理系統,技術上通常需要考慮的技術點,包含以下方面:
- 查詢能力:具備強大的查詢能力,如多型別索引、多維度組合查詢等,同時具備排序、統計等功能;
- 橫向擴充套件(多欄位):元資料的欄位型別豐富,欄位變動、增刪頻繁,資料庫儘量schema free來保證橫向擴充套件能力;
- 縱向擴充套件(資料量):海量檔案就會對應海量元資料,面對資料膨脹資料庫要滿足易擴充套件、低成本等基本要求;
- 服務效能:應對高併發請的同時,保證低延遲、強一致、高可用;
二、表格儲存(TableStore)方案
使用表格儲存(TableStore)研發的多元索引(SearchIndex)方案,可以有效解決海量元資料的管理問題。TableStore具有即開即用,按量收費等特點。
TableStore作為阿里雲提供的一款全託管、分散式NoSql型資料儲存服務,具有【海量資料儲存】、【熱點資料自動分片】、【海量資料多維檢索】等功能,天然地解決了資料大爆炸這一挑戰;在應對資料橫向、縱向擴充套件上,充分發乎其優勢。多元索引隨時建立,是Meta元資料管理的合適方案。
同時,SearchIndex功能在保證使用者資料高可用的基礎上,提供了資料多維度搜索、統計等能力。針對多種場景建立多種索引,實現多種模式的檢索。使用者可以僅在需要的時候建立、開通索引。由TableStore來保證資料同步的一致性,這極大的降低了使用者的方案設計、服務運維、程式碼開發等工作量。
基於表格儲存搭建的智慧元資料管理系統頁面一覽
樣例內嵌在表格儲存控制檯中,使用者可登入控制檯體驗系統(若為表格儲存的新使用者,需要點選開通服務後體驗,開通免費,Meta資料儲存在公共例項中,體驗不消耗使用者儲存、流量、Cu)。
注:該樣例提供了【億量級】元資料。官網控制檯地址: ofollow,noindex" target="_blank">專案樣例
二、搭建準備
若您對於智慧元資料管理系統感興趣,希望開始自己系統的搭建之旅,只需按照如下步驟便可以著手搭建了:
1、開通表格儲存
通過控制檯開通表格儲存服務,表格儲存即開即用(後付費),採用按量付費方式,已為使用者提供足夠功能測試的免費額度。表格儲存官網控制檯、 免費額度說明 。
2、建立例項
通過控制檯建立表格儲存例項,選擇支援多元索引的Region。(當前階段SearchIndex功能尚未商業化,暫時開放 北京,上海,杭州和深圳四地 ,其餘地區將逐漸開放)
建立例項後,提交工單申請多元索引功能邀測(商業化後預設開啟,不使用不收費)。
- 邀測地址:提工單,選擇 【表格儲存】>【產品功能、特性諮詢】>【建立工單】,申請內容如下:
- 問題描述:請填寫【申請SearchIndex邀測】
- 機密資訊:請填寫【地域+例項名】,例:上海+myInstanceName
3、SDK下載
使用具有多元索引(SearchIndex)的SDK,官網地址,暫時java、go、node.js三種SDK增加了新功能
java-SDK
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore</artifactId> <version>4.7.4</version> </dependency>
go-SDK
$ go get github.com/aliyun/aliyun-tablestore-go-sdk
4、表設計
表名:order_contract
列名 |
資料型別 |
索引型別 |
欄位說明 |
_id(主鍵列) |
String |
MD5(fId)避免熱點 |
|
fId |
String |
KEYWORD |
檔案編號 |
userId |
String |
KEYWORD |
使用者編號 |
tags |
String |
Nested: [{ tag: String, score: LONG }] |
多標籤使用巢狀索引(陣列字串) '[{"tag":"表格儲存","score":97.317251},{"score":50.770918,"tag":"沙漠"}]' |
size |
long |
LONG |
檔案大小 |
createdAt |
long |
LONG |
建立時間(時間戳) |
url |
String |
KEYWORD |
檔案連結(儲存於oss) |
... |
... |
... |
... |
三、開始搭建(核心程式碼)
1、建立資料表
建立智慧元資料表,使用者僅需維護一個例項,按如下方式在例項下建表:
通過控制檯建立、管理資料表(使用者也可以通過SDK直接建立):
2、建立資料表索引
TableStore自動做全量、增量的索引資料同步:使用者可以通過控制檯建立、管理SearchIndex(使用者也可通過SDK建立):
3、資料匯入
插入部分測試資料(控制檯樣例中插入了1億條資料,使用者自己可以通過控制檯插入少量測試資料);
檔案編號 | 檔案ID(md5主鍵) | 使用者編號 | 標籤(陣列字串) | 型別 | 連結 | 大小 |
---|---|---|---|---|---|---|
f052535742 | 1bce.... | u05254 | [{"score":99.999999,"tag":"表格儲存"},{"score":78.962224,"tag":"冰雹"},{"score":18.328385,"tag":"開心"},{"score":16.886812,"tag":"雪山"}] | image | https://prd-console-demo.oss-cn-hangzhou.aliyuncs.com/image/imm1.jpg | 9022066 |
4、資料讀取
資料讀取分為兩類:
主鍵讀取
基於原生表格儲存的主鍵列獲取:getRow, getRange, batchGetRow等。主鍵讀取用於索引(自動)反查,使用者也可以提供主鍵(檔案編號md5)的單條查詢的頁面,億量級下查詢速度保持在十毫秒量級。單主鍵查詢方式不支援多維度檢索;
索引讀取
基於新SearchIndex功能Query:search介面。使用者可以自由設計索引欄位的多維度條件組合查詢。通過設定選擇不同的查詢引數,構建不同的查詢條件、不同排序方式;目前支援:精確查詢、範圍查詢、字首查詢、匹配查詢、萬用字元查詢、短語匹配查詢、分詞字串查詢,並通過布林與、或組合。
如【標籤為:表格儲存,建立時間[2018-01-01, 2018-12-01)】檔案的資訊:(SDK與控制查詢)
List<Query> mustQueries = new ArrayList<Query>(); //巢狀欄位Query TermQuery termQuery = new TermQuery(); termQuery.setFieldName("tags.tag"); termQuery.setTerm(ColumnValue.fromString("表格儲存")); NestedQuery nestedQuery = new NestedQuery(); nestedQuery.setPath("tags"); nestedQuery.setScoreMode(ScoreMode.Avg); nestedQuery.setQuery(termQuery); mustQueries.add(nestedQuery); //範圍Query RangeQuery rangeQuery = new RangeQuery(); rangeQuery.setFieldName("createdAt"); rangeQuery.setFrom(ColumnValue.fromLong(1514793600000, true); rangeQuery.setTo(ColumnValue.fromLong(1543651200000, false); mustQueries.add(rangeQuery); //精確Query TermQuery termQuery = new TermQuery(); termQuery.setFieldName("type"); termQuery.setTerm(ColumnValue.fromString("image")); mustQueries.add(termQuery); BoolQuery boolQuery = new BoolQuery(); boolQuery.setMustQueries(mustQueries);
四、歡迎加入
這樣,系統的核心程式碼已經完成,基於表格儲存搭建智慧元資料管理系統,是不是很簡單?
對錶格儲存(TableStore)感興趣的使用者,歡迎加入【表格儲存公開交流群】,群號:11789671。