时序数据库能做什么|用 GreptimeDB 进行程序员键盘行为分析,最高频按键竟然是它
前一段时间 GreptimeDB 发布了 v0.1 的版本,虽然还很早期,但已经是一个比较可靠并且可以在实际场景中应用的数据库了。
是的,你已经是一个成熟的数据库,可以去做一些有意义的事情了。
我们都知道,时序数据主要在物联网以及监控领域产生,而且数据量通常很大且非常高频。(对于时序数据和时序数据库不了解的同学,可以跳转这里先读一下科普文章。)那么我一个普通程序员,每天就是坐在工位上敲键盘,哪里能接触到能产生高频海量数据的场景呢?
哎,等一下,敲键盘好像就是在产生时序数据,我也有点好奇每天到底会按多少次按键,以及哪些按键使用的频率更高一些。经常有梗图说程序员每天主要都在用 ctrl+C 和 ctrl+V,那程序员们到底每天会用多少次复制粘贴呢?
现在,有了 v0.1 版本的数据库,我们只需要写一个脚本,再配合使用 GreptimeDB 统计一下也许就能获得答案。
下载连接数据库⏬️
首先是在本地安装 GreptimeDB[1],我们最近刚刚上线了下载页,你可以在官网[2]下载编译好的二进制版本,然后使用 greptime standalone start
启动一个单机版,不出意外的话,你应该可以看到:
我们使用 4000 端口的 HTTP 接口对数据库进行请求,只要发送 SQL 语句即可,具体语法参见:https://docs.greptime.com/user-guide/supported-protocols/http-api
编写脚本记录信息⌨️
比如我们在命令行中输入 curl http://localhost:4000/v1/sql -d "sql=CREATE TABLE keymaster(key STRING, ts TIMESTAMP TIME INDEX) "
就可以创建一个新的表,用于记录按键信息。
接下来就是如何记录按键的信息,这里就用我比较熟悉的 Node.js 来解决了。
这里我把多键的情况提取了出来,用来统计所有组合键的频率。
🔍查询分析
接下来我用了 xbar[3] 运行了一个定时脚本输出查询结果,当然,你们用其他的任何方式运行查询语句都可以。比如 SELECT key , COUNT(*) as times FROM keymaster WHERE LENGTH(key) < 2 GROUP BY key ORDER BY times DESC limit 10
可以查询点击最多的 10 个单字母按键;
SELECT key , COUNT(*) as times FROM keymaster WHERE key like '%+%' GROUP BY key ORDER BY times DESC limit 10
查询使用最多的 10 个组合键。
数据结果🤩
这个是在记录了一个多礼拜以后的累积数据,从这个结果可以获得很多有趣的结论:
⌨️ 每天平均按键 10000 次左右
🔙 有超过十分之一的按键是退格
📝 使用最多的字母是 i,比第二名 e 多出近 20%,应该是因为我日常使用 vim
🪟 大量使用 cmd+w 关闭窗口,因为我是一个没有囤积标签页习惯的人
💪 虽然开启了 auto save,但是 cmd+s 好像已经形成了肌肉记忆
🆒 cmd+V 比 cmd+C 多出近 20%,因为复制后至少有一次粘贴。
🔛 复制粘贴果然是程序员高频使用的组合键
你们可能发现前面的截图还有一个 APM (Actions Per Minute),这是我用输入时间实时计算后存入另一张表的数据。
📈结果可视化
你可以在浏览器输入:http://localhost:4000/dashboard
打开控制台,输入 SELECT * FROM apm ORDER BY ts DESC LIMIT 1800
就可以查看可视化的数据图表。
Dashboard[4]是 Greptime 团队开源的另一个项目,用于帮助用户更方便地使用 GreptimeDB。Dashboard 已经被集成到 GreptimeDB 的发行版中,运行数据库后即可以在本地启动使用。
这是最近 30 分钟的每分钟平均输入数(APM,Actions Per Minute),我这个手速还可以吧。
哦,你在本地是看不到的这个数据,因为你还没有建立 APM 表,至于如何操作,相信看完前文以后,写一段统计脚本对于你来说应该很简单了吧。
如果在使用 GreptimeDB 以及 Dashboard 的过程中遇到任何问题,或者有建议欢迎为我们的项目提 issue 或者 pr。
这是一个非常简单的例子,也只用到了 GreptimeDB 诸多能力的一小部分,而且这个数据量也太小了,别说是一个人输入,就算是十个人一起用脸滚键盘,GreptimeDB 可以轻松接住。
所以如果大家有更大更多数据的场景,一定要试用一下我司的 GreptimeDB。
参考
[1] https://github.com/GreptimeTeam/greptimedb
[2] https://greptime.com/download
[4] https://github.com/GreptimeTeam/dashboard
评论