項目經(jīng)驗分享|openGauss 劉彤:盡情參與,享受開源的樂趣和機遇

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

#?關(guān)于 openGauss
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)師:戴明明
項目描述:基于 GO 或者 Python,對常用的 openGauss 管理和運維進行封裝,通過封裝后的命令,可以快速執(zhí)行操作。
項目鏈接:
https://summer-ospp.ac.cn/org/prodetail/23c9e0545
# 項目經(jīng)驗分享
1. 項目描述
開發(fā)封裝工具可以簡化數(shù)據(jù)庫管理和運維操作,通過簡單的命令就能夠執(zhí)行常見的 openGauss 管理任務(wù),提供清晰的分類、詳細的文檔說明和持續(xù)的更新,使復(fù)雜的任務(wù)變得更加容易執(zhí)行,減少錯誤風(fēng)險,增強用戶友好性,同時可以快速部署和擴展,適應(yīng)不斷變化的需求,對于實現(xiàn) openGauss 管理具有現(xiàn)實意義。
2. 項目實現(xiàn)思路
首先需要進行數(shù)據(jù)庫連接配置文件地設(shè)置,確保配置文件的可管理性和易擴展性,將配置文件放置在一個統(tǒng)一的位置,以確保用戶可以正確連接到數(shù)據(jù)庫,隨后通過執(zhí)行系統(tǒng)命令連接到 openGauss 數(shù)據(jù)庫并執(zhí)行 SQL 命令。它接受一個 SQL 命令作為參數(shù),構(gòu)建完整的命令,并使用 Python 的 subprocess 模塊執(zhí)行并返回執(zhí)行命令的結(jié)果。
def execute_database_command(command):
? ?"""
? ?連接到OpenGauss數(shù)據(jù)庫并執(zhí)行命令.
? ?:param command: string, SQL命令
? ?:return:
? ? ? ?string, 執(zhí)行命令的結(jié)果
? ?"""
? ?# 構(gòu)建連接命令
? ?connect_command = f'gsql -d {database} -p {port}'
? ?# 構(gòu)建完整命令
? ?full_command = f'{connect_command} -c "{command};"'
? ?# 執(zhí)行命令并獲得輸出
? ?output = subprocess.getoutput(full_command)
? ?return output
隨后梳理常用的運維和優(yōu)化功能,如參數(shù)修改、性能查看、故障處理等分類,整理相關(guān)的命令或 SQL 語句,需要深入了解數(shù)據(jù)庫管理的常見任務(wù)和需求,并通過合適的資源整理出相關(guān)的命令或 SQL 語句。按照要求實現(xiàn)相關(guān)功能,如查看對象大小、創(chuàng)建快照、查看長 SQL、查看數(shù)據(jù)庫負載等。
def all_tables_def(show_help=False):
? ?"""
? ?查看所有表的定義語句, 并通過prettyTable格式化輸出.
? ?:param show_help: boolean, 是否顯示幫助信息
? ?:return:
? ? ? ?若show_help為true,返回命令幫助
? ?"""
? ?if show_help:
? ? ? ?return "\n"+ "命令說明:".rjust(30)+"查看所有表的定義語句"
? ?command = f"SELECT pg_get_tabledef(c.oid) " \
? ? ? ? ? ? ?f"FROM pg_catalog.pg_class c " \
? ? ? ? ? ? ?f"WHERE c.relkind='r' AND c.relname NOT LIKE 'pg_%' AND c.relname NOT LIKE 'sql_%' " \
? ? ? ? ? ? ?f"ORDER BY c.relname;"
? ?output = execute_database_command(command)
? ?pretty_print(output)
接下來通過 prettytable 模塊對命令執(zhí)行的輸出進行格式化處理,提高輸出結(jié)果的可讀性和可視化程度,將文本數(shù)據(jù)以表格的形式呈現(xiàn),使數(shù)據(jù)更加清晰和易于理解。
def pretty_print(str):
? ?"""
? ?使用prettytable格式化輸出結(jié)果.
? ?:param str: string, 執(zhí)行命令獲取的結(jié)果
? ?:return:
? ? ? ?string,輸出結(jié)果
? ?"""
? ?rows = []
? ?for line in str.splitlines():
? ? ? ?if "|" in line:
? ? ? ? ? ?line = "dummy_clo | " + line
? ? ? ? ? ?rows.append([val.strip() for val in line.split("|")[1:]])
? ?if len(rows) == 0:
? ? ? ?print("\033[31m" + str + "\033[0m")
? ? ? ?return
? ?table = PrettyTable()
? ?i = 1
? ?for row in rows:
? ? ? ?if i == 1:
? ? ? ? ? ?row = [s.upper() for s in row]
? ? ? ? ? ?table.field_names = row
? ? ? ?else:
? ? ? ? ? ?table.add_row(row)
? ? ? ?i = i + 1
? ?table.align = "l" ? #設(shè)置左對齊
? ?print(table)
最后考慮錯誤處理和容錯機制。例如,當(dāng)用戶使用未定義的標識符或配置錯誤的 SQL 時,系統(tǒng)應(yīng)該給出相應(yīng)的錯誤提示,避免執(zhí)行不正確的 SQL 語句或命令。
# 開源之夏個人隨訪
--參與開源之夏和開源--
OSPP:請簡單介紹一下自己。
劉彤:我叫劉彤,來自山東青島,是上海海洋大學(xué)計算機技術(shù)專業(yè)的一名學(xué)生。
OSPP:請問你是如何了解到并決定參與開源之夏活動的?在項目申請的過程中你都做過哪些準備?
劉彤:通過一位同學(xué)的介紹,我首次了解到 GSoC,但是遺憾的是,知道的時候已經(jīng)臨近活動結(jié)束日期,所以沒有參與。在深入了解這個活動之后,發(fā)現(xiàn)了國內(nèi)舉辦的開源之夏活動,可以有機會參與開源活動,于是就開始準備。
在項目申請的過程中,首先積極地尋找適合我的開源組織,選擇了一個感興趣的課題。確定課題后,開始與社區(qū)成員建立聯(lián)系,了解他們的需求和期望。然后研究所選項目的描述和要求,閱讀相關(guān)文檔,嘗試理解項目的核心目標和所需的技術(shù)棧。最后,認真編寫項目申請書,提交申請,獲得參與活動的機會。
--參與開源社區(qū)--
OSPP:介紹一下你眼中的 openGauss 社區(qū)吧。
劉彤:openGauss 社區(qū)是一個充滿熱情、技術(shù)高超的團隊,不僅在數(shù)據(jù)庫領(lǐng)域有深厚的知識,還樂于分享和合作,讓人感到溫暖和歡迎,無論是開發(fā)者還是用戶,都能在這里找到學(xué)習(xí)和成長的機會。
OSPP:你覺得在開源社區(qū)中進行開發(fā)工作是一種什么體驗?
劉彤:在開源社區(qū)中進行開發(fā)工作是一種充滿挑戰(zhàn)與滿足感的體驗。它提供了機會貢獻代碼、學(xué)習(xí)新技術(shù)、與其他開發(fā)者合作、解決問題,很能夠豐富個人技能。
OSPP:在開發(fā)過程中,社區(qū)和導(dǎo)師為你提供了怎樣的幫助?
劉彤:在開發(fā)過程中,導(dǎo)師在整個項目期間起到了關(guān)鍵的指導(dǎo)作用,與我進行定期的會議,幫我助制定項目計劃,提供深入的技術(shù)見解,并在代碼審查和問題解決過程中提供解決反饋,鼓勵我獨立思考和解決問題,同時也為我提供資源和文檔,以支持我的項目進展。在社區(qū)中可以獲得問題反饋和建議,能夠幫助我了解項目需求,解決技術(shù)挑戰(zhàn)。
OSPP:參與開源之夏活動以后讓你對開源和開源社區(qū)有了什么新的理解?之后是否打算繼續(xù)參與開源社區(qū)或開源項目?為什么?
劉彤:我計劃繼續(xù)參與開源社區(qū)和開源項目。這次的開源之夏經(jīng)歷讓我深刻認識到了開源的真正價值,也提供了很多有趣的學(xué)習(xí)和協(xié)作機會。我相信持續(xù)參與開源社區(qū)將幫助我不斷提升技術(shù)能力,認識到更廣泛的開發(fā)者社區(qū),一起解決挑戰(zhàn)。
--收獲與寄語--
OSPP:以你所在高校為例,你覺得高校學(xué)生開源參與度高嗎?開源對高校學(xué)生來說有什么意義?
劉彤:開源參與度可能受學(xué)術(shù)壓力、缺乏意識、缺少機會等因素的影響不太高。然而,開源仍具有重要意義,可以為學(xué)生提供經(jīng)驗,發(fā)展技能并了解實際項目的運作方式。
OSPP:有什么話想對打算參加開源之夏活動的學(xué)弟學(xué)妹們說?
劉彤:這是個絕佳的機會,可以深入了解開源社區(qū),積累項目經(jīng)驗。不要害怕挑戰(zhàn),勇敢踏出第一步,會發(fā)現(xiàn)這個經(jīng)歷會對個人職業(yè)和技術(shù)產(chǎn)生深遠影響。在這里,將有機會結(jié)交志同道合的朋友,學(xué)到很多實際的技能,還可以為有趣的項目做出貢獻。最重要的是,不要害怕出錯或提問題,因為開源社區(qū)是一個互幫互助的地方,大家都非常友善。所以,盡情地參與,享受這個充滿樂趣和機遇的旅程吧!
END
專欄編輯:大夢
校對:校大山、劉彤
制圖:GoodWhite

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