データデータベース
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 | シナリオ全体 | バンドルサイズ | 必要な設定 |
|---|---|---|---|
| Knex | 93 ms | 938 KB | nodejs_compat(自動) |
| Sequelize | 137 ms | 2.7 MB | nodejs_compat(自動) |
| Drizzle | 148 ms | 246 KB | なし |
| Kysely | 148 ms | 473 KB | なし |
| TypeORM | 174 ms | 2.8 MB | nodejs_compat(自動) |
| Prisma | 291 ms | 417 KB + wasm | WASM モジュール(自動) |
バンドルが小さいほどコールドスタートに有利です。まだ ORM を決めていない場合は、Drizzle または Kysely から検討してみてください。
マイグレーション
ORM のマイグレーションツールは、SQL を生成する用途にのみ使用してください。適用は runlot pg migrate で行います。詳しくはマイグレーションを参照してください。