metabase-quick 小结

对 metabase-quick 这个工具进行简单小结。

简单来说,metabase-quick 是个命令行工具,使用 Metabase 的 UI,写 SQL分析本地的 csv 文件,并进行可视化。功能与 Metabase 一样,设置上简化了。

肝了几天,熬了几个晚上,终于有了 v0.1 MVP 版本。

XUJiahua/metabase-quick

使用

Releases 页面下载自己平台的二进制文件。

Releases · XUJiahua/metabase-quick

$ ./metabase-quick-darwin dataset/iris.csv
INFO: load file dataset/iris.csv in 0.00393911 seconds
You can visit database engine via below command:
mysql --host=127.0.0.1 --port=53045 default -u root

INFO: NewConnection: client 1
open http://localhost:53046

incoming query: select * from iris

会自动打开网页,点击 Native query。

../../images/Untitled-7e93bf42-098c-414a-bf8f-18fc6c03da11.png

使用 redis-benchmark 压测自建的 kv 存储引擎

给自建 kv 存储引擎做性能测试不难,使用 redis-benchmark 压测的目的是,测试结果能与 redis-server 的结果做横向对比。

redis-benchmark

redis-benchmark 支持如下指令的 benchmark。其中 GET/SET 指令可用于 kv 存储引擎的压测。

redis-benchmark -q
PING_INLINE: 102669.41 requests per second, p50=0.247 msec
PING_MBULK: 102880.66 requests per second, p50=0.231 msec
SET: 101936.80 requests per second, p50=0.239 msec
GET: 101626.02 requests per second, p50=0.239 msec
INCR: 102249.49 requests per second, p50=0.239 msec
LPUSH: 100603.62 requests per second, p50=0.255 msec
RPUSH: 101626.02 requests per second, p50=0.255 msec
LPOP: 102354.15 requests per second, p50=0.255 msec
RPOP: 102249.49 requests per second, p50=0.255 msec
SADD: 101522.84 requests per second, p50=0.247 msec
HSET: 100603.62 requests per second, p50=0.255 msec
SPOP: 102249.49 requests per second, p50=0.247 msec
ZADD: 102564.10 requests per second, p50=0.255 msec
ZPOPMIN: 103412.62 requests per second, p50=0.247 msec
LPUSH (needed to benchmark LRANGE): 94607.38 requests per second, p50=0.263 msec
LRANGE_100 (first 100 elements): 27964.21 requests per second, p50=0.855 msec
LRANGE_300 (first 300 elements): 11193.19 requests per second, p50=2.135 msec
LRANGE_500 (first 450 elements): 7649.94 requests per second, p50=3.159 msec
LRANGE_600 (first 600 elements): 5884.78 requests per second, p50=4.103 msec
MSET (10 keys): 93283.58 requests per second, p50=0.423 msec

redcon

Redis compatible server framework for Go.

从 Notion 导出 markdown 到 hugo 项目

目的

好久没更新博客了,最近半年使用 Notion,体验很棒。

之前写博客的过程:使用 Typora 编辑 markdown,使用 Hugo 生成静态页面,上传到 github 使用 github pages serving。参考:

Github pages重新开始:使用Hugo、Typora

怎么把我 Notion 中的文章同步到我的博客呢。这是本文目的。

主要是写了一个 notion-mk 的程序将 notion 文章导出到 hugo 工作目录。后面的工作与之前保持一致。

notion -- notion-mk(todo) --> hugo directory 
																		-- hugo generate --> static html/js/css

WIP

代码如下:

XUJiahua/notion-md

功能

  • Download images
  • Notion extract to markdown
  • markdown hugo compatiable
  • image location?
  • remove title from markdown, now #…
  • support category
  • support tag
  • table of content at the beginning

使用

将要发布的文档添加到这个 list 页面

pandasql库解析

对 Pandas 库没有原生 SQL 支持表示遗憾,今天看到这么一个库 https://github.com/yhat/pandasql

它的思路比较简单粗暴,先把 pandas Dataframe 存储到一个关系型数据库(sqlite/postgresql),最后 SQL query 的结果其实是查询关系型数据库返回的结果,封装成 Dataframe 来呈现。其中数据库操作使用 sqlalchemy 这个库。

学到的知识点:locals(),globals() 这两个方法。

The globals() method returns the dictionary of the current global symbol table. https://www.programiz.com/python-programming/methods/built-in/globals

The locals() method updates and returns a dictionary of the current local symbol table. https://www.programiz.com/python-programming/methods/built-in/locals

如下代码,meat 是一个 Dataframe 变量,为何 SQL query 里能直接引用这个变量。

$ python
>>> from pandasql import sqldf, load_meat, load_births
>>> pysqldf = lambda q: sqldf(q, globals())
>>> meat = load_meat()
>>> print pysqldf("SELECT * FROM meat LIMIT 10;").head()

因为可以从 globals() 里通过符号 meat 拿到这个变量。

Docker/Kubernetes 系列目录

不定时更新中。

Docker

基础

  1. Docker 入门,官方 get started 边看边实践
  2. Docker 如何改变软件开发协作
  3. Dockerfile 最佳实践
  4. Docker Network小结
  5. Docker 日志驱动小结
  6. 使用 fluentd 收集 Docker 日志

进阶

  1. Linux namespace 介绍
  2. 使用 ip/iptables 命令模拟 Docker bridge 网络
  3. Linux cgroup 介绍
  4. Docker 中 namespace/cgroup 的体现
  5. Union file system
  6. 容器网络模型标准 Container Network Model (CNM) 与其实现 libnetwork https://github.com/moby/libnetwork/blob/master/docs/design.md
  7. CNI 标准,不再使用 docker 自带的网络驱动,docker run –net=none
  8. libcontainer/containerd/runc

Kubernetes

基础

  1. k8s 虚拟机体验 https://github.com/XUJiahua/k8s-try

参考链接

  1. 官方文档 https://docs.docker.com/
  2. Docker — 从入门到实践 https://www.yuque.com/grasilife/docker/readme
  3. Golang UK Conf. 2016 - Liz Rice - What is a container, really? Let’s write one in Go from scratch https://www.youtube.com/watch?v=HPuvDm8IC-4
  4. Linux containers from scratch - diyC https://wvi.cz/diyC/
  5. Kubernetes for Full-Stack Developers https://www.digitalocean.com/community/curriculums/kubernetes-for-full-stack-developers

参考书籍

  1. Docker技术入门与实战(第3版)(2018)
  2. Docker 进阶与实战(2016) - 华为 Docker 实践小组
  3. Kubernetes网络权威指南:基础、原理与实践 (2019)