TL;DR: LingoDB是一个用MLIR构建的实验室数据库,支持MLIR的原有特性,未来可期

VLDB 22的论文,作者团队来自TUM(德国慕尼黑工业大学)

项目官网:https://www.lingo-db.com/

文章下载地址:Full text

在Github开源了项目的代码:lingo-db,截至到2024.7.26,Star的数量为198

翻译下这个名字:设计一个用于查询编译和优化的开放框架(即LingoDB),说明可以在这个平台上实现想要的特性🧐

正文

Section1: 日常介绍(讲故事)🤐

Section2: 我们要站在巨人的肩膀上开发,而LLVM就是这个巨人的肩膀,可以帮助我们构建LingoDB这个开放的平台😄

Section3: 介绍MLIR这个强大的工具(怎么感觉这介绍MLIR的部分要比MLIR Tuotrial写的要好😅),讲了IR,Dialcect,Pass(Transform)这三个部分

Section4:将SQL转为MLIR架构,进而实现端到端😲(通过编写MLIR Dialect实现)

用户只管用就行了,开发者考虑的就多了😆

Section5:SQL -> MLIR的Dialect的编写

image-20240726174502000

相关源码(Op和Interface)可以在include/mlir/Dialect下面找到:

写了4种Dialect:

relalg(处理关系代数运算),db(处理数据类型与数据基本运算),dsa(数据库表,哈希表以及索引建立),util(杂项,比如Tuple的操作)

Table1的实现可见include/mlir/Dialect/RelAlg/IR/RelAlgOps.td

image-20240726174918903

image-20240726174954846

Table2的实现可见include/mlir/Dialect/DB/IR/DBOps.td

image-20240726175125454

image-20240726175239722

Section6:流程概览

有一张足够说明流程的全部细节的图:

将SQL,Pytorch模型转为MLIR,通过MLIR Dialect转换变为LLVM IR,最后读取Apache Arrow文件实现数据操作

image-20240726175352825

Section7,8:与其他数据库的对比(我没啥兴趣,大伙们感兴趣的可以自己下载论文看🤔)

Section9:可扩展性

用MLIR最大的优势在于,可以与PyTorch或TensorFlow框架对接,于是我们就见到了在数据库里跑模型的情况:

image-20240726175713540

数据库里可以跑模型?这可太酷了🤩~~(Wait,我明明有显卡,为什么要在数据库里面跑?)~~

Note:这部分内容,目前在LingoDB的文档中并未提及

Section10:未来展望

  1. 多线程运行(使用OpenMP相关的Dialect)
  2. 分布式运行(需要写Dialect支持MPI或RDMA)
  3. 异构计算

Section 11: 结语

总结

用MLIR写数据库,只能说意思,但感觉实用性不大:我为什么不直接用LLVM实现呢?😐

同样,多线程,分布式运行这两个Feature,直接用C++(Even Rust)实现会不会更加省事情🤐MLIR Dialect也不是能现学现用的东西

异构计算用MLIR确实有优势——那我为什么不用LLVM呢?😆

按我目前浅薄的理解:LLVM IR太底层,一些复杂操作(矩阵运算)不如MLIR方便——嗯,这可能是个不错的理由

实际情况是:

虽然LLVM相对简单,但仍然是相对的,比起高级语言来说手写LLVM IR仍有不低的复杂度。比如说实现一个简单的for循环或者分支语句,仍需要类似汇编的跳转指令

可以看看这篇文章,解决了我不少困惑:查询编译综述

还有,我为什么要在数据库里跑机器学习?😂受限于算力,短期内应该不存在这种需求

既然VLDB 22收了,想必有其中的道理,可以再蹲个后续