跳至内容
GitHub 仓库 论坛 RSS 新闻源

INSERT INTO shard VALUES ("crystal-db")

Brian J. Cardiff

使用数据库是一项非常常见的任务。对于每种类型的数据库,都需要一个 shard 或库。当没有通用的 API 来与数据库进行通信时,构建更高级的 shard(例如 ORM 或迁移)会更加困难。要么最终只支持一个驱动程序,要么需要创建整个临时解决方案。缺少通用的 API 还意味着,当从一个数据库切换到另一个数据库时,您将需要学习不同的 API。您不可避免地需要处理一些 SQL 差异:?/$1TOP/LIMIT 等等。

一段时间以前,我们开始着手创建 crystal-lang/crystal-db 来构建一个统一的数据库 API。

我们很自豪地宣布,我们已经到达了它不再是概念验证的阶段。我们很高兴与您分享最新消息,并鼓励您使用和破坏它。

crystal-db 的作用是从 SQL 数据库驱动程序中抽象出来,这些驱动程序将使用 Socket 实现绑定甚至原始协议。

当前 crystal-db 实现包括

为什么 100% Crystal 实现很重要?通常,这意味着

  • 减少二进制依赖的痛苦,
  • 您可以深入了解协议。

但更重要的是

  • 减少内存占用,
  • 在不离开语言的乐趣的情况下,直接在套接字上读写服务器,
  • 利用 Crystal 中的所有本机异步 I/O,从而不会阻塞当前的 fiber。

此外,除了统一的查询 API 之外,crystal-db 还附带连接池、预处理语句和嵌套事务。

但是,请记住,作用不是抽象出不同 SQL 方言的特性:虽然 shard 提供了使用字符串编写 SQL 查询的通用 API,但它没有尝试分析和操作 SQL 代码本身。

下一步

我们需要改进 文档。除了使用 crystal docs,还向 添加了一个新部分crystal-book,该部分将在不久的将来继续增长。

我们希望这将有助于构建与多个驱动程序一起使用的 DB 工具和 shard,并鼓励更多人构建自己的驱动程序。

特别感谢