了解一下Lua,没准用得上

简介: 记得在知乎里面有一个网友提问:写工业级别代码是怎样一种体验?褚霸回复到:看lua源码就知道啥叫工业级 什么是Lua,我们有必要花一点时间来了解一下。 做数据库性能测试的时候,很常用的一个工具就是sysbench,而且有一点很特别,默认就是使用了Lua模板,有同学说Lua模板是什么,如果告诉你是一门新的脚本语言,很多同学就头大了,当然sysbench也不是甩手掌柜,已经给你配备了一系列的Lua模板,基本能够满足大多数场景的测试,比如OLTP读写,只读,插入,批量插入等模板。

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

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

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

img_dc175a8985ffde9fc5526b90a08db199.png

当然也不是一劳永逸,如果我们深入做一些测试就会发现还是有一定的局限性,比如表名是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

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

img_64e61c286214870b0ee66f16e9ae4ef0.jpe

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

img_0ac72beece68c0bb61fa1e518ed7e66c.jpe

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

img_ffe91de33e18a41bb9efd5f87906501b.jpe

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

img_2f657a4e62c1fc1b93535f2f7e03c3ab.jpe

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

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

img_dfe73d740de6b5fbc1de68a689667c4e.jpe

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

目录
相关文章
|
5月前
|
程序员
老程序员分享:lua类实现
老程序员分享:lua类实现
25 2
|
5月前
|
XML 编译器 C++
一篇文章讲明白lua文件是什么?
一篇文章讲明白lua文件是什么?
71 1
|
4月前
|
Python
告别代码冗余!Python闭包与装饰器如何让你秒变代码优化大师?
【7月更文挑战第6天】Python的闭包和装饰器是解决代码冗余的利器。闭包,如匿名函数,记忆外部作用域变量,实现代码封装。例如,`make_multiplier_of`生成特定乘法函数,避免重复。装饰器如`@my_decorator`,不修改原函数,添加额外功能,如在函数调用前后打印信息。两者结合,提升代码灵活性和复用性,是优化和整洁代码的关键。
28 0
|
5月前
lua源码阅读
lua源码阅读
|
6月前
|
Java Kotlin 索引
Lua 起航 —— 一些常用基础语法
Lua 起航 —— 一些常用基础语法
71 1
|
编译器 Linux C语言
lua编程基础
lua编程基础
108 0
|
数据采集 Linux C++
【Lua】《Lua 程序设计》摘录
【Lua】《Lua 程序设计》摘录
108 3
|
NoSQL Java 应用服务中间件
lua脚本的妙用
最近搞了一个redis相关的小工具,用到了lua,特此记录下
182 0
|
Java C++ Python
Python基础 聊一聊作用域是干嘛的
Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。