暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Gauss松鼠会 2023-09-27
273

开源之夏

项目经验分享


2023 #05





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

本期项目经验分享来自 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

        本文转自:开源之夏OSPP官微

        文章转载自Gauss松鼠会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论