貸款、天使投資(風控助手)商務資料庫設計 - 阿裡雲RDS PostgreSQL, HybridDB for PostgreSQL最佳實踐

來源:互聯網
上載者:User

摘要:標籤 PostgreSQL , HybridDB for PostgreSQL ,小微貸款 ,金融風控 ,企業圖譜 ,圖式搜尋 ,輿情剖析 ,自動貸款 ,貸款審查 ,審查神器幕後貸款是銀行的主營商務之一,但是並不是只有銀行能提供貸款,實際上資金雄厚的公司都有能力提供貸款(比如保險產業、資源壟斷型企業等)。

幕後

貸款是銀行的主營商務之一,但是並不是只有銀行能提供貸款,實際上資金雄厚的公司都有能力提供貸款(比如保險產業、資源壟斷型企業等)。

除了放貸,我們常說的天使投資、A輪B輪啥的,也是類似的場景,憑什麼投你,背後如何決策也需要決策系統的支架。

與貸款相反的是吸金類商務,比如我們現在發現越來越多的理財產品、股市、甚至是遊戲儲值,只要是讓你存錢,把你的錢留住,而且你還不捨得吧錢取出來的商務,都是吸金類商務。

所以,一些本來就資金雄厚,或者是靠吸金類商務起來的公司,只要吸到足夠的金之後,就有放貸款的能力。

放貸本身是一件體力活,來申請貸款的人或企業魚龍混雜。什麼樣的人,什麼樣的企業能獲得貸款,需要經過層層審查。審查需謹慎,否則就容易成為放貸公司的爛帳。

本文涉及的專案和放貸、審查、風控、輿情系統有關。

一、需求剖析

閱聽企業的圖譜資訊,例如股權結構、輿情活動、管理層、智慧財產權,經營狀況等。方便審查員查看。

pic

資料的來源,例如爬蟲得到的資訊、來自夥伴(例如招聘網站、稅務)的資訊等,組成了企業相關的資訊網路。

類比社交商務

這類資料和互連網的社交類商務的資料非常類似,A企業投資了B企業(類似微博的LIKE),A企業發佈了財報(類似發微博),A企業獲得了某個專利。。。。

相關的效能指標:

1、用戶數量級1億(相當於1億企業名錄),朋友數量級1~1萬(相當於平均每個企業與之相關聯的企業1到1萬家),單個物件的Like數量1-100萬(相當於單個活動被追隨的平均次數1到100萬次)。

1.1.追隨微博(本文)

17.7萬/s,預計可以優化到30萬。

1.2.查詢本文被誰like?

101.6萬/s

1.3.查詢本文被like了多少次?

104.1萬/s

1.4.查詢LIKE某本文的用戶中,哪些是我的朋友?

64.8萬/s

1.5.機器:

(10W左右價位的X86,12*8TB SATA盤,1塊SSD作為BCACHE)

案例詳見:

《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》

《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》

類比圖式搜尋商務

企業圖譜系統與互連網社交類商務截然不同的地方:

企業資料相對來說是比較靜態資料,所以我們更追隨的是查詢的效能,按一個企業順藤摸瓜找出相關企業的資料的效能。與之對應的是下面這個案例,圖式搜尋的套用。

案例詳見:

《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》

相關的效能指標:

1、1億企業名錄,每5萬作為一個有牽連的企業群體,每個企業牽連1000個其他企業,形成1000億的超大規模關係網。

以某個企業為中心,取出3層關聯的商業網路:回應時間15毫秒。

資料量預估

企業:百萬。

每個企業相關的關聯、輿情活動、財報等,平均預計1000條。

平均每個企業的直接相關企業有50家。

個人(法人、股東、監理、。。。):百萬。

每個人有若干家相關企業。

總數據量約10億級。

二、資料庫架構設計

1、相對靜態資料(例如人、企業基本資料、主要成員、股東。。。)

量級:百萬。

有些一對多的資料,可以使用數群組類型(例如企業主要成員ID、股東ID,存為陣列)來隱藏,從而升階查詢效率。

create table corp_info (...);--企業相對靜態資訊

create table people_info (...);--個人相對靜態資訊

建議將這類待用資料設計為多張表,使用PK關聯起來,減少查詢少量欄位時的資料掃描量(因為PG是行隱藏格式,查詢少量欄位時,可以提高命中率減少IO放大)。

2、輿情、流水資料

量級:十億。

create table corp_feed (corp_id pk, typ int, event);

3、關聯資料

量級:千萬 ~ 億等級。

這個量級基本上不需要考慮隱藏冗余的正向關聯,反向關聯,(方便sharding(FDW, hybriddb))。

create table corp_rel (...);

4、線上線下一體化

阿裡雲線上的資料,通過邏輯訂閱、物理流式複製,可以將資料複製到線下資料庫中。

其中邏輯訂閱支援表級訂閱(每張表的訂閱速度約3萬行/s,指表在硬地訂閱通道時)。邏輯訂閱還可以通過規則或觸發程序支援訂閱表中的部份資料,甚至實現格式轉換等工作。邏輯訂閱的備庫支援可讀可寫。(邏輯訂閱的大交易延遲比物理複製高)

物理流式複製,支援全庫複製,物理複製的好處是延遲低,備庫支援唯讀。

用戶建立RDS備庫的需求的起因

有些企業因為SOX審計的需求,必須要在自己的機房放一個備節點。

有些企業可能期望通過這種方法建立日常開發或測試環境。

有些架構的需求,例如雲端隱藏所有資料,線下隱藏部份關心的加速資料。或者雲端所有資料分割成了多個庫,剖析場景需要將資料合併起來進行剖析,那麼就有多個物件的複製需求,使用PostgreSQL邏輯訂閱可以支援。

5、sharding

雖然本文涉及的場景和資料量並不需要sharding(根據後面的測試,實際上RDS PostgreSQL單庫支援1000億資料量,在穩定性、效能各方面應該是沒有問題的。),但是考慮到案例的通用性,還是提一下。

可以根據被查詢的ID進行切分,如有正反向關聯的,可以採用冗餘隱藏的方式達到配量的目的。

PostgreSQLsharding的案例很多:

1、核心層面支援的sharding

《PostgreSQL9.6 sharding based on FDW & pg_pathman》

2、通過plproxy專員支援的sharding

《PostgreSQL最佳實踐 - 水準分庫(基於plproxy)》

3、通過citus外掛程式支援的sharding和mpp

https://github.com/citusdata/citus

4、通過用戶端專員支援的sharding

https://github.com/dangdangdotcom/sharding-jdbc

https://github.com/go-pg/sharding/

三、DEMO效能

建表

create table corp_info (--公司資訊
id int primary key,--企業ID,主鍵
info text,--公司資訊
core_team int[]--核心團隊成員ID
--忽略其他欄位
);

create table people_info (--人資訊
id int primary key,--人ID,主鍵
info text,--資訊
rel_corp int[],--和哪些公司相關
rel_type int[]--分別是什麼關聯(法人、建立、董事長,。。。。)
--忽略其他欄位
);

create table corp_rel1 (--企業正向關聯
corp_id1 int,--企業ID
corp_id2 int,--企業ID
reltypid int--關聯類型
);
create index idx_corp_rel1 on corp_rel1 (corp_id1);

create table corp_rel2 (--企業反向關聯
corp_id1 int,--企業ID
corp_id2 int,--企業ID
reltypid int--關聯類型
);
create index idx_corp_rel2 on corp_rel2 (corp_id1);

create table corp_event ( --企業輿情
corp_id int,--企業ID
event text,--活動內容
crt_time timestamp--時間
--其他欄位略
);
create index idx_corp_event_1 on corp_event(corp_id, crt_time desc);

生成測試資料

生成10.42億測試資料,資料群組成和生成方法如下:

-- 100萬企業資料
insert into corp_info select generate_series(1,1000000), 'test', array(select (random()*1000000)::int from generate_series(1,20));

-- 100萬人資料
insert into people_info select generate_series(1,1000000), 'test', array(select (random()*1000000)::int from generate_series(1,20)), array(select (random()*50)::int from generate_series(1,20));

-- 2000萬企業正向關聯
insert into corp_rel1 select random()*1000000, random()*1000000, random()*100 from generate_series(1,20000000);

-- 2000萬企業反向關聯
insert into corp_rel2 select random()*1000000, random()*1000000, random()*100 from generate_series(1,20000000);

-- 10億企業輿情
insert into corp_event select random()*1000000, 'test', now()+(id||' second')::interval from generate_series(1,1000000000) t(id);

由於資料相對靜止,所以我們可以對資料進行cluster話,提高查詢效率。(不這麼做,實際上也是毫秒級的回應時間,這麼做之後可以降低到0.0X 毫秒)

相關案例:

《機票商務效能優化案例 - 阿裡雲RDSPostgreSQL最佳實踐》

cluster corp_rel1 using idx_corp_rel1;
cluster corp_rel2 using idx_corp_rel2;
cluster corp_event using idx_corp_event_1;

壓測

1、企業待用資料查詢

vi test.sql

set id random(1,1000000)
select * from corp_info where id=:id;
select * from people_info where id = any (array(select core_team from corp_info where id=:id));
pgbench -M prepared -n -r -P 1 -f ./test.sql -c 64 -j 64 -T 120

transaction type: ./test.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 15175162
latency average = 0.506 ms
latency stddev = 0.080 ms
tps = 126454.038435 (including connections establishing)
tps = 126468.912494 (excluding connections establishing)
script statistics:
 - statement latencies in milliseconds:
0.001set id random(1,1000000)
0.068select * from corp_info where id=:id;
0.444select * from people_info where id = any (array(select core_team from corp_info where id=:id));

2、企業關聯資料查詢,查詢正向和反向關聯。

vi test1.sql

set id random(1,1000000)
select * from corp_rel1 where corp_id1=:id;
select * from corp_rel2 where corp_id1=:id;
pgbench -M prepared -n -r -P 1 -f ./test1.sql -c 64 -j 64 -T 120

transaction type: ./test1.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 49723004
latency average = 0.154 ms
latency stddev = 0.032 ms
tps = 414351.413094 (including connections establishing)
tps = 414396.709915 (excluding connections establishing)
script statistics:
 - statement latencies in milliseconds:
0.001set id random(1,1000000)
0.077select * from corp_rel1 where corp_id1=:id;
0.077select * from corp_rel2 where corp_id1=:id;

3、企業最近10條輿情資料查詢

vi test2.sql

set id random(1,1000000)
select * from corp_event where corp_id=:id order by crt_time desc limit 10;
pgbench -M prepared -n -r -P 1 -f ./test2.sql -c 64 -j 64 -T 120

transaction type: ./test2.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 94303135
latency average = 0.081 ms
latency stddev = 0.020 ms
tps = 785845.099057 (including connections establishing)
tps = 785941.120081 (excluding connections establishing)
script statistics:
 - statement latencies in milliseconds:
0.001set id random(1,1000000)
0.081select * from corp_event where corp_id=:id order by crt_time desc limit 10;

四、達到的效果

1、效能

1.1、企業待用資料查詢。

TPS:12.6萬

平均回應時間:0.5毫秒

1.2、企業關聯資料查詢,輸出正向和反向關聯。

TPS:41.4萬

平均回應時間:0.15毫秒

1.3、企業最近10條輿情資料查詢。

TPS:78.5萬

平均回應時間:0.08毫秒

pic

pic

2、使用阿裡雲RDS PostgreSQL,使用者不需要關心資料庫的運維,容災,備份復原,擴容,縮容,HA等基本問題,可以更加專注於商務。

3、剖析需求,使用PostgreSQL 10提供的多核並行、JIT、運算元複用等屬性,處理10億級的資料分析完全不在話下。

《剖析加速引擎黑科技 -LLVM、列存、多核並行、運算元複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》

《TPC-H測試 -PostgreSQL 10 vs Deepgreen(Greenplum)》

4、機器學習服務需求

阿裡雲RDS PostgreSQL提供了機器學習服務外掛程式MADlib,支援Classification,Regression, Clustering, Topic Modeling, Association Rule Mining, DescriptiveStatistics, Validation等眾多採礦模型。

pic

http://madlib.incubator.apache.org/product.html

madlib手冊

5、線上線下一體化,通過RDS PostgreSQL提供的流複製、邏輯訂閱介面,使用者可以將資料複製到遠端或多個RDS,與商務靈活的群組,實現較靈活的架構(包括多MASTER的支援)。

《使用PostgreSQL邏輯訂閱實現multi-master》

《PostgreSQL10 流式物理、邏輯主從 最佳實踐》

6、阿裡雲雲端產品群組拳

使用雲端的OSS,HybridDBfor PostgreSQL, RDS PostgreSQL,可以支援用戶從 流計算、線上商務、資料分析的商務資料閉環。

《打造雲端流計算、線上商務、資料分析的商務資料閉環 - 阿裡雲RDS、HybridDBfor PostgreSQL最佳實踐》

《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS)- 解決OLTP+OLAP多工需求》

阿裡雲 RDSPostgreSQL

阿裡雲 HybridDB for PostgreSQL

五、技術點回顧

本方案用到了哪些技術點:

1、MADlib,支援多種機器學習服務演算法,通過SQL介面叫用,實現了資料庫的機器學習服務功能。

2、邏輯訂閱,通過邏輯訂閱,使用者可以複製出多個資料庫(可以按表級、行級進行複製),複製出來的SLAVE節點支援讀寫。

3、物理流式複製,通過物理流式複製,使用者可以複製出多個備庫,支援唯讀。

用戶建立RDS備庫的需求的起因:

有些企業因為SOX審計的需求,必須要在自己的機房放一個備節點。

有些企業可能期望通過這種方法建立日常開發或測試環境。

有些架構的需求,例如雲端隱藏所有資料,線下隱藏部份關心的加速資料。或者雲端所有資料分割成了多個庫,剖析場景需要將資料合併起來進行剖析,那麼就有多個物件的複製需求,使用PostgreSQL邏輯訂閱可以支援。

4、數群組類型,數群組類型用於隱藏一對多的關聯,PostgreSQL支援陣列的索引取出,效率非常高。

5、SQL 流計算,通過SQL流計算,可以即時的進行資料通知,彙總,轉換等動作。在三體高可用PCC大賽中見證了它的卓越效果。

六、雲端產品回顧

阿裡雲 RDSPostgreSQL

阿裡雲 HybridDB for PostgreSQL

阿裡雲 OSS

七、類似場景、案例

1、社交類場景商務。

《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》

《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》

2、圖式搜尋相關的金融風控、公安刑偵、社會關係、人脈剖析等需求剖析類商務。

《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》

八、小結

貸款這項商務已經不是銀行的專利商務,越來越多的企業都開通了類似(貸款、投資)商務。

放貸本身是一件體力活,來申請貸款的人或企業魚龍混雜。什麼樣的人可以獲得貸款,什麼樣的企業值得投資,需要經過層層審查。審查需謹慎,否則就容易成為放貸公司的爛帳。

通過爬蟲、夥伴管道可以獲得個人、企業的資訊、輿情資訊等,通過這些知識有效組織,可以說明放貸人、投資人快速的做出決策,選擇是否需要放貸或投資。

商務方使用阿裡雲的RDS PostgreSQL, HybridDB forPostgreSQL, OSS等群組產品,減輕了商務方的資料庫維修、HA、容災、擴容、縮容等負擔。商務方可以專注于套用開發,提高效率。

效能方面,遠遠超出商務預期(如果每秒幾十萬筆查詢還不夠,你的貸款商務得多紅火呀 ^_^)。

九、參考

《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》

《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》

《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》

《機票商務效能優化案例 - 阿裡雲RDSPostgreSQL最佳實踐》

《剖析加速引擎黑科技 -LLVM、列存、多核並行、運算元複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》

《TPC-H測試 -PostgreSQL 10 vs Deepgreen(Greenplum)》

《使用PostgreSQL邏輯訂閱實現multi-master》

《PostgreSQL10 流式物理、邏輯主從 最佳實踐》

《打造雲端流計算、線上商務、資料分析的商務資料閉環 - 阿裡雲RDS、HybridDBfor PostgreSQL最佳實踐》

《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS)- 解決OLTP+OLAP多工需求》

相關產品:

1.雲資料庫RDS

2.安全管家

3.資料風控

4.雲端服務器ECS

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.