一、方案背景
使用者存儲海量的文檔、媒體檔案等資料的同時,對檔案中繼資料(Meta)的管理不可或缺。中繼資料擁有多元度的字段資訊,基本資訊包含檔案大小、建立時間、使用者等。随着人工智能的發展,通過AI技術提取檔案核心要素也成為檔案中繼資料的重要資訊。以圖檔為例:使用者通過智能媒體服務,擷取分析圖檔核心标簽并為标簽打分,使用者還可提取人臉識别相關資訊,以及地理位置等資訊,提取的資訊也需要存儲到檔案中繼資料資訊中。因而檔案中繼資料的資訊量不斷增加,格式、類型也不斷呈現多元化。
需求場景
某智能媒體管理平台,為使用者提供檔案(圖檔、視訊等)管理服務,使用者通過自研(或售賣)的智能媒體分析工具,為目标檔案進行分析。用分析後的資訊豐富原有的中繼資料資訊。是以,平台需要一套有效的中繼資料管理方案,為使用者提供中繼資料資訊的管理、分析、統計功能。例如:
使用者A:【使用者A的檔案】*【近1年】*【标簽含[開心]】*的所有圖檔,按标簽分數排序
使用者B:【使用者B的檔案】*【出現某某明星】*的所有視訊,按明星相似度排序
......
管理系統樣例,如下所示:__官網控制台位址:__
項目樣例技術點
對于智能中繼資料管理系統,通常需要考慮的技術點,包含以下方面:
- 查詢能力:具備強大的查詢能力,如多類型索引、多元度組合查詢等,同時具備排序、統計等功能;
- 橫向擴充(多字段):中繼資料的字段類型豐富,字段變動、增删頻繁,資料庫盡量schema free來保證橫向擴充能力;
- 縱向擴充(資料量):海量檔案就會對應海量中繼資料,面對資料膨脹,資料庫要滿足易擴充、低成本等基本要求;
- 服務性能:應對高并發請的同時,保證低延遲、強一緻、高可用;
二、表格存儲(TableStore)方案
使用表格存儲(TableStore)研發的多元索引(SearchIndex)方案,可以有效解決海量中繼資料的管理問題。TableStore具有即開即用,按量收費等特點。
TableStore作為阿裡雲提供的一款全托管、分布式NoSql型資料存儲服務,具有【海量資料存儲】、【熱點資料自動分片】、【海量資料多元檢索】等功能,天然地解決了資料大爆炸這一挑戰;在應對資料橫向、縱向擴充上,充分發乎其優勢。多元索引随時建立,是Meta中繼資料管理的合适方案。
同時,SearchIndex功能在保證使用者資料高可用的基礎上,提供了資料多元度搜尋、統計等能力。針對多種場景建立多種索引,實作多種模式的檢索。使用者可以僅在需要的時候建立、開通索引。由TableStore來保證資料同步的一緻性,這極大的降低了使用者的方案設計、服務運維、代碼開發等工作量。
基于表格存儲搭建的智能中繼資料管理系統頁面一覽
樣例内嵌在表格存儲控制台中,使用者可登入控制台體驗系統(若為表格存儲的新使用者,需要點選開通服務後體驗,開通免費,Meta資料存儲在公共執行個體中,體驗不消耗使用者存儲、流量、Cu)。
注:該樣例提供了【億量級】檔案中繼資料。官網控制台位址:
二、搭建準備
若您對于智能中繼資料管理系統感興趣,希望開始自己系統的搭建之旅,隻需按照如下步驟便可以着手搭建了:
1、開通表格存儲
通過控制台開通表格存儲服務,表格存儲即開即用(後付費),采用按量付費方式,已為使用者提供足夠功能測試的免費額度。
表格存儲官網控制台、
免費額度說明。
2、建立執行個體
通過控制台建立表格存儲執行個體,選擇支援多元索引的Region。(目前階段SearchIndex功能尚未商業化,暫時開放北京,上海,杭州和深圳四地,其餘地區将逐漸開放)
建立執行個體後,送出工單申請多元索引功能邀測(現多元索引功能已商業化,無需申請)。
3、SDK下載下傳
使用具有多元索引(SearchIndex)的SDK,
官網位址,暫時java、go、node.js三種SDK增加了新功能
java-SDK
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
<version>4.8.0</version>
</dependency>
go-SDK
$ go get github.com/aliyun/aliyun-tablestore-go-sdk
Nodejs-SDK
$ npm install [email protected]
4、表設計
表名:order_contract
列名 | 資料類型 | 索引類型 | 字段說明 |
_id(主鍵列) | String | MD5(fId)避免熱點 | |
fId | KEYWORD | 檔案編号 | |
userId | 使用者編号 | ||
tags | Nested: [{ tag: String, score: LONG }] | 多标簽使用嵌套索引(數組字元串) '[{"tag":"表格存儲","score":97.317251},{"score":50.770918,"tag":"沙漠"}]' | |
size | long | LONG | 檔案大小 |
createdAt | 建立時間(時間戳) | ||
url | 檔案連結(存儲于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接口。使用者可以自由設計索引字段的多元度條件組合查詢。通過設定選擇不同的查詢參數,建構不同的查詢條件、不同排序方式;目前支援:精确查詢、範圍查詢、字首查詢、比對查詢、通配符查詢、短語比對查詢、分詞字元串查詢、嵌套查詢、GEO查詢,并通過布爾與、或組合。
如【标簽為:表格存儲,建立時間[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。