GreptimeDB 于今年 11 月 15 日正式开源,一个月以来已经合并了来自 10 位社区贡献者的 21 个 PR。我们算了一下,目前公司外社区贡献占整个项目将近 25%,非常高产。
此文将列举社区正在解决的两个 good first issues,同时介绍我们的特性进展。
整体介绍
图片 不到四周时间,GreptimeDB 社区收到很多的关注和强有力的支持,其中有很多来自世界各地的开发小伙伴。他们有的才华横溢,有的元气满满,这令我们惊喜,也让我们更加坚定了开源的初心。
💪🏻《双周精选》将以两周一更新的形式,通过简短的内容,为大家提供我们产品和社区的进展。希望以此,能让社区成员和朋友们更好地了解项目,让更多的同道中人参与进来,一起建设 GreptimeDB。
👫 本文还会有一些我们 issue 池里面的例子,对开源新手比较合适。大家如果对内容感兴趣,一定不要怀疑自己的能力,即刻加入我们吧!
社区贡献者名单
以上各位的贡献,慷慨有义,彰显实力,非常感谢。有了你们,以及跟你们一样有开源精神的朋友,GreptimeDB 一定会越来越好。
PR 亮点
db#694
取消了单机部署模式下 frontend
与 datanode
的 gRPC 调用,避免了无谓的传输和单机部署模式中数据的序列化和反序列化,减少 frontend
调用 datanode
的额外开销。(来自 @MichaelScofield)
db#641
MySQL 和 PostgreSQL 支持 TLS 是十分有必要的。另外与 HTTP 或 gRPC 不同,数据库协议有自己的 TLS 握手过程,因此我们需要在数据库这一层来实现支持 TLS。(来自 @SSebo)
db#656
GreptimeDB 使用了 OpenDAL 作为对象存储的 API,理论上来讲,能轻易支持存储到 S3。(来自 @killme2008)
db#558
GreptimeDB 支持了 DESC
语法,可以通过 DESC[RIBE] TABLE <name>;
来查询表的基本结构以及相应的默认值。(来自 @morigs)
新鲜事
gtctl 有版本更新,支持自定义镜像仓库:https://github.com/GreptimeTeam/gtctl/releases/tag/v0.1.0-alpha.7
正在开发 GreptimeDB 的 dashboard,目前完成基础 UI,欢迎围观👇🏻:https://github.com/GreptimeTeam/dashboard
Good first issue
在开源项目里面,如果你看到有个 issue 带了 good first issue 的标签,那往往说明这是为这个社区做贡献最好的开始的地方,而一般开源项目都特意为社区新贡献者们提供了很多 good first issues,我们也不例外。
在双周精选的这部分,我们会来列举一个社区用户已经解决的 good first issue 以及一个期待被解决的 issue。
db#667 简化 TIME INDEX 关键词语法
在我们创建一个表时,比如:
CREATE TABLE system_metrics (
host STRING,
idc STRING,
ts TIMESTAMP NOT NULL,
PRIMARY KEY(host, idc),
TIME INDEX(ts)
);
其中有两个特别的约束,PRIMARY KEY
是常见的主键约束,而 TIME INDEX
在 GreptimeDB 中是特别的时间戳约束。
这个 issue 是期望可以将上述建表语句中 TIME INDEX
约束做一个简化,原本需要两行的描述改为一行:
ts TIMESTAMP TIME INDEX,
通过这样做,还能满足:
不再需要写
NOT NULL
约束,TIME INDEX
即带有NOT NULL
约束;不再需要另写一行
TIME INDEX
约束;
当然,为了保持兼容,新的语法与老的语法 GreptimeDB 都需要支持。
在这个 issue 提出来的当天,即被社区贡献者 @SSebo 认领,很快在第四天就提交了 Pull Request 并在建议优化后被合并,非常高效!这里特别感谢 @SSebo, 让 GreptimeDB 的建表语法又简化了一小步。图片图片图片
db#602 创建数据库内部健康指标的系统表
对于一个系统来讲,可以监控自己的健康状态非常重要,因此 GreptimeDB 也希望有内置的方法可以展示当前的运行情况,而最直接的实现方式就是为内部的 metrics 创建默认的系统表,类似 Databend or ClickHouse 的做法。
用户可以通过对 metrics 表做简单的 select
查询获取当前 DB 的重要运行状态。有了 metrics 表,也可以通过支持 SQL 的可视化工具或者 dashboard(比如 Grafana )来实时展示系统的运行情况。
为了完成这个功能,可能需要做以下几个事:
在
datanode
模块,创建一个叫metrics
的表, 表的 schema 至少需要有metric
,value
和description
,如果有其他你认为有意义的列,也可以加入。同时将它注册为默认的 catalog, 类似ScriptsTable
的做法;为
metrics
表实现select
功能。在这里,不用真正的将指标存储到数据库中,可以通过调用PROMETHEUS_HANDLE
的render()
函数,将获得的结果(Prometheus lines)格式化为表格输出;在
frontend
模块,创建和datanode
模块中一样的 metrics 表。但注意,和DistTable
不同,metrics
表不做分布式查询。
在实现过程中一定还会有其他的细节疑惑,非常欢迎大家来到这个 issue #602 讨论,也期待你的认领。
关于 Greptime
Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。
欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~
Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack