特徵資料庫(下文簡稱FeatureDB)是阿里雲PAI平台下特徵平台(PAI-FeatureStore)提供的資料庫服務,可以作為FeatureStore的線上資料來源,提供線上特徵儲存功能,並為搜尋推薦廣告等服務提供高效能的讀寫最佳化。本文為您介紹什麼是FeatureDB,以及FeatureDB的功能與優勢。
什麼是FeatureDB
FeatureDB是FeatureStore提供的高效能分布式儲存資料庫,支援KV、KKV格式的資料,並支援以結構化的方式將數組儲存為Array,將KV儲存為Map類型。通過Array、Map類型儲存資料,可以為後續的讀寫、推理服務提供更高的效能。FeatureDB已經全面支援離線特徵和即時特徵的生產、更新與消費鏈路,同時也支援使用者行為序列特徵。
如何開通
您可以在建立FeatureDB資料來源時按照介面提示進行開通,具體操作,請參見建立線上資料來源:FeatureDB。
產品特性
FeatureDB針對FeatureStore特徵讀取特性實現了如下功能和最佳化:
支援讀寫KV、KKV類型特徵。
支援讀寫MaxCompute複雜類型特徵(Array、Map)。
支援全量拉取FeatureView下的所有特徵資料。
支援毫秒級輪詢更新即時特徵資料。
支援秒級TTL,自動清理到期資料。
隨用隨付,根據實際讀寫資料量進行計費。
FeatureDB可以對FeatureView的資料進行分區儲存,通過調整分區數來滿足不同情境的讀寫效能需求,並且支援副本,以保障資料的穩定與安全。分區數量會根據您選擇的預估數量級進行設定:
千萬級以下(預設):5分區。
介於千萬級與億級之間:10分區。
億級以上:20分區。

產品優勢
高性價比
對於特徵儲存規模較小的客戶,使用FeatureDB可以降低使用成本。
滿足高頻更新需求
當使用即時統計特徵時,需每隔幾秒及時更新即時特徵到多個EasyRec Processor(模型推理服務)執行個體的儲存中,這對高頻更新有較高的要求,FeatureDB可以滿足這一需求。
支援複雜類型特徵
在搜尋推廣業務中,Array和Map類型的特徵、使用者行為長序列特徵及其SideInfo被廣泛使用。如果複雜類型特徵以字串形式儲存,在使用時需要進行序列化轉為Map類型,這會降低效能。
FeatureDB支援儲存複雜類型資料,並支援將MaxCompute2.0複雜類型資料同步到FeatureDB,進行高效能讀取操作。
支援彈性擴容
對於規模較大的客戶,能夠根據特徵視圖靈活增加分區數量,提高讀寫效能。
解決監控盲點
當整合第三方資料來源時,整個資料鏈路的監控變得困難,特別是在即時特徵方面。FeatureDB能夠監控每個視圖粒度的讀寫QPS、RT、資料更新延時和儲存用量等關鍵效能指標。
產品功能
VPC網路高速連通
FeatureDB提供基於私網串連(PrivateLink)的VPC網路高速連通功能。配置成功後,FeatureStore會通過PrivateLink打通您的VPC和FeatureDB服務之間的網路,之後您可以在VPC中使用FeatureStore SDK通過私人串連訪問FeatureDB,從而提高讀寫資料效能,降低訪問延時。
您可以通過以下方式配置VPC網路高速連通。
方式一:如果未建立過FeatureDB資料來源,單擊管理資料來源,進入管理資料來源頁面後單擊建立資料來源。建立FeatureDB資料來源時,在VPC網路高速連通配置部分填寫VPC,和可用性區域與交換器。具體操作細節,請參見建立線上資料來源:FeatureDB。
方式二:如果已經建立了FeatureDB資料來源,單擊管理資料來源,進入管理資料來源頁面後單擊已經建立好的feature_db資料來源,進入詳情頁。單擊VPC網路高速連通配置,填寫VPC,和可用性區域與交換器,並單擊確定。
注意事項
VPC設定後無法修改,請確認您配置的VPC為您使用FeatureStore的線上服務所在的VPC。
推薦您將服務部署到推薦的可用性區域,這樣可以避免跨可用性區域的網路耗時,最大幅度提高訪問效能。
地區
地區
推薦的可用性區域
亞太地區
華東1(杭州)
可用性區域G
華東2(上海)
可用性區域L
華北2(北京)
可用性區域F
華南1(深圳)
可用性區域F
中國(香港)
可用性區域B
新加坡
可用性區域C
印尼(雅加達)
可用性區域B
歐洲和美洲
德國(法蘭克福)
可用性區域A
美國(矽谷)
可用性區域B
可用性區域與交換器:請確保選擇了您線上服務機器所在可用性區域的交換器。建議選擇至少兩個可用性區域的交換器,從而實現業務的高可用性和穩定性。推薦您選擇線上服務機器所在可用性區域的交換器,以及我們推薦的可用性區域的交換器。
配置成功後,後續只支援添加其他可用性區域的交換器,不支援修改或刪除配置。
寫入特徵
對於離線特徵,可以使用FeatureStore Python SDK通過DataWorks每天例行運行調度任務,將MaxCompute裡的資料同步到FeatureDB中。
對於即時特徵寫入,預設我們會進行整行資料更新。如果寫入資料只包含了部分欄位,對於未寫入的欄位我們會將其設定為空白。如果想要只更新寫入欄位的資料,並將其合并到原有資料上,您可以進行如下設定:
通過Java SDK寫入:指定 InsertMode 寫入模式,設定為 InsertMode.PartialFieldWrite。
for (int i = 0; i < 100;i++) { featureView.writeFeatures(writeData, InsertMode.PartialFieldWrite); }通過配置Flink Connector寫入:設定參數 insert_mode 值為 partial_field_write。
讀取特徵
您可以使用FeatureStore SDK(Go/Java)或EasyRec Processor讀取特徵。
FeatureStore SDK(Go/Java )支援離線/即時特徵的KV點查。通過指定特徵的JoinID(主鍵)值與特徵名稱,即可在毫秒內完成索引值對(KV)查詢,擷取目標特徵資料。FeatureStore SDK(Go/Java)也支援行為序列特徵的KKV查詢。通過指定UserID(使用者ID)值,即可查詢到拼裝好的序列特徵結果。
EasyRec Processor已整合FeatureStore Cpp SDK,支援將FeatureDB的特徵資料全量拉入記憶體,並支援毫秒級輪詢更新即時特徵資料到記憶體,從而實現更高效能的讀取。
監控指標
如果使用FeatureDB作為線上資料來源,建立特徵視圖後,單擊目標視圖右側的資料監控,可查看該視圖的讀寫QPS和RT等指標。(離線特徵視圖資料同步寫入不會反饋在監控指標中)
即時特徵鏈路
FeatureStore提供的儲存服務主要包括三部分:Feature Service(接入層)、訊息佇列(DataHub)和FeatureDB。
在即時特徵中,使用者可以通過FeatureStore Java SDK或Flink Connector調用Feature Service服務,將特徵資料寫入FeatureDB。通過Feature Service寫入的資料,也會同步到使用者的MaxCompute表中,可以用於即時特徵的樣本匯出,進一步的模型訓練。
對於儲存在FeatureDB中的特徵資料, 使用者可以通過FeatureStore的Java/Go SDK讀取,也可以通過 EasyRec Processor全量拉取特徵存入本機快取中,以實現更高效能的讀取。對於即時特徵,可以毫秒級擷取最新特徵資訊。
即時特徵資料生命週期設定
在建立即時特徵視圖時,可以通過特徵生命週期來設定FeatureDB表的資料生命週期。當一行資料的存留時間到達生命週期後,它會在幾秒內被自動清理。

資料的存留時間目前支援兩種設定方式:
方式一:不設定事件時間欄位。這種情況下,會根據資料的寫入時間開始計算存留時間,到達生命週期後,自動清理資料。
方式二:勾選了某個特徵欄位作為事件時間欄位,單位是毫秒。假設 event_time 為事件時間欄位的值, time_now 為現在的時間,time_ttl = time_now - ttl 為應該開始到期的 event_time 的值,這種情況下對於寫入的特徵資料的具體處理方式如下:
如果使用 PartialFieldWrite 模式進行部分欄位更新寫入,則會根據資料實際寫入時間計算存留時間。
event_time > time_now + 15min:資料不寫入。(這裡防止不同系統之間時間戳記有差異,放寬15分鐘)
time_ttl < event_time <= time_now + 15min:資料正常寫入,根據 event_time 開始計算存留時間,到達生命週期後,自動清理這行資料。
0 < event_time < time_ttl:資料寫入後會被自動清理。這裡需要注意的是,event_time的單位是毫秒。如果您的事件時間欄位的值是秒,那麼會落入這種情況,導致資料寫入不成功。
event_time <= 0:根據資料實際寫入時間計算存留時間。
值非法(無法轉換成整型):資料不寫入。
註冊了事件時間欄位但是沒有傳入事件時間欄位的值:資料正常寫入,根據資料實際寫入時間計算存留時間。
不註冊事件時間欄位:資料正常寫入,根據資料實際寫入時間計算存留時間。
另外,在FeatureDB中,我們會將 event_time 的值作為這行資料的ts,意味著如果需要更新一個 key 對應的資料,需要事件時間欄位的值大於等於之前的值,這行資料才會更新。如果新的 event_time < 原來 event_time 的值,則不會更新這個key對應的資料。
效能測試
以下是使用FeatureStore Go SDK在VPC環境中讀取FeatureDB資料的效能壓測結果樣本,特徵表資料選取的推薦情景中使用者側資料,特徵表總行數是17689586,測試機器4核8GiB,測試結果僅供參考。
配置了VPC網路高速連通,且線上服務部署在推薦的可用性區域:
特徵欄位數量(列數)
讀取keys數量(行數)
平均耗時
TP95
TP99
260
1
0.89毫秒
1.20毫秒
1.45毫秒
260
10
1.17毫秒
1.52毫秒
1.87毫秒
260
50
1.91毫秒
2.56毫秒
2.92毫秒
260
100
2.87毫秒
3.58毫秒
3.93毫秒
260
200
4.43毫秒
5.25毫秒
5.80毫秒
配置了VPC網路高速連通,線上服務部署在非推薦的可用性區域:
特徵欄位數量(列數)
讀取keys數量(行數)
平均耗時
TP95
TP99
260
1
2.54毫秒
2.86毫秒
3.15毫秒
260
10
2.75毫秒
3.12毫秒
3.56毫秒
260
50
3.95毫秒
4.75毫秒
5.19毫秒
260
100
4.82毫秒
5.66毫秒
6.21毫秒
260
200
6.84毫秒
7.75毫秒
8.25毫秒
未配置VPC網路高速連通:
特徵欄位數量(列數)
讀取keys數量(行數)
平均耗時
TP95
TP99
260
1
3.62毫秒
3.83毫秒
4.27毫秒
260
10
3.82毫秒
4.11毫秒
4.61毫秒
260
50
4.54毫秒
5.19毫秒
5.60毫秒
260
100
5.40毫秒
6.13毫秒
6.56毫秒
260
200
7.15毫秒
7.93毫秒
8.47毫秒
計費說明
詳情請參見特徵平台(FeatureStore)計費說明。