项目经验分享|openGauss 刘彤:尽情参与,享受开源的乐趣和机遇

2023年 9月 26日 68.3k 0

项目基本信息

项目名称:openGauss 运维辅助工具

项目导师:戴明明

项目描述:基于 GO 或者 Python,对常用的 openGauss 管理和运维进行封装,通过封装后的命令,可以快速执行操作。

项目链接:

https://summer-ospp.ac.cn/org/prodetail/23c9e0545

项目经验分享

1. 项目描述

开发封装工具可以简化数据库管理和运维操作,通过简单的命令就能够执行常见的 openGauss 管理任务,提供清晰的分类、详细的文档说明和持续的更新,使复杂的任务变得更加容易执行,减少错误风险,增强用户友好性,同时可以快速部署和扩展,适应不断变化的需求,对于实现 openGauss 管理具有现实意义。

2. 项目实现思路

首先需要进行数据库连接配置文件设置,确保配置文件的可管理性和易扩展性,将配置文件放置在一个统一的位置,以确保用户可以正确连接到数据库,随后通过执行系统命令连接到 openGauss 数据库并执行 SQL 命令。它接受一个 SQL 命令作为参数,构建完整的命令,并使用 Python 的 subprocess 模块执行并返回执行命令的结果。

def execute_database_command(command):
"""
连接到OpenGauss数据库并执行命令.
:param command: string, SQL命令
:return:
string, 执行命令的结果
"""
# 构建连接命令
connect_command = f'gsql -d {database} -p {port}'
# 构建完整命令
full_command = f'{connect_command} -c "{command};"'
# 执行命令并获得输出
output = subprocess.getoutput(full_command)
return output

随后梳理常用的运维和优化功能,如参数修改、性能查看、故障处理等分类,整理相关的命令或 SQL 语句,需要深入了解数据库管理的常见任务和需求,并通过合适的资源整理出相关的命令或 SQL 语句。按照要求实现相关功能,如查看对象大小、创建快照、查看长 SQL、查看数据库负载等。

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 模块对命令执行的输出进行格式化处理,提高输出结果的可读性和可视化程度,将文本数据以表格的形式呈现,使数据更加清晰和易于理解。

def pretty_print(str):
"""
使用prettytable格式化输出结果.
:param str: string, 执行命令获取的结果
:return:
string,输出结果
"""
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. #设置左对齐
print(table)

最后考虑错误处理和容错机制。例如,当用户使用未定义的标识符或配置错误的 SQL 时,系统应该给出相应的错误提示,避免执行不正确的 SQL 语句或命令。

# 开源之夏个人随访

参与开源之夏和开源

OSPP:请简单介绍一下自己。

刘彤:我叫刘彤,来自山东青岛,是上海海洋大学计算机技术专业的一名学生。

OSPP:请问你是如何了解到并决定参与开源之夏活动的?在项目申请的过程中你都做过哪些准备?

刘彤:通过一位同学的介绍,我首次了解到 GSoC,但是遗憾的是,知道的时候已经临近活动结束日期,所以没有参与。在深入了解这个活动之后,发现了国内举办的开源之夏活动,可以有机会参与开源活动,于是就开始准备。

在项目申请的过程中,首先积极地寻找适合我的开源组织,选择了一个感兴趣的课题。确定课题后,开始与社区成员建立联系,了解他们的需求和期望。然后研究所选项目的描述和要求,阅读相关文档,尝试理解项目的核心目标和所需的技术栈。最后,认真编写项目申请书,提交申请,获得参与活动的机会。

–参与开源社区–

OSPP:介绍一下你眼中的 openGauss 社区吧。

刘彤:openGauss 社区是一个充满热情、技术高超的团队,不仅在数据库领域有深厚的知识,还乐于分享和合作,让人感到温暖和欢迎,无论是开发者还是用户,都能在这里找到学习和成长的机会。

OSPP:你觉得在开源社区中进行开发工作是一种什么体验?

刘彤:在开源社区中进行开发工作是一种充满挑战与满足感的体验。它提供了机会贡献代码、学习新技术、与其他开发者合作、解决问题,能够丰富个人技能。

OSPP:在开发过程中,社区和导师为你提供了怎样的帮助?

刘彤:在开发过程中,导师在整个项目期间起到了关键的指导作用,与我进行定期的会议,帮我助制定项目计划,提供深入的技术见解,并在代码审查和问题解决过程中提供解决反馈,鼓励我独立思考和解决问题,同时也为我提供资源和文档,以支持我的项目进展。在社区中可以获得问题反馈和建议,能够帮助我了解项目需求,解决技术挑战。

OSPP:参与开源之夏活动以后让你对开源和开源社区有了什么新的理解?之后是否打算继续参与开源社区或开源项目?为什么?

刘彤:我计划继续参与开源社区和开源项目。这次的开源之夏经历让我深刻认识到了开源的真正价值,也提供了很多有趣的学习和协作机会。我相信持续参与开源社区将帮助我不断提升技术能力,认识到更广泛的开发者社区,一起解决挑战。

收获与寄语

OSPP:以你所在高校为例,你觉得高校学生开源参与度高吗?开源对高校学生来说有什么意义?

刘彤:开源参与度可能受学术压力、缺乏意识、缺少机会等因素的影响不太高。然而,开源仍具有重要意义,可以为学生提供经验,发展技能并了解实际项目的运作方式。

OSPP:有什么话想对打算参加开源之夏活动的学弟学妹们说?

刘彤:这是个绝佳的机会,可以深入了解开源社区,积累项目经验。不要害怕挑战,勇敢踏出第一步,会发现这个经历会对个人职业和技术产生深远影响。在这里,将有机会结交志同道合的朋友,学到很多实际的技能,还可以为有趣的项目做出贡献。最重要的是,不要害怕出错或提问题,因为开源社区是一个互帮互助的地方,大家都非常友善。所以,尽情地参与,享受这个充满乐趣和机遇的旅程吧!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论