Tenant-scoped sharding
Use manual capacity when you already know the number of shards and want every
write to carry a tenant key.
import { backend } from "@layeron/core"import { db, table, text, integer, rawSql } from "@layeron/modules"
const app = backend()
const database = db({ name: "main", capacity: { mode: "manual", targetShardCount: 4, }, sharding: { tables: [ { name: "posts", keyColumn: "tenantId" }, { name: "comments", keyColumn: "tenantId" }, ], }, schema: { posts: table({ id: text().primaryKey(), tenantId: text().notNull().index(), title: text().notNull(), createdAt: integer().notNull().default(rawSql("(unixepoch())")), }), },})
app.use(database)
app.post("/tenants/:tenantId/posts", async (request) => { const pathSegments = new URL(request.url).pathname.split("/") const tenantId = pathSegments[2] const input = await request.json() as { title: string } const id = crypto.randomUUID()
await database.sql({ statement: "insert into posts (id, tenantId, title) values (?, ?, ?)", params: [id, tenantId, input.title], shard: { table: "posts", key: tenantId }, }).run()
return Response.json({ id }, { status: 201 })})