为什么SQLite适合边缘计算?


首先它是轻量级的:

软件行业有一个习惯,就是在高估和低估内存占用率的产品之间跳动。
在桌面内存以千字节为单位的时代,这是一个重要的因素,然后随着硬件变得更便宜和更强大,它被忽视了。

当我们开始为内存有限的移动设备编写软件时,这种趋势又回来了--直到制造商继续为它们配备千兆字节的内存和存储。

现在,无服务器函数环境,如Fermyon Spin和Cloudflare Workers,要求你的应用程序尽可能地紧凑。
他们这样做的原因很简单:如果你能在一台服务器上装下两倍的应用实例,你也就能把硬件成本降低一半左右。

SQLite是如何做到这一点的呢?它比类似的产品,如Postgres,要轻得多。

其次,它是快速的
速度当然是一个相对术语,但SQLite确实是一个高度优化的数据库库。与MySQL或Postgres等网络数据库管理系统相比,这几乎是不可能的,因为SQLite是一个在本地文件上操作的库--它绕过了网络、序列化和反序列化层、认证、授权等产生的所有成本。

不过,评估你想使用的数据库的性能是有意义的。SQLite有一个有用的工具,叫做speedtest1,它是快速了解你的设置的数据库性能的完美工具:

在撰写本文时,Cloudflare Worker的时间限制是10ms。这对于2500次数据库插入和几百次选择来说已经足够了听起来比你的典型购物车实施所需的数量级要多。

它是零配置的
可以说,SQLite的主要优势在于,你不需要花几十个小时去建立一个分布式系统,就能开始使用它。事实上,你真的不需要任何东西,甚至不需要一个硬盘,就可以开始原型设计。你的环境没有持久性存储?没问题:SQLite会很乐意为你运行一个内存数据库。这就转化为卓越的开发者体验。libSQL的主要重点是能够快速启动,在本地100%地建立项目原型,并在部署到生产时才将其推到云端。

坚如磐石
SQLite有一套广泛的测试支持,声称在不同方面和配置中都有100%的分支覆盖率:

  • 正确性检查
  • I/O错误测试
  • 模糊测试
  • 回归测试
  • 崩溃/断电测试
  • 受限内存测试
  • ...以及更多。

这个测试套件的相当一部分不幸是闭源的(我们正在努力)。然而,该软件被普遍认为是经过战斗考验的,因为它为从智能手机到飞机等一切设备提供动力。重要的是能够信任数据库与你的数据--避免损坏、数据丢失、比特腐烂,以及其他各种可能发生的不愉快的事情。虽然不可能安然无恙地逃脱所有这些情况,但适当的测试覆盖率是最好的预防措施,可以从这里开始。

它的功能很丰富
不要被它紧凑的尺寸所误导--SQLite具有丰富的功能。

它可以是Wasm!
SQLite,以及libSQL,可以被编译成一个简洁的Wasm模块--压缩后只有390 KiB,未压缩的大小不到900 KiB。它可以运行一个完全成熟的内存SQL引擎,但这还不是全部!它还能够持久化!它还能够在浏览器的localStorage或OPFS--Origin Private File System中持久化数据,这是一种为网络应用提供私有文件系统的现代方法。你可以试试这个演示,感受一下它是如何工作的。

但WebAssembly的功能远远超出了浏览器,SQLite也是如此。最近的版本编译到WASI--WebAssembly的模块化系统接口。这打开了整个新世界的可能性,使SQLite在边缘环境中可行,以Wasm模块的形式运行无服务器函数