項目經(jīng)驗分享|openGauss 唐武國:成為開源項目的貢獻者是一件驕傲的事情

開源之夏個人專訪與項目經(jīng)驗分享持續(xù)開放中,歡迎已從開源之夏畢業(yè)或正在參與開源之夏活動的學(xué)生、導(dǎo)師一同加入專訪行動,掃描文末二維碼填寫專訪問卷,與大家分享你眼中的開源之夏!
本期項目經(jīng)驗分享來自openGauss社區(qū)中選學(xué)生——唐武國,在開源之夏2023中承擔(dān)的項目是openGauss用戶操作模型。

#?關(guān)于openGauss開源社區(qū)

openGauss是一款開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),采用木蘭寬松許可證v2發(fā)行。openGauss內(nèi)核深度融合華為在數(shù)據(jù)庫領(lǐng)域多年的經(jīng)驗,結(jié)合企業(yè)級場景需求,持續(xù)構(gòu)建競爭力特性。同時openGauss也是一個開源的數(shù)據(jù)庫平臺,鼓勵社區(qū)貢獻、合作。
官網(wǎng):https://opengauss.org/zh/
# 項目基本信息
項目名稱:openGauss用戶操作模型
項目導(dǎo)師:湯學(xué)明
項目簡述:使用機器學(xué)習(xí)根據(jù)openGauss審計日志中的用戶操作提取用戶操作特點,建立用戶操作畫像。
項目鏈接:https://summer-ospp.ac.cn/org/prodetail/23c9e0541
# 項目開發(fā)情況
1.?項目要求理解
項目要求探索openGauss已有的機器學(xué)習(xí)模塊和用戶操作模型構(gòu)建算法,完成技術(shù)洞察博客一篇。在審計日志中提取出用戶操作時間、操作客體等相關(guān)信息。根據(jù)用戶操作信息提取用戶操作特點,完成程序開發(fā),實現(xiàn)用戶操作畫像功能,完成設(shè)計文檔。
2. 方案描述
首先我們明確一下將用戶的畫像問題看作一個多分類任務(wù),確定好模型的輸入輸出。模型的輸入是設(shè)計好的用戶操作特征,模型輸出的是該用戶的類型。而要從原始的審計日志到用戶特征需要經(jīng)過特征工程模塊;在用戶操作模型中選用的是以邏輯回歸為基礎(chǔ)分類器的多分類模型。

整體的流程如下圖所示:
1. 首先需要收集指定時間段的審計審計日志;
2. 通過分析改日志來篩除一些無效的數(shù)據(jù),設(shè)計一些用戶特征,例如用戶的一次操 作需要包括主體、客體、操作類型(哪個用戶對誰做了什么)等信息;
3. 接著需要處理數(shù)據(jù)集,例如給類別數(shù)據(jù)編號,劃分數(shù)據(jù)集;
4. 使用為了評估模型分類的好壞,這里選擇準確率作為指標;
5. 根據(jù)指標的好壞,我們可以調(diào)整模型的超參數(shù),使得模型在訓(xùn)練集上分類得更好;
6. 選定好超參數(shù)后模型就可以使用了,之后數(shù)據(jù)庫中又會產(chǎn)生許多的用戶操作日志,我們可以重新收集日志來迭代模型。

3. 關(guān)鍵問題&解決辦法
如何獲取審計日志數(shù)據(jù)
我們的目標就是使用審計日志來進行用戶畫像,但是因為自己先前并沒有使用過openGauss數(shù)據(jù)庫手上沒有現(xiàn)成的日志數(shù)據(jù),于是只好在網(wǎng)上找找看有沒有別人公開的。但是對于開發(fā)者來說數(shù)據(jù)庫的日志屬于很機密的數(shù)據(jù)很少會公開出來,查找了幾天都沒有結(jié)果,便只好自己模擬出來。所以在日志數(shù)據(jù)獲取上花費的時間要比預(yù)期多些。
那具體怎么模擬呢?首先確定的是需要一個多用戶操作的數(shù)據(jù)庫,不然只給一名用戶畫像就沒意義了;其次模擬既要盡可能的貼近真實同時也要簡單。最后我選擇設(shè)計一個多用戶的教務(wù)管理系統(tǒng)并使用python腳本來自動模擬用戶的操作,模擬結(jié)束后在openGauss中導(dǎo)出審計日志。
數(shù)據(jù)庫設(shè)計

多用戶設(shè)計
opengauss:超級管理員,創(chuàng)建用戶pm
pm:項目架構(gòu)師;負責(zé)設(shè)計、創(chuàng)建數(shù)據(jù)庫、表格、視圖;創(chuàng)建下面的用戶
t_coder:老師端,主要對成績表增、改,對教師表查詢
s_coder:學(xué)生端,成績、學(xué)生表查詢
affair:教務(wù)處,負責(zé)增刪學(xué)生表、老師表、課程表
用戶畫像怎么實現(xiàn)
一開始看到要對用戶畫像其實并不好怎么下手,于是我調(diào)研了一些用戶畫像的案例,學(xué)習(xí)一下當前做畫像的主流算法和步驟,這樣在心中也大概有譜了。

可以看到大多對用戶行為的數(shù)據(jù)經(jīng)過統(tǒng)計學(xué)分析,才確定好用戶的特征,這些特征就是對用戶的畫像;接下來可以使用機器學(xué)習(xí)模型對用戶進行分類。于是我認真分析了審計日志,并統(tǒng)計了主體、客體、操作類型的分布。
原始的審計日志中每條數(shù)據(jù)包括下面這些屬性:


依據(jù)前面對操作類型的觀察,可以發(fā)現(xiàn)操作主要分為:
系統(tǒng)級操作,如登錄,創(chuàng)建用戶,分配權(quán)限,設(shè)置參數(shù)
數(shù)據(jù)庫級操作,創(chuàng)建數(shù)據(jù)庫,模式,表
表級操作,對表的增刪改查
因此,在設(shè)計操作特征的時候,也按照這些類別創(chuàng)建了各類操作的視圖(所有視圖均是統(tǒng)計每天的次數(shù)),最后便得到了下面的用戶特征表,每一條數(shù)據(jù)表示某一天該用戶的操作特征,包括一下8個屬性:
query_login,用戶每天的登錄次數(shù)
query_sys,除了登錄操作,其他的系統(tǒng)級操作次數(shù)
query_db,數(shù)據(jù)庫級的操作次數(shù)
query_insert_all,所有對表的插入操作
query_insert_score,所有對score表的插入操作
query_insert_score,所有對score表的插入操作
query_sel_info,各類信息表的查詢
query_sel_score,對成績表的查詢
從日志中提取到操作特征后,計算出訓(xùn)練數(shù)據(jù)中各個特征的下四分位值a_25作為我們的判定閾值。即有75%的數(shù)據(jù)是大于這個a_25;同時防止該特征出現(xiàn)的很少例如操作數(shù)據(jù)庫的特征,絕大部分數(shù)據(jù)都會等于0此時,對于這種情況我們手動設(shè)置該閾值為1。如果用戶在該屬性上大于閾值就賦予對應(yīng)的標簽于是就實現(xiàn)了用戶畫像。

最后我還提出了使用用戶操作特征的來識別危險的用戶,具體做法是訓(xùn)練一個機器學(xué)習(xí)模型讓模型學(xué)習(xí)區(qū)分各種類型的用戶,這屬于多分類模型,如果遇到異常的用戶行為,由于與以往該用戶的行為有區(qū)別,模型便會將其判斷出來時可疑的用戶。
例如在下面的測試中,將學(xué)生端的insert_score屬性改為了1,模擬學(xué)生端用戶修改了成績表,這是與異常操作,最后我們的模型確實能夠識別出來。



# 開源之夏個人隨訪
--項目經(jīng)歷--
OSPP:請簡單介紹一下自己吧。
唐武國:大家好,我叫唐武國,是中南大學(xué)計算機學(xué)院的一名研二學(xué)生,這是我第一次參與開源之夏的活動,也是第一次參加開源項目。
OSPP:你是如何了解并參與到開源之夏的?你認為完成一個項目任務(wù)的關(guān)鍵是什么?
唐武國:其實最早我是在大四的時候從同學(xué)的口中了解到有開源之夏這個活動的,覺得這個活動形式非常好并決定挑戰(zhàn)一下自己,但比較可惜的是當時已經(jīng)過了報名時間,所以我一直都有關(guān)注OSPP的官網(wǎng),并很早就將報名的時間記錄到日程中。也算是比較幸運,第一次申請就成功了。
相比OSPP中的各種開源項目都是“大”工程,自己以往的那些項目只能算是小demo,自己只管把功能實現(xiàn)了而沒有考慮實際用戶體驗、性能和安全性。但正這些小項目也為我積累了許多的經(jīng)驗和試錯機會,我也從中體會到團隊合作的樂趣。我印象最深的是和隊友做一個尋找走失老人的救援指揮系統(tǒng),這是我第一次參與比較大的項目了,我們需要在幾個月的時間內(nèi)做好用于報案和救援的微信小程序,給隊長指揮調(diào)度的網(wǎng)頁應(yīng)用。通過看教程、文檔快速入門小程序開發(fā)和地圖API的使用,最后經(jīng)過與隊友的共同努力還是順利提交了作品。


--參與開源--
OSPP:你眼中的開源是什么?
唐武國:在我看來,開源組織和開源貢獻者都是很了不起的。通過開源可以集中全球開發(fā)者的力量來做好一個項目,這件事聽起來就讓人激動。我在參加OSPP的過程中也了解到中國的開發(fā)者也在努力貢獻自己的成果,領(lǐng)導(dǎo)開發(fā)了許多優(yōu)秀的項目:openEuler、鴻蒙操作系統(tǒng),openGauss數(shù)據(jù)庫等等。
OSPP:結(jié)合你自身經(jīng)歷,你認為高校學(xué)生參與開源有必要嗎?學(xué)生會把參與開源作為一種優(yōu)先級比較高的選擇嗎?
唐武國:在我看來高校學(xué)生可能還是不會把參加開源項目作為優(yōu)先選擇,我身邊的同學(xué)還是實習(xí)、參加競賽的比較多。可能大多人知道開源這回事但并不知如何開始,也害怕參與開源項目的時候沒有人指導(dǎo)。而剛好OSPP就提供了這樣一個平臺,對接了開源組織、導(dǎo)師、學(xué)生三方,還有獎勵機制所以我還是很推薦大家參加的,我自己也希望能夠繼續(xù)參與開源之夏的活動。
--收獲與寄語--
OSPP:有什么話想對計劃參加開源之夏活動以及開源的學(xué)弟學(xué)妹們說?
唐武國:參與開源真的是件很有意義的事,當你的名字出現(xiàn)在開源項目的貢獻者名單中是很驕傲的。在整個參與這次開源的項目中,我確實收獲了很多:了解如何參與開源、國產(chǎn)的開源數(shù)據(jù)庫、如何構(gòu)建用戶畫像等等,這種收獲不僅是具體的知識也是學(xué)習(xí)能力的提升。在我開發(fā)的過程中也有幸能夠得到與來自華中科大的湯學(xué)明老師、李浩然學(xué)長的悉心指導(dǎo),讓我不斷改進代碼,順利完成項目要求。最后,可能你還是會擔(dān)心項目太難、自己的能力不夠。但相信我只要你肯投入一定的時間,你也可以的。

[1]https://www.heywhale.com/mw/project/5ed9c13fb772f5002d6dc07c
[2]https://www.heywhale.com/mw/project/64001b982bed561a3a9b9edc
[3]https://www.kaggle.com/code/liamwoodly/eda-prediction
[4]https://dl.ccf.org.cn/article/articleDetail.html?type=qkwz&_ack=1&id=5460231971866624
END
專欄編輯:大夢
校對:校大山、唐武國
制圖:GoodWhite

專欄投稿請聯(lián)系開源小助手:kaiyuanzhixia 或?qū)诰庉嫞篐ungryfish34(備注“專欄投稿”加速通過),或填寫下方專訪信息收集問卷。
