近幾年來,人工智慧逐漸火熱起來,特別是和大數據一起結合使用。人工智慧的主要場景又包括圖像能力、語音能力、自然語言處理能力和用戶畫像能力等等。這些場景我們都需要處理海量的數據,處理完的數據一般都需要存儲起來,這些數據的特點主要有如下幾點:
- 大:數據量越大,對我們後面建模越會有好處;
- 稀疏:每行數據可能擁有不同的屬性,比如用戶畫像數據,每個人擁有屬性相差很大,可能用戶A擁有這個屬性,但是用戶B沒有這個屬性;那麼我們希望存儲的系統能夠處理這種情況,沒有的屬性在底層不佔用空間,這樣可以節約大量的空間使用;
- 列動態變化:每行數據擁有的列數是不一樣的。
為了更好的介紹 HBase 在人工智慧場景下的使用,下面以某人工智慧行業的客戶案例進行分析如何利用 HBase 設計出一個快速查找人臉特徵的系統。
目前該公司的業務場景裡面有很多人臉相關的特徵數據,總共3400多萬張,每張人臉數據大概 3.2k。這些人臉數據又被分成很多組,每個人臉特徵屬於某個組。目前總共有近62W個人臉組,每個組的人臉張數範圍為 1 ~ 1W不等,每個組裡面會包含同一個人不同形式的人臉數據。組和人臉的分佈如下:
- 43%左右的組含有1張人臉數據;
- 47%左右的組含有 2 ~ 9張人臉數據;
- 其餘的組人臉數範圍為 10 ~ 10000。
現在的業務需求主要有以下兩類:
- 根據人臉組 id 查找該組下面的所有人臉;
- 根據人臉組 id +人臉 id 查找某個人臉的具體數據。
MySQL + OSS 方案
之前業務數據量比較小的情況使用的存儲主要為 MySQL 以及 OSS(對象存儲)。相關表主要有人臉組表group和人臉表face。表的格式如下:
group表: