写点什么

时序数据库能做什么|用 GreptimeDB 进行程序员键盘行为分析,最高频按键竟然是它

作者:Greptime
  • 2023-04-10
    美国
  • 本文字数:2098 字

    阅读完需:约 7 分钟

时序数据库能做什么|用 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 来解决了。


const axios = require('axios')const qs = require('qs')const { GlobalKeyboardListener } = require('node-global-key-listener')const v = new GlobalKeyboardListener()//Log every key that's pressed.v.addListener(function (e, down) {  if (e.state === 'DOWN') {    let metaKey = Object.entries(down)      .filter(([key, value]) => value === true && key.length > 1 && !/LOCK/.test(key))      .map(([key, value]) => key)
if (e.name.length === 1) metaKey.push(e.name) metaKey = metaKey.join('+') saveKeypressEvent(metaKey) console.log(${metaKey}) }})
const saveKeypressEvent = async (metaKey) => { try { const response = await axios.post( 'http://127.0.0.1:4000/v1/sql?db=public', qs.stringify({ sql: INSERT INTO keymaster(key, ts) VALUES('${metaKey}', ${new Date().valueOf()}), }) ) } catch (error) { console.log(error) }}
复制代码


这里我把多键的情况提取了出来,用来统计所有组合键的频率。

🔍查询分析

接下来我用了 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


[3] https://xbarapp.com/


[4] https://github.com/GreptimeTeam/dashboard


用户头像

Greptime

关注

专注于 Infra 技术分享 2022-09-23 加入

分布式、高性能、存储计算分离的开源云原生时序数据库

评论

发布
暂无评论
时序数据库能做什么|用 GreptimeDB 进行程序员键盘行为分析,最高频按键竟然是它_云原生_Greptime_InfoQ写作社区