天天看點

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

一、方案背景

使用者存儲海量的文檔、媒體檔案等資料的同時,對檔案中繼資料(Meta)的管理不可或缺。中繼資料擁有多元度的字段資訊,基本資訊包含檔案大小、建立時間、使用者等。随着人工智能的發展,通過AI技術提取檔案核心要素也成為檔案中繼資料的重要資訊。以圖檔為例:使用者通過智能媒體服務,擷取分析圖檔核心标簽并為标簽打分,使用者還可提取人臉識别相關資訊,以及地理位置等資訊,提取的資訊也需要存儲到檔案中繼資料資訊中。因而檔案中繼資料的資訊量不斷增加,格式、類型也不斷呈現多元化。

需求場景

某智能媒體管理平台,為使用者提供檔案(圖檔、視訊等)管理服務,使用者通過自研(或售賣)的智能媒體分析工具,為目标檔案進行分析。用分析後的資訊豐富原有的中繼資料資訊。是以,平台需要一套有效的中繼資料管理方案,為使用者提供中繼資料資訊的管理、分析、統計功能。例如:

使用者A:【使用者A的檔案】*【近1年】*【标簽含[開心]】*的所有圖檔,按标簽分數排序

使用者B:【使用者B的檔案】*【出現某某明星】*的所有視訊,按明星相似度排序

......

管理系統樣例,如下所示:__官網控制台位址:__

項目樣例
海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

技術點

對于智能中繼資料管理系統,通常需要考慮的技術點,包含以下方面:

  • 查詢能力:具備強大的查詢能力,如多類型索引、多元度組合查詢等,同時具備排序、統計等功能;
  • 橫向擴充(多字段):中繼資料的字段類型豐富,字段變動、增删頻繁,資料庫盡量schema free來保證橫向擴充能力;
  • 縱向擴充(資料量):海量檔案就會對應海量中繼資料,面對資料膨脹,資料庫要滿足易擴充、低成本等基本要求;
  • 服務性能:應對高并發請的同時,保證低延遲、強一緻、高可用;
    海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

二、表格存儲(TableStore)方案

使用表格存儲(TableStore)研發的多元索引(SearchIndex)方案,可以有效解決海量中繼資料的管理問題。TableStore具有即開即用,按量收費等特點。

TableStore作為阿裡雲提供的一款全托管、分布式NoSql型資料存儲服務,具有【海量資料存儲】、【熱點資料自動分片】、【海量資料多元檢索】等功能,天然地解決了資料大爆炸這一挑戰;在應對資料橫向、縱向擴充上,充分發乎其優勢。多元索引随時建立,是Meta中繼資料管理的合适方案。

同時,SearchIndex功能在保證使用者資料高可用的基礎上,提供了資料多元度搜尋、統計等能力。針對多種場景建立多種索引,實作多種模式的檢索。使用者可以僅在需要的時候建立、開通索引。由TableStore來保證資料同步的一緻性,這極大的降低了使用者的方案設計、服務運維、代碼開發等工作量。

基于表格存儲搭建的智能中繼資料管理系統頁面一覽

樣例内嵌在表格存儲控制台中,使用者可登入控制台體驗系統(若為表格存儲的新使用者,需要點選開通服務後體驗,開通免費,Meta資料存儲在公共執行個體中,體驗不消耗使用者存儲、流量、Cu)。

注:該樣例提供了【億量級】檔案中繼資料。官網控制台位址:

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入
海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

二、搭建準備

若您對于智能中繼資料管理系統感興趣,希望開始自己系統的搭建之旅,隻需按照如下步驟便可以着手搭建了:

1、開通表格存儲

通過控制台開通表格存儲服務,表格存儲即開即用(後付費),采用按量付費方式,已為使用者提供足夠功能測試的免費額度。

表格存儲官網控制台

免費額度說明

2、建立執行個體

通過控制台建立表格存儲執行個體,選擇支援多元索引的Region。(目前階段SearchIndex功能尚未商業化,暫時開放北京,上海,杭州和深圳四地,其餘地區将逐漸開放)

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

建立執行個體後,送出工單申請多元索引功能邀測(現多元索引功能已商業化,無需申請)。

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

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直接建立):

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

2、建立資料表索引

TableStore自動做全量、增量的索引資料同步:使用者可以通過控制台建立、管理SearchIndex(使用者也可通過SDK建立):

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

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)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入

四、歡迎加入

這樣,系統的核心代碼已經完成,基于表格存儲搭建智能中繼資料管理系統,是不是很簡單?

對表格存儲(TableStore)感興趣的使用者,歡迎加入【表格存儲公開交流群】,群号:11789671。

海量智能中繼資料管理系統實作解析一、方案背景二、表格存儲(TableStore)方案二、搭建準備三、開始搭建(核心代碼)四、歡迎加入