Batch API

LibSQL Batch API 解释来源

使用 libSQL 客户端库,批量是按顺序执行的一个或多个 SQL 语句,位于隐式事务中。 事务由 libSQL 后端控制。如果所有语句都成功,事务将提交。如果任何语句失败,整个事务将回滚,不会进行任何更改。

D1 Batch API 解释来源

批量操作将多个 SQL 语句发送到数据库的单个调用中。 这可以极大地提高性能,因为它减少了从网络往返到 D1 的延迟。 D1 在自动提交模式下运行。我们的实现保证列表中的每个语句将依次、非并发地执行和提交。 批量语句是 SQL 事务。如果序列中的语句失败,则返回该特定语句的错误,并且中止或回滚整个序列。

Drizzle ORM 提供了用于 LibSQLNeonD1 的批量运行 SQL 语句的 API:

const batchResponse: BatchResponse = await db.batch([
  db.insert(usersTable).values({ id: 1, name: 'John' }).returning({ id: usersTable.id }),
  db.update(usersTable).set({ name: 'Dan' }).where(eq(usersTable.id, 1)),
  db.query.usersTable.findMany({}),
  db.select().from(usersTable).where(eq(usersTable.id, 1)),
  db.select({ id: usersTable.id, invitedBy: usersTable.invitedBy }).from(usersTable),
]);

此示例中 batchResponse 的类型为:

libSQL
Neon
D1
type BatchResponse = [
  {
    id: number;
  }[],
  ResultSet,
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    invitedBy: number | null;
  }[],
]
type BatchResponse = [
  {
    id: number;
  }[],
  NeonHttpQueryResult,
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    invitedBy: number | null;
  }[],
]
type BatchResponse = [
  {
    id: number;
  }[],
  D1Result,
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    name: string;
    verified: number;
    invitedBy: number | null;
  }[],
  {
    id: number;
    invitedBy: number | null;
  }[],
]

db.batch 中可用的所有可能的构建器:

db.all(),
db.get(),
db.values(),
db.run(),
db.execute(),
db.query.<table>.findMany(),
db.query.<table>.findFirst(),
db.select()...,
db.update()...,
db.delete()...,
db.insert()...,
Become a Gold Sponsor