我在wasm中编写了一个add函数来测试Scylladb中WASM的性能,同时我用lua编写了add函数来比较性能。然而两种语言编译成UDF并没有明显的区别,这是为什么呢? 当计算量为1000000时: wasm的执行时间为:15258844ms lua的执行时间为:17901003ms
我希望这个对比能够展示WASM在UDF中的性能优势
根据您在评论中的澄清,您有 1000000 个单独的项目,并对每个项目调用一个简单的加法操作。显然,在这种情况下,读取和解析每个项目的开销可能超过加法的琐碎计算,因此无论该函数是用 Lua 还是 WASM 解释,差别不大。
此外,查看您报告的实际数字,将总时间除以项目数量,我们得到每个项目 15 毫秒。这是一个巨大的时间量,比 WASM 或 Lua 中的加法慢几个数量级。即使是小型集群也应该能够在扫描中每秒读取超过 65 个项目。对我来说,这表明您做错了什么......您实际上是在扫描中阅读了这些项目,还是在单独的请求中逐项阅读了?如果您使用单独的请求,您是否将它们并行化,或者只是一一发送?逐个发送单个请求仅意味着 15 毫秒是您的请求延迟 - 这与您的集群能够承受的吞吐量无关。请查看 Scylla 的监控,以验证您的集群是否已 100% 利用率,或者至少已显着利用率 - 如果您看到其利用率为 5%,那么您的数字就毫无意义。 无论如何,Lua 和 WASM 之间的性能差异(如果有很大的话)只会在需要运行大量代码的长而复杂的函数中可见。你所做的(一次添加)几乎就像用 Python 和 C++ 编写一个“hello world”程序,然后惊讶地发现两者都在 0.1 秒内完成 - 这既不能表明哪种语言更高效,也不能很好地衡量每种语言的性能(以任一语言将一行打印到输出都不需要 0.1 秒)。