Batch API
LibSQL Batch API 설명: 출처
libSQL 클라이언트 라이브러리에서 배치는 암묵적 트랜잭션에서 순서대로 실행되는 하나 이상의 SQL 문입니다. 트랜잭션은 libSQL 백엔드에서 제어됩니다. 모든 문이 성공하면 트랜잭션이 커밋됩니다. 문 중 하나라도 실패하면 전체 트랜잭션이 롤백되며 변경 사항이 적용되지 않습니다.
D1 Batch API 설명: 출처
배치는 단일 호출로 여러 SQL 문을 데이터베이스에 전송합니다. 이는 D1로의 네트워크 왕복 지연 시간을 줄여주므로 성능에 큰 영향을 미칠 수 있습니다. D1은 자동 커밋 모드로 작동합니다. 우리의 구현은 목록의 각 문이 순차적으로, 비동시적으로 실행되고 커밋됨을 보장합니다. 배치된 문은 SQL 트랜잭션입니다. 순서에서 문이 실패하면 해당 특정 문에 대한 오류가 반환되고 전체 순서가 중단되거나 롤백됩니다.
Drizzle ORM은 LibSQL, Neon, D1에 대해 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의 타입은 다음과 같습니다:
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;
}[],
]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()...,