Cloudflare D1 Considerations
Repositories must account for Cloudflare D1 limitations.
No Transactions
Since D1 doesn't support transactions, repositories use sequential operations:
async createWithRelated(mainData, relatedData) {
const main = await this.db.insert(mainTable).values(mainData).returning();
const related = await this.db.insert(relatedTable).values({
...relatedData,
mainId: main[0].id,
}).returning();
return { main: main[0], related: related[0] };
}
Batch Operations
Large operations are batched:
const BATCH_SIZE = 100;
for (let i = 0; i < items.length; i += BATCH_SIZE) {
await this.db.insert(table).values(items.slice(i, i + BATCH_SIZE));
}
See Cloudflare D1 Limitations for more details.