了解一下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

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

目录
相关文章
|
druid Java 数据库连接
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
|
运维 监控 前端开发
sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术
What is sysAK、典型工具介绍、开源 3 方面介绍了 sysAK 系统,目前 sysAK 工具集已经在龙蜥社区开源,并且在系统运维 SIG、跟踪诊断 SIG 一起共建,希望大家后期加入 SIG 一起讨论共建。
sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术
|
运维 监控 安全
运维经理的运维经验总结(值得收藏)
1. 域名 从买域名开始,要买多个域名,50个甚至100个。分为主域名和推广域名(给推广链接用的)。要从godaddy上买域名,由于这里的域名稳固,不会出现被攻击等事变。同时还要买域名保护,如许互联网用户ping这个域名就剖析不到真实的办事器地点。同时域名解析的操纵不要在godaddy上举行,要把解析的操作放在cloudflare上大概dnspod上进行操作,也可以放到zndns上(这个dn
3606 0
|
JSON 缓存 JavaScript
Jayway - Json-Path 使用(二)
Jayway - Json-Path 使用(二)
1258 0
|
XML 存储 JSON
XML 教程(一文彻底搞懂XML)
只有启航 才会到达理想的目的地
3119 0
XML 教程(一文彻底搞懂XML)
|
8月前
|
SQL 存储 运维
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。由于内容丰富,本文中篇内容分享 Flink SQL 作业大状态导致反压的调优原理与方法。
69850 7
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
|
9月前
|
Web App开发 编解码 安全
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
3596 1
|
SpringCloudAlibaba 安全 Java
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(上)
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关
2599 0
|
9月前
|
Java Kotlin 索引
Lua 起航 —— 一些常用基础语法
Lua 起航 —— 一些常用基础语法
87 1
|
关系型数据库
cocos 寻路 lua实现
cocos 寻路 lua实现 local RoadPoint = {} function RoadPoint:CreateNode(p) -- body local t = {} t.g = -1; t.
1334 0

热门文章

最新文章