runlot

ORM

Prisma、Drizzle、Kysely、TypeORM、Sequelize、Knex に対応しています。実際のワーカー環境で CRUD とトランザクションを確認しました。

各 ORM に対応するアダプターを使用してください。以下の 6 つの ORM は、実際のワーカー環境で CRUD、トランザクションのコミット、ロールバックまでテストしています。

import { PrismaClient } from "@prisma/client";
import { PrismaRunlot } from "@runlot/pg/prisma";

const prisma = new PrismaClient({ adapter: new PrismaRunlot(env.db) });

const posts = await prisma.post.findMany({ orderBy: { createdAt: "desc" }, take: 20 });

await prisma.$transaction(async (tx) => {
  await tx.user.create({ data: { id: 3, name: "c" } });
});

Prisma 7 は WASM クエリコンパイラを使用します。runlot deploy.wasm ファイルを別モジュールとしてマニフェストに含めるため、自分で設定する必要はありません。

一意性制約の違反は、Prisma の規約に従って P2002 として返されます。他の 5 つの ORM では SQLSTATE 23505 を受け取ります。

バンドルサイズと測定結果

同じシナリオ(テーブル作成 → CRUD → トランザクションのコミット → ロールバック)を、実際のワーカー環境で測定しました。

ORMシナリオ全体バンドルサイズ必要な設定
Knex93 ms938 KBnodejs_compat(自動)
Sequelize137 ms2.7 MBnodejs_compat(自動)
Drizzle148 ms246 KBなし
Kysely148 ms473 KBなし
TypeORM174 ms2.8 MBnodejs_compat(自動)
Prisma291 ms417 KB + wasmWASM モジュール(自動)

バンドルが小さいほどコールドスタートに有利です。まだ ORM を決めていない場合は、Drizzle または Kysely から検討してみてください。

マイグレーション

ORM のマイグレーションツールは、SQL を生成する用途にのみ使用してください。適用は runlot pg migrate で行います。詳しくはマイグレーションを参照してください。

このページの目次