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

2023/09/26 18:31
阅读数 84
AI总结

开源之夏

项目经验分享


2023 #05





# 项目基本信息

项目名称: open Gauss 运维辅助工具
项目导师: 戴明明
项目描述: 基于 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有什么话想对打算参加开源之夏活动的学弟学妹们说?
刘彤 这是个绝佳的机会,可以深入了解开源社区,积累项目经验 不要害怕挑战,勇敢踏出第一步 ,会发现这个经历会对个人职业和技术产生深远影响。 在这里,将有机会 结交志同道合的朋友,学到很多实际的技能,还可以为有趣的项目做出贡献。 最重要的是,不要害怕出错或提问题,因为开源社区是一个互帮互助的地方,大家都非常友善。 所以,尽情地参与,享受这个充满乐趣和机遇的旅程吧!

本文分享自微信公众号 - openGauss(openGauss)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部