了解一下Lua,没准用得上

记得在知乎里面有一个网友提问:写工业级别代码是怎样一种体验?褚霸回复到:看lua源码就知道啥叫工业级

什么是Lua,我们有必要花一点时间来了解一下。

做数据库性能测试的时候,很常用的一个工具就是sysbench,而且有一点很特别,默认就是使用了Lua模板,有同学说Lua模板是什么,如果告诉你是一门新的脚本语言,很多同学就头大了,当然sysbench也不是甩手掌柜,已经给你配备了一系列的Lua模板,基本能够满足大多数场景的测试,比如OLTP读写,只读,插入,批量插入等模板。‘

了解一下Lua,没准用得上

当然也不是一劳永逸,如果我们深入做一些测试就会发现还是有一定的局限性,比如表名是sbtest[n]的方式,表结构清一色就是不到5个字段,而且表结构信息和数据也没法直接改动,如此一来和真实的场景还是差别很大,测试结果仅做参考,如果要改进,那就是基于模板深度定制一个更好一些。这也是我写这篇文章的一个出发点之一。

我们来简单了解下Lua,看下它的优点和缺点。这门语言诞生于巴西里约热内卢天主教大学,脚本解析器不到200K,非常适合阅读源码学习,而且在目前所有脚本引擎中,Lua的速度是最快的。在游戏行业里用得很多,比如在魔兽世界中,这一切都决定了Lua是作为嵌入式脚本的最佳选择。用一句很技术的评论说,就是

Lua源码满足了我们对c语言编程的所有幻想,可能是目前最好的c开源库之一。

当然光说好的也不好,我们得看看它不能做什么,或者做得不好的地方。简单总结下来就是

标准库功能太少、没有多核支持、没有unicode支持、c api太难用,而且比较纠结的是Lua 版本升级向来是不兼容的,这一点和Python兄弟很像,很任性。如果从5.1是要想升级到 5.2 要做很多额外的工作(最新版本是5.3.4)。

此外LuaJIT我们也可能会常见,可以理解是Lua的一个高效版,通过ffi把Lua的生态做得更加强大了。至少在sysbench启动的时候会明显看到如下的信息:

sysbench 1.1.0 (using bundled LuaJIT2.1.0-beta3)

操作系统层面如果调用lua命令,会发现是系统自带的。两者的版本明显不同。

# lua

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio,

到了这里,我们可以设定一个小目标,我们自己来定制Lua模板,来满足我们制定业务需求的测试场景,如果需要调整事务的大小和DML的比例,也可以通过配置灵活实现,想想多美好。

所以我们要做的一件事情就是在IDE中配置,我们选择IntelliJ,安装一个Lua插件。在如下的链接即可下载使用:

https://plugins.jetbrains.com/plugin/9768-emmylua

我们选择一个相对较新的版本

了解一下Lua,没准用得上

然后在IntelliJ里面配置插件,选中jar包即可。

了解一下Lua,没准用得上

插件EmmyLua就这样完成了安装,我们可以通过这种方式先看看sysbench里面的Lua模板,看看下一步该怎么做。

了解一下Lua,没准用得上

如果重建一个工程,我们会明显看到这个Lua的选项。

了解一下Lua,没准用得上

我没有学过Lua,但是我看Lua脚本的时候,发现和MHA里面的Perl语法很相似,有很多我觉得就是c的风格。总体易读性更强,因为模板的代码很简练,我们能很快找到重点。自己要定制的话相比MHA定制要容易一些(目前拍脑袋认为)。

比如insert的模板就是这些内容,除了oltp_common的内容,实际需要控制的逻辑还是很简洁的。

了解一下Lua,没准用得上

读写的模板略微复杂些,先花些时间在应用层面,然后逐步深入学习一下。

上一篇:九度OJ 1108 堆栈的使用


下一篇:《妥协的完美主义:优秀产品经理的实践指南(卷二)》一1.2 交互设计不是横空出世