欢迎光临散文网 会员登陆 & 注册

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

2023-09-26 16:59 作者:开源之夏  | 我要投稿


开源之夏个人专访与项目经验分享持续开放中,欢迎已从开源之夏毕业或正在参与开源之夏活动的学生、导师一同加入专访行动,扫描文末二维码填写专访问卷,与大家分享你眼中的开源之夏!

本期项目经验分享来自 openGauss 社区中选学生——刘彤,在开源之夏 2023 中承担的项目是 openGauss 运维辅助工具

# 关于 openGauss

openGauss 是一款开源关系型数据库管理系统,采用木兰宽松许可证 v2 发行。openGauss 内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。同时 openGauss 也是一个开源的数据库平台,鼓励社区贡献、合作。

官网:https://opengauss.org/zh/

# 项目基本信息

项目名称: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.align = "l"   #设置左对齐
    print(table)

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


# 开源之夏个人随访

--参与开源之夏和开源--

OSPP请简单介绍一下自己。

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

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

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

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

--参与开源社区--

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

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

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

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

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

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

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

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

--收获与寄语--

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

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

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

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

END

专栏编辑:大梦

校对:校大山、刘彤

制图:GoodWhite

专栏投稿请联系开源小助手:kaiyuanzhixia 或专栏编辑:Hungryfish34(备注“专栏投稿”加速通过),或填写下方专访信息收集问卷。


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

分享到微博请遵守国家法律